qz5
-
Постов
151 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Активность репутации
-
qz5 отреагировална Slym в Линковка Kotlin (Котлин) библиотек в Delphi
Для лайков и хейтов. Все у кого получилось отписывайтесь что прилинковали и выкладывайте хедеры
-
qz5 отреагировална Slym в Линковка Kotlin (Котлин) библиотек в Delphi
Линковка Kotlin (Котлин) библиотек в Delphi, как делаю:
Хедеры линкуемых библиотек обычно громадны описанием всех типов...
Я обычно делаю свой jar на java в нем линкую зависимости и наружу для дельфи оставляю один объект с простыми функциями.
Хедер дельфи получается компактным и понятным:
package com.MyCompany.evotor; public interface J2DCallback { void Log(String str); String Trans(String str); String GetValue(String name); void SetValue(String name, String value); Activity GetActivity(); Context GetContext(); } public class FiscalCoreConnection { final private Global Instance; public FiscalCoreConnection(J2DCallback aj2d) throws NullPointerException { Instance = new Global(aj2d); } public String SendJSON(String JSON){ try{ return Instance.SendJson(JSON); } catch (Exception e) { return FiscalCoreException.MakeJson(e); } } } type J2DCallbackClass = interface(IJavaClass) ['{856654D5-7939-44DF-ACD5-E2EF8C6D3AA4}'] end; [JavaSignature('com/MyCompany/evotor/J2DCallback')] J2DCallbackIntf = interface(IJavaInstance) ['{025B14E9-C041-4105-9E85-83CC127CC340}'] procedure Log(str:JString); cdecl; function Trans(str:JString):JString; cdecl; function GetValue(name:JString):JString; cdecl; procedure SetValue(name:JString; value:JString); cdecl; function GetActivity():JActivity; cdecl; function GetContext():JContext; cdecl; end; TJ2DCallbackImp = class(TJavaGenericImport<J2DCallbackClass, J2DCallbackIntf>) end; [JavaSignature('com/MyCompany/evotor/FiscalCoreConnection')] JFiscalCoreConnection = interface(JObject) ['{5797747D-D61D-4EF6-94F7-5E8994545CC2}'] function SendJSON(JSON:JString):JString; cdecl; end; JFiscalCoreConnectionClass = interface(JObjectClass) ['{81782882-DFCF-4FA9-BD37-02CCCF2409EA}'] function init(j2d : J2DCallbackIntf) : JFiscalCoreConnection; cdecl; end; TJFiscalCoreConnection = class(TJavaGenericImport<JFiscalCoreConnectionClass, JFiscalCoreConnection>) end; TJ2DCallback = class(TJavaLocal, J2DCallbackIntf) public procedure Log(str:JString); cdecl; function Trans(str:JString):JString; cdecl; function GetValue(name:JString):JString; cdecl; procedure SetValue(name:JString; value:JString); cdecl; function GetActivity():JActivity; cdecl; function GetContext():JContext; cdecl; end; Все зависимости в build.gradle:
dependencies { implementation 'com.github.evotor:integration-library:v0.4.50' implementation 'com.google.zxing:core:3.4.0' } В Дереве External Libraries забираем jarы зависимостей
ПКМ Show in Explorer. Копируем в папку своего проекта и даем осознанное имя.
Там же забираем kotlin-stdlib
ПКМ Show in Explorer. Копируем в папку своего проекта и даем осознанное имя.
Но в kotlin-stdlib.jar есть "лишний" файл kotlin-stdlib-1.5.10.jar\META-INF\versions\9\module-info.class
Открываем архиватором и удаляем файл или всю папку versions
Почти все готово... Но котлин еще и посыпан сахаром и не хочет Дельфей dexится, хочет -min-sdk-version=26
Поможем Delphi:
Ищем CodeGear.Common.Targets, у меня он в "C:\Program Files (x86)\Embarcadero\Studio\21.0\bin"\
Ищем в нем --output, и перед ним вставим все про sdk. У меня получилось так:
<DxCmd>PATH $(JDKPath)\bin;$(PATH); %26 set JAVA_HOME=$(JDKPath)%26 "$(JavaDxPath)" --dex --min-sdk-version=26 --output=</DxCmd>
Далее цепляем все jar в проект
Либа производителя, Либа своя обертка, и котлин
Иии собираем!
Если есть еще зависимости делаем аналогично:
находим jar, выпиливаем META-INF\versions\9\module-info.class, линкуем в проект и собираем...
Не все зависимости используются и нужны, поэтому добавляем поштучно до тех пор пока не заведется.
-
qz5 получил реакцию от PowerOwl в Вышла Community Edition версии 10.4.2 (Delphi & C++Builder)
Официальная новость - Delphi & C++Builder FREE Community Editions Updated to Version 10.4.2 Are Now Available!
Пока надо будет получать для этой версии новые ключи, старые от 10.3.3 не подходят
-
qz5 получил реакцию от Ingalime в Вышла Community Edition версии 10.4.2 (Delphi & C++Builder)
Официальная новость - Delphi & C++Builder FREE Community Editions Updated to Version 10.4.2 Are Now Available!
Пока надо будет получать для этой версии новые ключи, старые от 10.3.3 не подходят
-
qz5 получил реакцию от Android в Вышла Community Edition версии 10.4.2 (Delphi & C++Builder)
Официальная новость - Delphi & C++Builder FREE Community Editions Updated to Version 10.4.2 Are Now Available!
Пока надо будет получать для этой версии новые ключи, старые от 10.3.3 не подходят
-
qz5 получил реакцию от Ingalime в Это приложение было создано для более ранней версии Android
Приложение может вылетать по разным причинам.
Возможно дело в том, что пытаетесь прочитать или записать файл в публичную папку. На Андроид 11 мало запроса разрешения, теперь чтение и запись файлов делается иначе.
У меня приложение на Делфи работает на 29 СДК (это от Андроид 10), но пришлось добавить строку, о которой написано в теме на которую дал ссылку. Иначе не работало на Андроид 11.
-
qz5 получил реакцию от Ingalime в TPath.GetSharedDownloadsPath в Android 11 не находит файлы
Вот еще почитать на эту тему:
https://developer.android.com/training/data-storage/use-cases
и
https://developer.android.com/about/versions/11/privacy/storage
Так что после Target SDK 30 вообще старый код работать не будет... Нужно будет переписывать код работы с файлами.
-
qz5 получил реакцию от Ingalime в TPath.GetSharedDownloadsPath в Android 11 не находит файлы
Дело в том, что ты выставил Target SDK 29
Теперь чтобы на Андроид 10, 11 или 12 старым способом иметь доступ к файлам надо объявить явно это в манифесте
Кажется с помощью android:requestLegacyExternalStorage="true"
но лучше погугли.
И вообще в будущем возможно... Гугл зарежут прямой доступ к файлам и придется через медиа-запросы обращаться к файлам.
-
qz5 получил реакцию от Android в TPath.GetSharedDownloadsPath в Android 11 не находит файлы
Вот еще почитать на эту тему:
https://developer.android.com/training/data-storage/use-cases
и
https://developer.android.com/about/versions/11/privacy/storage
Так что после Target SDK 30 вообще старый код работать не будет... Нужно будет переписывать код работы с файлами.
-
qz5 получил реакцию от Ingalime в Как сделать управление в TWebBrowser под Win как на мобильных платформах
Есть еще вариант использовать CEF4Delphi - https://github.com/salvadordf/CEF4Delphi
-
qz5 получил реакцию от Yarpda в Как сделать управление в TWebBrowser под Win как на мобильных платформах
Есть еще вариант использовать CEF4Delphi - https://github.com/salvadordf/CEF4Delphi
-
qz5 получил реакцию от Android в Selenium Webdriver для Firemonkey?
Пробежался.
Да, можно обычным Webview управлять, как Вы делали через Селениум. Селениум у Вас просто удобный инструмент для доступа к режиму удаленного управления браузера. Можно и без него, например через Chrome DevTools.
Включить то программным образом режим отладки можно через команду setWebContentsDebuggingEnabled(true), но дальше начинаются сложности, остальное видимо возможно только, если писать на Java.
Дальше я просто не знаю. Там уже темный лес, но в любом случае лезьте туда. только если знаете Java.
Т.е. режим удаленной отладки, который использует Селениум, и так уже встроен в Webview (веб-браузер, который встраивается в приложения), но предполагается, что его используют не из самой программы, а удаленно. Либо через Chrome DevTools, либо через такие штуки как Селениум.
p.s. это мои измышления, может реальность и другая. Я еще порою в этом направлении, но сомневаюсь, что смогу найти быстрое решение...
Так что пока предлагаю переписать все на JS и запускать через EvaluateJavaScript. Там тоже есть свои подводные камни (например получение результата из скрипта), но это по-крайней мере можно сделать в Delphi.
-
qz5 получил реакцию от Android в Selenium Webdriver для Firemonkey?
У стандартного Webview есть процедура включения удаленного управления, через который Селениум работает. Называется setWebContentsDebuggingEnabled.
В Делфи реализовано, но я не пробовал его использовать. Сейчас пороюсь, возможно ли.
-
qz5 получил реакцию от Android в Selenium Webdriver для Firemonkey?
Я использую немного обычный Webview
Про Селениум знаю, но для чего бы его использовать в Firemonkey? Может быть, если мне нужно будет, то попробую примастрячить (я уже кое какие сторонние от Firemonkey штуки подключил в Андроид, может быть и это сделаю).
Я знаю, что его используют например тестировщики, но что оно дает разработчикам программ?
-
qz5 получил реакцию от ENERGY в Публикация приложения на Google Play
вот инструкция на английском, с картинками - http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
-
qz5 получил реакцию от Android в Публикация приложения на Google Play
вот инструкция на английском, с картинками - http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
-
qz5 получил реакцию от Ingalime в Публикация приложения на Google Play
вот инструкция на английском, с картинками - http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
-
qz5 получил реакцию от Ingalime в RAD Studio 10.3.3 (с поддержкой Андроид 64-бит, macOS Catalina 64-bit, iOS 13)
Как исправить ошибку есть в этой теме :
А вообще на этой неделе вышла версия 10.4, где эта проблема исправлена (RSP-27140)!
-
qz5 получил реакцию от Ingalime в Поддержка x32 систем в Google Play
Надо включить вот эту галочку:
Но подробнее в этой статье на английском: https://blog.marcocantu.com/blog/2019-delphi-android-64bit-rad-1033.html
Читайте там "Android App Bundle Support"
-
qz5 получил реакцию от Ingalime в Поддержка x32 систем в Google Play
Нужно выкладывать в формате ААВ. Где-то на форуме была инструкция и на оф.сайте инструкция на английском. Там галочку надо включить в настройках 64-битной версии.
-
qz5 получил реакцию от Yarpda в [DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку
Вот здесь включается AAB
-
qz5 получил реакцию от Ingalime в [DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку
Возможно их надо класть в другую папку
Вы компилируйте в apk или в AAB?
Попробуйте оба варианта. И вообще - то разве не в папке lib\armeabi-v7a (для 32 бит) должны библиотеки находиться? Ну и соответственно в lib/arm64-v8a 64-битные.
Попробуйте их в эти папки деплоить!
-
qz5 отреагировална CyberStorm в RAD Studio 10.3.3 (с поддержкой Андроид 64-бит, macOS Catalina 64-bit, iOS 13)
Ответ: https://rutracker.org/forum/viewtopic.php?p=78350087#78350087
В: День добрый. У меня предыдущая версия (10.3.2). Нужно ли ее сносить перед установкой 10.3.3 ?
О: Если новая версия отличается только последней цифрой, то нужно всегда, потому что она ставиться в ту же папку. А вот 10.3.3 и 10.4 можно будет ставить параллельно. -
qz5 отреагировална krapotkin в не отрабатывает TThread.synchronize
ну, есть идеи, как бы модифицировать код, но и так сойдет
я бы перефразировал
if frmScanWindow = nil then frmScanWindow := TFrmScanWindow.Create(NIL); frmScanwindow.showModal( procedure (const AResult:TModalResult) begin if AResult = mrOK then begin ....... и может быть даже FreeAndNil(frmScanwindow); end; end);
-
qz5 отреагировална Tumaso в Долгая реакция переключения вкладок
Попробуй при создании приложения единоразово вызвать процедуру PreloadContent(TabControl2), где PreloadContent определена следующим образом:
procedure PreloadContent(const AControl: TControl); {$IF DEFINED(ANDROID) or DEFINED(IOS)} var I: Integer; {$ENDIF} begin {$IF DEFINED(ANDROID) or DEFINED(IOS)} if AControl is TStyledControl then TStyledControl(AControl).ApplyStyleLookup; if AControl.ControlsCount > 0 then for I := 0 to AControl.ControlsCount - 1 do PreloadContent(AControl.Controls[I]); {$ENDIF} end;