Перейти к содержанию
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 видели?

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...