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

Android 10 (API уровня 29)


IgorK11

Вопрос

С недавнего времени при загрузке  обновлении приложений получаю:

Целевой уровень API для вашего приложения – 28. Чтобы обеспечить необходимую производительность и безопасность, целевой уровень API должен быть не ниже 29.
С августа 2020 года целевая версия новых приложений должна быть не менее Android 10 (API уровня 29)...
 

Спойлер

 

Delphi 10.3.3.

sdk29

ndk-r21

jdk-8.0.252.09

Снимок1.PNG

Снимок3.PNGСнимок4.PNGСнимок2.PNG

при компиляции в манифесте все равно     <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28" />

пробовал принудительно в AndroidManifest.template.xml ставить targetSdkVersion 29, приложение вылетает при старте.

10.4. вообще корявое г... Что еще можно сделать?

 

Изменено пользователем IgorK11
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

 Здравствуйте.
Некоторые пользователи Delphi 10.3 столкнулись с тем что даже при указании SDK 29 в манифесте проекта, при запуске скомпилированного приложения на платформе Android 10 происходило его падение.
В августе 30 числа 2020 года было дано решение как пофиксить эту проблему.
Переход на версию Delphi 10.4 не для всех является приемлемым решением, по разным причинам, к примеру у кого то платные компоненты и нет возможности обновиться до актуальных версий.
Ниже представлен перевод статьи. В конце будет ссылка на оригинал.
Приведенное здесь решение нацелено на обновление функции 'dlopen' в файле 'ICU.inc' (он включен в файл 'System.pas'). Вот шаги, необходимые для решения указанной проблемы:

  1. Откройте проводник и перейдите в папку по следующему пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source
  2. Скопируйте файлы из архива "missing_source_files.zip", который приложен в посту, в папку source из пункта "1" (комментарий от переводчика: в "missing_source_files.zip" лежит папка "rtl" в которой две папки - "posix", "sys". Лично я сделал сначала backup папки rtl из папки source, что и вам советую. Затем скопировал rtl папку из "missing_source_files.zip" и вставил в папку source)
  3. Переходим по пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\sys
  4. Открываем файл "ICU.inc" в текстовом редакторе (пожалуйста, сделайте backup файла 'ICU.inc' для пущей безопасности). (комментарий от переводчика: орудовать в этой папке без прав админа не вариант. Поэтому я советую сначала скопировать файл "ICU.inc" куда нибудь в другое место, к примеру в папку Documents и там уже открыть его в том же Блокноте и сделав необходимые изменения сохранить файл и затем уже переместить его в C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\sys с заменой)
  5. В текстовом редакторе надо изменить функцию InitICU:
    Было вот так:
    Спойлер
    
    function InitICU: Boolean;
     
    ...
     
    begin
      ICUVersionNumber := -1;
      Result := False;
    {$IFDEF MACOS}
      HICUUC := dlopen('/usr/lib/libicucore.dylib', RTLD_LAZY);
      HICUI18N := HICUUC;
    {$ELSEIF defined(LINUX)}
      HICUUC := OpenICU_Lib('libicuuc.so');
      HICUI18N := OpenICU_Lib('libicui18n.so');
    {$ELSEIF defined(ANDROID32)}
      HICUUC := dlopen('/system/lib/libicuuc.so', RTLD_LAZY);
      HICUI18N := dlopen('/system/lib/libicui18n.so', RTLD_LAZY);
    {$ELSE defined(ANDROID64)}
      HICUUC := dlopen('/system/lib64/libicuuc.so', RTLD_LAZY);
      HICUI18N := dlopen('/system/lib64/libicui18n.so', RTLD_LAZY);
    {$ENDIF}
    
    ...
     
    end;

     

    А сделать надо что было вот так:
     

    Спойлер
    
    function InitICU: Boolean;
     
    ...
     
    begin
      ICUVersionNumber := -1;
      Result := False;
    {$IFDEF MACOS}
      HICUUC := dlopen('/usr/lib/libicucore.dylib', RTLD_LAZY);
      HICUI18N := HICUUC;
    {$ELSEIF defined(LINUX)}
      HICUUC := OpenICU_Lib('libicuuc.so');
      HICUI18N := OpenICU_Lib('libicui18n.so');
    {$ELSE defined(ANDROID)}
      HICUUC := dlopen('libicuuc.so', RTLD_LAZY);
      HICUI18N := dlopen('libicui18n.so', RTLD_LAZY);
    {$ENDIF}
     
    ...
     
    end;

     



     

  6. Сохраняем сделанные изменения в файле "ICU.inc"

  7. Возвращаемся в проводник и переходим в папку %USERPROFILE%

  8. Скопируйте файл "build.bat" из архива "build_script.zip" , который приложен в этому посту в папку из пункта 7.

  9. Запустите от имени Администратора файл "build.bat". (Он создаст папку %USERPROFILE%\build в которой будет несколько папок с файлами. Из них нам нужны будут только System.o, но об этом ниже)

  10. Возвращаемся в проводник и переходим в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\debug

  11. Скопируйте файл "System.o" из папки %USERPROFILE%\build\android\debug в папку из шага 10 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай).

  12. Теперь переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\release

  13. Скопируйте файл "System.o" из папки %USERPROFILE%\build\android\release в папку из шага 12 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай).

  14. Переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\debug

  15. Скопируйте файл "System.o" из папки %USERPROFILE%\build\android64\debug  в папку из шага 14 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай).

  16. Переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\release

  17. Скопируйте файл "System.o" из папки %USERPROFILE%\build\android64\release в папку из шага 16 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай).

 

На этом всё. Автор данного перевода лично прошел по всем шагам и сделал всё как было сказано, а также протестил на приложении что уже было в PlayMarket'е но не запускалось под Android 10. Я его обновил и запустил как на Android ниже 10, так и на Android 10. 

ЕСЛИ ВЫ НЕ ДОВЕРЯЕТЕ ПЕРЕВОДУ И/ИЛИ ВЫЛОЖЕННЫМ ФАЙЛАМ, ТО НИЖЕ ДАНА ССЫЛКА НА ОРИГИНАЛ СТАТЬИ
// файлы выложенные здесь, взяты с форума где оригинал статьи.

Ссылка на оригинал https://quality.embarcadero.com/browse/RSP-27218
Если нет логина, то под споллером скрины экрана с форума ссылки выше:
 

Спойлер

image.thumb.png.b71b609bf99c0164cb19ba21f62332f4.png

image.thumb.png.e0827356357116ddafe297489c9efe03.png

 

 

Отдельное спасибо пользователю Stanislau Ihnatovich за сообщение в Telegram о том что есть решение

 

build_script.zipmissing_source_files.zip

 

Изменено пользователем brunnengi
Ссылка на комментарий
  • 0

Все сделал пошагово, но так и не получилось запустить на Android 10 с SDK 29 в манифесте.

Подскажите, где я мог допустить ошибку?

 image.thumb.png.52cfdfb0c1af8488ee6f04f8f6c626a1.png

Ссылка на комментарий
  • 0
В 17.07.2021 в 18:11, Hevard сказал:

Осталось понять, а как быть с андроид 11?

Я для себя выбрал Flutter. И, к сожалению, попрощался с RAD studio. Хоть и не хотел этого делать упорно много лет. Кому нужна кросс-платформенность - обратите внимание на него.

Ссылка на комментарий
  • 0
1 час назад, MAD_EVAL сказал:

Я для себя выбрал Flutter. И, к сожалению, попрощался с RAD studio. Хоть и не хотел этого делать упорно много лет. Кому нужна кросс-платформенность - обратите внимание на него.

как там с UI ? Есть удобный UI Designer, как в Delphi ?

Ссылка на комментарий
  • 0
37 минут назад, Android сказал:

как там с UI ? Есть удобный UI Designer, как в Delphi ?

Ставлю удобный дизайнер на последнее место, после всего с чем столкнулся в RAD Studio с 2015 года. Увы, лично для меня RAD studio стала тупиковой. По поводу UI дизайнера... ну тут как знать... я не считаю что рисовать интерфейс "от руки" это необходимо. И я и мои коллеги верстают WEB страницы и разрабатывают приложения и без билдеров. При должном опыте это и легче и качественнее. Конкретно по Flutter - эмулятор в рантайме показывает всё что Вы пишите. Есть превью в браузере, полноценно работающее, потому как Flutter это кроссплатформенное решение под Ios / Android / Web. Так же есть визуальные конструкторы интерфейса, как пример https://flutterstudio.app/. Полно их. И бесплатных и платных. Dart - гибкое решение. IDE любая, хоть Notepad++ и сборка из консоли, я использую Android Studio. Быстродействие приложения высокое, муть с зависимостями постепенно побеждают, перспектива, на мой взгляд шикарная. Уточню, я выражаю личное мнение, чужое мнение не оспариваю, RAD Studio не обижаю )) я делфист с 2003 года. Просто так сложилось что я делаю за 2 дня качественно с Flutter то что буду разматывать в RAD своими силами, с помощью этого форума, гугла и такой-то матери неделями... тем более кросс-платформенность реальная, не притянутая за уши.

Ссылка на комментарий
  • 0
В 19.07.2021 в 13:37, MAD_EVAL сказал:

Я для себя выбрал Flutter. И, к сожалению, попрощался с RAD studio. Хоть и не хотел этого делать упорно много лет. Кому нужна кросс-платформенность - обратите внимание на него.

Вы fgx видели?

Ссылка на комментарий
  • 0
В 10.09.2020 в 03:17, brunnengi сказал:

 Здравствуйте.
Некоторые пользователи Delphi 10.3 столкнулись с тем что даже при указании SDK 29 в манифесте проекта, при запуске скомпилированного приложения на платформе Android 10 происходило его падение.
В августе 30 числа 2020 года было дано решение как пофиксить эту проблему.
Переход на версию Delphi 10.4 не для всех является приемлемым решением, по разным причинам, к примеру у кого то платные компоненты и нет возможности обновиться до актуальных версий.
Ниже представлен перевод статьи. В конце будет ссылка на оригинал.
Приведенное здесь решение нацелено на обновление функции 'dlopen' в файле 'ICU.inc' (он включен в файл 'System.pas'). Вот шаги, необходимые для решения указанной проблемы:

  1. Откройте проводник и перейдите в папку по следующему пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source
  2. ...
  3. ...

Спасибо!

Актуально на сегодняшний день.

На Android 11 после первого же обновления перестали запускаться приложения, написанные на Delphi 10.2 (Tokyo).

Пришлось установить RAD Studio 3.3 и воспользоваться приведенным лекарством.

Заработало!

Ссылка на комментарий
  • 0
В 13.02.2022 в 19:53, Вадим Окунев сказал:

Спасибо!

Актуально на сегодняшний день.

На Android 11 после первого же обновления перестали запускаться приложения, написанные на Delphi 10.2 (Tokyo).

Пришлось установить RAD Studio 3.3 и воспользоваться приведенным лекарством.

Заработало!

 

В 13.02.2022 в 19:53, Вадим Окунев сказал:

Спасибо!

Актуально на сегодняшний день.

На Android 11 после первого же обновления перестали запускаться приложения, написанные на Delphi 10.2 (Tokyo).

Пришлось установить RAD Studio 3.3 и воспользоваться приведенным лекарством.

Заработало!

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...