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

PowerOwl

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

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

  • Посещение

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

    7

Сообщения, опубликованные PowerOwl

  1. Добрый день. У моего тестового приложения под андроид есть сервис com.embarcadero.services.Project2. Код в сервисе уже полностью готов, однако при попытке запустить сервис из формы в приложении с помощью TLocalServiceConnection.StartService('Project2'); Приложение останавливается с ошибкой Segmentation Fault(11) в модуле FMX.Platform.Android

    477821764_26-08-202122-28-52.thumb.png.4947b94692cf23a853b859cc36c0872f.png

    Я не знаю, в чём может быть дело. Даже если поставить точку остановки на Application.Run в Project2.so, то всё равно происходит это. Если поставить точку остановки на строку после запуска сервиса из формы, то приложение доходит до неё без проблем. Вроде бы рассказал всё, что может помочь. Прикладывать код сервиса не вижу смысла, так как ошибка происходит даже не дойдя до инициализации сервиса. Но если понадобится какая-то дополнительная информация, могу предоставить.

    P.S. Delphi 10.4.2 Community Edition

  2. Логи:

    FATAL EXCEPTION: main
    Process: com.embarcadero.PublicRadio, PID: 9717
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.embarcadero.PublicRadio/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.embarcadero.PublicRadio-1/lib/arm/libPublicRadio.so
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
        at android.app.ActivityThread.access$1100(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
        at android.os.Handler.dispatchMessage(Handler.java)
        at android.os.Looper.loop(Looper.java)
        at android.app.ActivityThread.main(ActivityThread.java)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
    Caused by: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.embarcadero.PublicRadio-1/lib/arm/libPublicRadio.so
        at android.app.NativeActivity.onCreate(NativeActivity.java)
        at com.embarcadero.firemonkey.FMXNativeActivity.onCreate(FMXNativeActivity.java:135)
        at android.app.Activity.performCreate(Activity.java)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
        ... 10 more

    Библиотека libPublicRadio.so по пути /data/app/com.embarcadero.PublicRadio-1/lib/arm присутствует, значит что-то не так с самой библиотекой. Тут уже можно только гадать. Я бы на вашем месте попробовал создать новый проект, перенести в него код и компоненты со старого и попробовать скомпилировать сразу под Андроид-32.

  3. 2 часа назад, Ingalime сказал:

    Не могу я собрать 32 бит падает.

    Если падает, значит скорее всего какие-то файлы не задеплоились.

     

    6 часов назад, Andrey Efimov сказал:

    Перед тем как вы соберётесь выложить сюда собранный 32-битный apk, проверьте его, открыв например в винраре. Зайдите в папку "lib" и проверьте каждую папку. Выше я уже написал, что будет внутри каждой папки для 32-битного apk и для 64-битного apk (https://fire-monkey.ru/topic/7447-android-10-и-музплеер/?do=findComment&comment=43249). Т.о. в 32-битном apk должна получиться примерно такая структура (на примере Project1):

    • armeabi - заглушка libProject1.so.
    • armeabi-v7a - ваш проект libProject1.so, сервис, библиотека bass и т.д.
    • mips - заглушка libProject1.so.

    По всей видимости вы напрочь проигнорировали совет Андрея Ефимова, или же просто даже не читали, что он написал. Откройте полученный apk через любой архиватор и проверьте, чтобы в каталогах были все необходимые файлы.

     

    2 часа назад, Ingalime сказал:

    Обнаружилось что папки armeabi вообще нет.

    Если нет, значит разработчики библиотеки BASS посчитали, что платформа armeabi больше не является актуальной. В каталоге armeabi должна быть заглушка libProject1.so

  4. 47 минут назад, Andrey Efimov сказал:

    Оба apk файла собраны для 64-бит.

    Сам не обратил внимания на это.

    Для Ingalime:

    Ваш apk внутри выглядит так:

    1361708318_Screenshot_20210708-1546361.thumb.png.45f43b78270b6938262fed3824f46cb3.png

    В директории lib должны находится библиотеки необходимые приложению. Для каждой архитектуры процессоров нужны свои библиотеки. Следовательно они рассортированы по каталогам:

    703092827_Screenshot_20210708-1546481.thumb.png.51a7c76301fb93d370c5fa17ffe210cc.png

    Внутри каталога arm64-v8a всё необходимое присутствует:

    1991487686_Screenshot_20210708-1546551.thumb.png.a791ad2d21382233ab27a7d5af51d0d3.png

    Соответственно, при установке приложения на 64-битное устройство, установщик будет доставать файлы отсюда.

    Однако, если устанавливать на 32-битное устройство, то установщик будет доставать файлы уже из каталога armeabi-v7a:

    501077326_Screenshot_20210708-1543571.thumb.png.956b1387987025a53a862004bc05a723.png

    В этом каталоге есть библиотека BASS, значит вы её всё-же задеплоили. Однако других файлов приложения тут нет, из-за чего оно и крашится при запуске.

  5. Всё еще вылетает.

    Вот логи снятые с logcat:

    Screenshot_20210708-135554.thumb.png.ddc39e9c12d202340ae2ce2a293692dc.png

    Вам следует сделать дебаг-версию вашего апк и проверить на любом эмуляторе андроида, создав образ 32-битной системы. Если получите ошибку не в юните вашего приложения, тогда с помощью брейкпоинтов(клик слева от номера строки) искать место, где происходит ошибка.

  6. Android 6.0.1 - падение. А вы хоть разобрались с Deployment? Я так понимаю, что приложение падает от того, что пытается найти файлы библиотеки BASS для armeabi-v7a, но не находит. А на 64-битных устройствах всё работает от того, что им нужны файлы для arm64-v8a, которые вы задеплоили.

  7. У меня, кстати, появилось предположение, почему прога запустилась у меня на Android 10, но на Android 6.0.1 и у Олега Киреева на Android 10 - нет. Возможно, это связано с тем, что Вы скомпилировали приложение только под Android 64. У моего телефона процессор 64-разрядный(Samsung Exynos 7 Octa(5433)), но, как сказала Aida64, 32-bit Mode. У Олега Киреева процессор Samsung Exynos 7 Octa 7870, тоже 64-разрядный, но, поскольку разница между датами выхода чипов всего 2 года, то, возможно, он тоже работает в 32-битном режиме.  На Нокиа 3.1, на которой всё работало, стоит 64-разрядный Mediatek MT6750n. Сейчас ещё проверю на Самсунг Ноут 10+ с чипом Qualcomm Snapdragon 855 в 64-разрядном режиме.

    Вот тут было обсуждение по поводу устройства на базе такого же чипа, как у Олега, где оказалось, что ЦПУ поддерживает 64-битные инструкции, но прошивка - нет: https://stackoverflow.com/questions/49184689/why-does-my-android-device-with-armv8-based-cpu-cores-exynos-7-octa-7870-not-s

  8. 57 минут назад, Ingalime сказал:

    Хотелось бы по окончании дискуссии, чтобы на этом форуме кто-то из специалистов выложил статью как правильно создать службу переднего плана в дельфи.

    Крайне сильно поддерживаю. У меня самого сейчас в проекте настал момент, когда нужно написать службу переднего фона, а инфы в интернете централизованной нет.

  9. Проблемы появились.?

    Но всё же я нашёл решение.  Короче.

    Всё дело в том, что Дельфя почему-то решила, что одной директивы

    {$R *.LgXhdpiPh.fmx ANDROID} 

    ей мало, и почему-то решила добавить ещё по одной на каждый юнит.

    Решение простое:

    06-07-2021 19-45-07.png

     

  10. 9 минут назад, Ingalime сказал:

    А эмулятор не удалось запустить.

    Попробуйте в BIOS включить "Secure virtual machine mode". И напишите, какой у Вас процессор.

    9 минут назад, Ingalime сказал:

    Можно конечно уменьшить размер убрав какие-то временные файлы студии, но это моя первая программа на паскале, боюсь что-то удалять.

    Можете выложить хотя бы .pas файл(-ы), чтобы хоть примерно представлять, в чём ошибка. Я выложил логи снятые с logcat, можете сами посмотреть, в чём там может быть проблема.

  11. В общем, посмотрел я логи Вашего приложения через logcat. К ошибке приводило это:

    FATAL EXCEPTION: main
    Process: com.online.PublicRadio, PID: 25974
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.online.PublicRadio/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.IllegalArgumentException: Unable to find native library: PublicRadio
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
        at android.app.ActivityThread.access$1100(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
        at android.os.Handler.dispatchMessage(Handler.java)
        at android.os.Looper.loop(Looper.java)
        at android.app.ActivityThread.main(ActivityThread.java)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
    Caused by: java.lang.IllegalArgumentException: Unable to find native library: PublicRadio
        at android.app.NativeActivity.onCreate(NativeActivity.java)
        at com.embarcadero.firemonkey.FMXNativeActivity.onCreate(FMXNativeActivity.java:135)
        at android.app.Activity.performCreate(Activity.java)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
        ... 10 more

     

    А что это значит, Вы уже смотрите сами, так как доступа к Вашему коду я не имею.

  12. 8 минут назад, Ingalime сказал:

    Получается дело не в запуске сервиса, ведь запуск сервиса теперь в отдельной кнопке. Видимо что-то не так для этих версий андроида в манифесте...

    Но у меня на десятке на Нокиа всё запускалось и работало. Надо бы действительно протестировать на разных устройствах, но у меня, к сожалению, у компьютера настолько древний процессор, что на нём просто не запускается эмулятор от Android Studio.

  13. 8 минут назад, Ingalime сказал:

    Подскажите, пожалуйста, как запустить утилиту создания эмулятора. В предыдущих версиях это было в меню Пуск. В 10.4 там ее нет.

    Честно, сам понятия не имею, где эмулятор в 10.4. Можно использовать эмуль от Android Studio, там можно и на куче версий андроида проверить(там вроде от 4.4 до 11), и проэмулировать разные устройства, и ещё кучу всяких настроек.

    Вот ссылка на документацию абракадабры, там вроде всё расписано: https://www.embarcadero.com/starthere/xe7/mobdevsetup/android/en/creating_an_android_emulator.html

    Хотя я у себя не нашёл эмулятора, может его вырезали в новых версиях RAD Studio.

  14. 16 минут назад, Ingalime сказал:

    Пока под рукой только андроид 8.1 Redmi 5A :(

    Теперь в кнопке Play в обновленном apk

    procedure TForm1.FormCreate(Sender: TObject);
    Begin
    
     if not BASS_Init(-1, 44100, 0, nil, nil) Then Begin
    	   ShowMessage('Failed to initialize audio!' + sLineBreak + 'Не удалось инициализировать audio!');
         Exit;
         end;
    End;
    
    procedure TForm1.Button1Click(Sender: TObject);
    
    var
      check :boolean;
      ercode: Integer;
      ermsg: string;
    
    Begin
    
     try
         if FService = Nil Then Begin
          FService := TLocalServiceConnection.Create;
          FService.StartService('serPublic');
          end;
      except
           Exit;
      end;
    //******************************************

    В манифесте только это. Что ему надо не понятно...

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.INTERNET" />

     

    PublicRadio.apk 18 \u041c\u0411 · 2 загрузки

    На шестёрке все ещё падает.

  15. 19 часов назад, Ingalime сказал:

    Может у кого-то есть Адроид 10, посмотрите, пожалуйста, или падает при запуске. Спасибо.

    PublicRadio.apk 18 \u041c\u0411 · 11 загрузок

    Я попробовал запустить на Android 6.0.1, при старте падает после показа картинки. Однако я не знаю, какой минимальный sdk level у приложения, может оно и не должно запускаться на шестёрке. В любом случае, просто отписался.

    19 часов назад, Ingalime сказал:
    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29" />

    Хотя в манифесте написано, что minSdkVersion='23', что соответствует Андроид 6

  16. При создании приложения с несколькими формами начала появляться ошибка "[DCC Error] Unit1.pas(167): E2606 Duplicate resource: type RCDATA ID tform1_lgxhdpiph". В самом коде никаких ошибок нет. Подобная ошибка происходила со всеми моими формами, тогда я просто копировал все компоненты с формы, удалял её из проекта, создавал новую, скидывал компоненты туда и копировал весь код. Это помогает на некоторое время, но после внесения изменений в код ошибка появляется снова. Подскажите пожалуйста, где может быть проблема.

    Rad Studio 10.4.1, Windows 10 X64

  17. Я сейчас заметил, что демо-проект почему-то перестал скачивать, но если заменить ссылку(или код), то всё снова начинает работать. Если перейти в браузере по ссылке по умолчанию, то ошибка "The URL is invalid or expired"

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