Перейти к содержанию
Fire Monkey от А до Я

qz5

Пользователи
  • Постов

    151
  • Зарегистрирован

  • Посещение

  • Победитель дней

    13

Активность репутации

  1. Like
    qz5 отреагировална Slym в Линковка Kotlin (Котлин) библиотек в Delphi   
    Для лайков и хейтов. Все у кого получилось отписывайтесь что прилинковали и выкладывайте хедеры
     
  2. Like
    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, линкуем в проект и собираем...
    Не все зависимости используются и нужны, поэтому добавляем поштучно до тех пор пока не заведется.
  3. Like
    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 не подходят
     
  4. Like
    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 не подходят
     
  5. Like
    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 не подходят
     
  6. Like
    qz5 получил реакцию от Ingalime в Это приложение было создано для более ранней версии Android   
    Приложение может вылетать по разным причинам.
    Возможно дело в том, что пытаетесь прочитать или записать файл в публичную папку. На Андроид 11 мало запроса разрешения, теперь чтение и запись файлов делается иначе.
     
    У меня приложение на Делфи работает на 29 СДК (это от Андроид 10), но пришлось добавить строку, о которой написано в теме на которую дал ссылку. Иначе не работало на Андроид 11.
  7. Like
    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 вообще старый код работать не будет... Нужно будет переписывать код работы с файлами.
  8. Like
    qz5 получил реакцию от Ingalime в TPath.GetSharedDownloadsPath в Android 11 не находит файлы   
    Дело в том, что ты выставил Target SDK 29
    Теперь чтобы на Андроид 10, 11 или 12 старым способом иметь доступ к файлам надо объявить явно это в манифесте
    Кажется с помощью android:requestLegacyExternalStorage="true"
    но лучше погугли.
    И вообще в будущем возможно... Гугл зарежут прямой доступ к файлам и придется через медиа-запросы обращаться к файлам.
  9. Thanks
    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 вообще старый код работать не будет... Нужно будет переписывать код работы с файлами.
  10. Like
    qz5 получил реакцию от Ingalime в Как сделать управление в TWebBrowser под Win как на мобильных платформах   
    Есть еще вариант использовать CEF4Delphi - https://github.com/salvadordf/CEF4Delphi
     
  11. Like
    qz5 получил реакцию от Yarpda в Как сделать управление в TWebBrowser под Win как на мобильных платформах   
    Есть еще вариант использовать CEF4Delphi - https://github.com/salvadordf/CEF4Delphi
     
  12. Thanks
    qz5 получил реакцию от Android в Selenium Webdriver для Firemonkey?   
    Пробежался.
    Да, можно обычным Webview управлять, как Вы делали через Селениум. Селениум у Вас просто удобный инструмент для доступа к режиму удаленного управления браузера. Можно и без него, например через Chrome DevTools.
    Включить то программным образом режим отладки можно через команду setWebContentsDebuggingEnabled(true), но дальше начинаются сложности, остальное видимо возможно только, если писать на Java.
    Дальше я просто не знаю. Там уже темный лес, но в любом случае лезьте туда. только если знаете Java.
    Т.е. режим удаленной отладки, который использует Селениум, и так уже встроен в Webview (веб-браузер, который встраивается в приложения), но предполагается, что его используют не из самой программы, а удаленно. Либо через Chrome DevTools, либо через такие штуки как Селениум.
    p.s. это мои измышления, может реальность и другая. Я еще порою в этом направлении, но сомневаюсь, что смогу найти быстрое решение...
    Так что пока предлагаю переписать все на JS и запускать через EvaluateJavaScript. Там тоже есть свои подводные камни (например получение результата из скрипта), но это по-крайней мере можно сделать в Delphi.
  13. Thanks
    qz5 получил реакцию от Android в Selenium Webdriver для Firemonkey?   
    У стандартного Webview есть процедура включения удаленного управления, через который Селениум работает. Называется setWebContentsDebuggingEnabled.
    В Делфи реализовано, но я не пробовал его использовать. Сейчас пороюсь, возможно ли.
  14. Thanks
    qz5 получил реакцию от Android в Selenium Webdriver для Firemonkey?   
    Я использую немного обычный Webview
    Про Селениум знаю, но для чего бы его использовать в Firemonkey? Может быть, если мне нужно будет, то попробую примастрячить (я уже кое какие сторонние от Firemonkey штуки подключил в Андроид, может быть и это сделаю).
    Я знаю, что его используют например тестировщики, но что оно дает разработчикам программ?
  15. Like
    qz5 получил реакцию от ENERGY в Публикация приложения на Google Play   
    вот инструкция на английском, с картинками - http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
  16. Like
    qz5 получил реакцию от Android в Публикация приложения на Google Play   
    вот инструкция на английском, с картинками - http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
  17. Like
    qz5 получил реакцию от Ingalime в Публикация приложения на Google Play   
    вот инструкция на английском, с картинками - http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
  18. Like
    qz5 получил реакцию от Ingalime в RAD Studio 10.3.3 (с поддержкой Андроид 64-бит, macOS Catalina 64-bit, iOS 13)   
    Как исправить ошибку есть в этой теме :
    А вообще на этой неделе вышла версия 10.4, где эта проблема исправлена (RSP-27140)!
  19. Like
    qz5 получил реакцию от Ingalime в Поддержка x32 систем в Google Play   
    Надо включить вот эту галочку:

    Но подробнее в этой статье на английском: https://blog.marcocantu.com/blog/2019-delphi-android-64bit-rad-1033.html
    Читайте там "Android App Bundle Support"
  20. Like
    qz5 получил реакцию от Ingalime в Поддержка x32 систем в Google Play   
    Нужно выкладывать в формате ААВ. Где-то на форуме была инструкция и на оф.сайте инструкция на английском. Там галочку надо включить в настройках 64-битной версии.
  21. Thanks
    qz5 получил реакцию от Yarpda в [DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку   
    Вот здесь включается AAB
  22. Like
    qz5 получил реакцию от Ingalime в [DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку   
    Возможно их надо класть в другую папку
    Вы компилируйте в apk или в AAB?
    Попробуйте оба варианта. И вообще - то разве не в папке lib\armeabi-v7a (для 32 бит) должны библиотеки находиться? Ну и соответственно в lib/arm64-v8a  64-битные.
    Попробуйте их в эти папки деплоить!
     
  23. Like
    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 можно будет ставить параллельно.
  24. Like
    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);  
  25. Like
    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;  
×
×
  • Создать...