PowerOwl
-
Постов
42 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Сообщения, опубликованные PowerOwl
-
-
Добрый день. У моего тестового приложения под андроид есть сервис com.embarcadero.services.Project2. Код в сервисе уже полностью готов, однако при попытке запустить сервис из формы в приложении с помощью TLocalServiceConnection.StartService('Project2'); Приложение останавливается с ошибкой Segmentation Fault(11) в модуле FMX.Platform.Android
Я не знаю, в чём может быть дело. Даже если поставить точку остановки на Application.Run в Project2.so, то всё равно происходит это. Если поставить точку остановки на строку после запуска сервиса из формы, то приложение доходит до неё без проблем. Вроде бы рассказал всё, что может помочь. Прикладывать код сервиса не вижу смысла, так как ошибка происходит даже не дойдя до инициализации сервиса. Но если понадобится какая-то дополнительная информация, могу предоставить.
P.S. Delphi 10.4.2 Community Edition
-
Логи:
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.
-
-
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
-
47 минут назад, Andrey Efimov сказал:
Оба apk файла собраны для 64-бит.
Сам не обратил внимания на это.
Для Ingalime:
Ваш apk внутри выглядит так:
В директории lib должны находится библиотеки необходимые приложению. Для каждой архитектуры процессоров нужны свои библиотеки. Следовательно они рассортированы по каталогам:
Внутри каталога arm64-v8a всё необходимое присутствует:
Соответственно, при установке приложения на 64-битное устройство, установщик будет доставать файлы отсюда.
Однако, если устанавливать на 32-битное устройство, то установщик будет доставать файлы уже из каталога armeabi-v7a:
В этом каталоге есть библиотека BASS, значит вы её всё-же задеплоили. Однако других файлов приложения тут нет, из-за чего оно и крашится при запуске.
-
Всё еще вылетает.
Вот логи снятые с logcat:
Вам следует сделать дебаг-версию вашего апк и проверить на любом эмуляторе андроида, создав образ 32-битной системы. Если получите ошибку не в юните вашего приложения, тогда с помощью брейкпоинтов(клик слева от номера строки) искать место, где происходит ошибка.
-
-
Несколькими строчками выше этого пункта есть пункт, где в Remote Path указано library\lib\armeabi-v7a. Попробуйте вручную указать этот же путь.
-
-
У меня, кстати, появилось предположение, почему прога запустилась у меня на 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
-
57 минут назад, Ingalime сказал:
Хотелось бы по окончании дискуссии, чтобы на этом форуме кто-то из специалистов выложил статью как правильно создать службу переднего плана в дельфи.
Крайне сильно поддерживаю. У меня самого сейчас в проекте настал момент, когда нужно написать службу переднего фона, а инфы в интернете централизованной нет.
-
-
9 минут назад, Ingalime сказал:
А эмулятор не удалось запустить.
Попробуйте в BIOS включить "Secure virtual machine mode". И напишите, какой у Вас процессор.
9 минут назад, Ingalime сказал:Можно конечно уменьшить размер убрав какие-то временные файлы студии, но это моя первая программа на паскале, боюсь что-то удалять.
Можете выложить хотя бы .pas файл(-ы), чтобы хоть примерно представлять, в чём ошибка. Я выложил логи снятые с logcat, можете сами посмотреть, в чём там может быть проблема.
-
В общем, посмотрел я логи Вашего приложения через 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А что это значит, Вы уже смотрите сами, так как доступа к Вашему коду я не имею.
-
А вообще, почему бы Вам не скинуть полностью проект, тогда можно было бы посмотреть, в каком месте возникает ошибка.
-
8 минут назад, Ingalime сказал:
Получается дело не в запуске сервиса, ведь запуск сервиса теперь в отдельной кнопке. Видимо что-то не так для этих версий андроида в манифесте...
Но у меня на десятке на Нокиа всё запускалось и работало. Надо бы действительно протестировать на разных устройствах, но у меня, к сожалению, у компьютера настолько древний процессор, что на нём просто не запускается эмулятор от Android Studio.
-
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.
-
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" />На шестёрке все ещё падает.
-
-
-
19 часов назад, Ingalime сказал:
Может у кого-то есть Адроид 10, посмотрите, пожалуйста, или падает при запуске. Спасибо.
Я попробовал запустить на Android 6.0.1, при старте падает после показа картинки. Однако я не знаю, какой минимальный sdk level у приложения, может оно и не должно запускаться на шестёрке. В любом случае, просто отписался.
19 часов назад, Ingalime сказал:<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29" />
Хотя в манифесте написано, что minSdkVersion='23', что соответствует Андроид 6
-
Попробовал удалить все юниты из проекта и создать новые. Пока что проблем нет.
-
При создании приложения с несколькими формами начала появляться ошибка "[DCC Error] Unit1.pas(167): E2606 Duplicate resource: type RCDATA ID tform1_lgxhdpiph". В самом коде никаких ошибок нет. Подобная ошибка происходила со всеми моими формами, тогда я просто копировал все компоненты с формы, удалял её из проекта, создавал новую, скидывал компоненты туда и копировал весь код. Это помогает на некоторое время, но после внесения изменений в код ошибка появляется снова. Подскажите пожалуйста, где может быть проблема.
Rad Studio 10.4.1, Windows 10 X64
-
Я сейчас заметил, что демо-проект почему-то перестал скачивать, но если заменить ссылку(или код), то всё снова начинает работать. Если перейти в браузере по ссылке по умолчанию, то ошибка "The URL is invalid or expired"
Segmentation Fault(11) в FMX.Platform.Android
в Отладка
Опубликовано
Решение: https://stackoverflow.com/questions/54825547/delphi-10-3-1-android-service-hangs-on-system-initunits
Также нужно удалить из uses сервиса всё, что начинается на FMX(например FMX.Types, как сказано в ответе на вопрос по ссылке)