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

Andrey Efimov

Модераторы
  • Постов

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

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

    123

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

  1. 59 минут назад, VEGA сказал:

    Строку - android:requestLegacyExternalStorage="true" - убрал, результат всё тот же. А если запустить Delphi, то эта строка восстанавливается снова. Если удалять на ходу, то не восстанавливается, но и результата нет.

    Специально сейчас проверил на новом пустом проекте в Delphi 10.4.2. Убирал строку из файла AndroidManifest.template.xml в корне проекта, собрал проект, проверил результат - всё хорошо, строки нет (в шаблоне (в корне проекта), промежуточном (в папке Debug) и итоговом файле AndroidManifest.xml). Перезапустил Студию, собрал проект, проверил результат - всё хорошо, строки нет.

    Мин. АПИ и целевое задано по умолчанию (строка из промежуточного манифеста):

    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29" />

    Проверял вот с такими инструментами (данные из SDK Manager) :

    Снимок.PNG

     

    p.s. На всякий случай, может поможет, сделать Clean проекта предварительно выбрав целевую платформу Android

    Безымянный23.png

  2. 6 часов назад, VEGA сказал:

    error: No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android'

    Предположу, что проблема всё таки в манифесте и версии SDK.

    Попробуйте удалить строчку из манифеста:

    android:requestLegacyExternalStorage="true"

    и собрать приложение.

  3. Установить то можно, но только если пользователь подготовлен к этому. Через спец. софт, можно скачать например с Google Play: App Bundle Install (вроде, не помню точно, как называется). На самом деле, подобного софта много.

    Т.к. установка aab не из маркета требует подготовки, то само собой лучше выкладывать на своём сайте сразу apk файлы.

  4. 22 минуты назад, Котэ сказал:

    Собственно возник вопрос , как на новых версия android  получить идентификатор imei.

    Restriction on non-resettable device identifiers

    В этом разделе: "Starting in Android 10, apps must have the READ_PRIVILEGED_PHONE_STATE privileged permission in order to access the device's non-resettable identifiers, which include both IMEI and serial number. Caution: Third-party apps installed from the Google Play Store cannot declare privileged permissions."

     

    22 минуты назад, Котэ сказал:

    Возможно есть какой то аналог уникального идентификатора в андроиде?

    Best practices for working with Android identifiers

  5. 1 час назад, Андрей Рулин сказал:

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

     

    https://drive.google.com/file/d/11A1MmpOO6jfX8AAfyMw0QyrhgP7z94oh/view?usp=sharing

    Хотелось, бы  запретить такой вариант открытия, чтобы можно было открыть только полноэкранно.

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

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

     

    Посмотрите эту страницу документации: Configuring your app for multi-window Mode

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

    Вам нужно собрать 32 битную версию:

    ProjectManager.PNG

    Честно говоря, я не знаю как вам ещё объяснить это... (раз проблемы возникают даже на таком этапе, то я обязан сообщить, что на форуме существует раздел: Ищу подрядчика)

    Перед тем как вы соберётесь выложить сюда собранный 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.

     

    p.s. По поводу логов, то они сообщают о том, что не найдена библиотека PublicRadio (что собственно подтверждается и текстом ошибки и вскрытием apk файла, в нем библиотека есть только в папке для 64-бит, т.е. apk файл собран не для 32-бит).

     

  7. Вот что сейчас я вижу на Delphi 10.4.2 для чистого проекта Project1 и сервиса:

    Релиз для 32 бит (Application store/Development):

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

    Релиз для 64 бит (Development, для Application store создаётся aab файл(который может включать в себя 32 битную версию))

    • arm64-v8a - проект libProject1.so, сервис и т.д.

    Библиотеку bass я бы положил только в armeabi-v7a (для 32 бит) и arm64-v8a (для 64 бит).

    5 часов назад, Ingalime сказал:

    4. Какие галочки надо установить для libnative-activity.so там и релиз есть и дебаг пути. Или поставить все пять галочек где пусто?

    Эти галочки управляются из блока Project Manager, в зависимости от выбранной битности и конфигурации(Debug/Release и Application store/Development). Поэтому, если вы снимали их самостоятельно (через Deployment Manager), то рекомендую поставить их обратно, т.е. вернуть в дефолтное состояние.

    Повторюсь, сейчас нужно собрать 32 битную версию и выложить сюда для теста (возможно, PowerOwl или Олег смогут проверить).

     

     

    p.s. Вопрос, какую версию студии вы используете?

  8. 4 часа назад, Ingalime сказал:

    Вроде это отвечает судя по папкам за 32 бит, которые я не использую

    но при этом подсовываете туда библиотеку bass...

    В этих папках (кроме arm64-v8a (для 64 бит) и armeabi-v7a (для 32 бит)) должны лежать заглушки, которые в случае несовместимости с девайсом буду выдавать сообщение типа такого "Application does not support this device".

    Собственно, PowerOwl, уже сделал предположение.

     

     

  9. У меня на устройстве с Андроид 11 и эмуляторе с Андроид 7.1.2 приложение не падает.


    По теме, делайте дебаг версию и ищите устройство на котором падает, запускайте monitor.bat и приложение, снимайте логи и выкидывайте их сюда. Это нужно сделать как минимум для того чтобы убедиться в ваших догадках (что происходит падение из-за сервиса). Так же попробуйте вынести в кнопку код запуска сервиса.

    Документация по Foreground service: https://developer.android.com/guide/components/foreground-services

     

     

  10. Есть два варианта:

    1) Добавить в промежуточном манифесте (находится тут: Project\Android\Debug\AndroidManifest.xml)

    Находим:

    <service android:exported="false" android:name="com.embarcadero.services.serPublic" />

    Заменяем на:

    <service android:exported="false" android:foregroundServiceType="mediaPlayback" android:name="com.embarcadero.services.serPublic" />

    Делаем деплой проекта.

     

    2) Прописать сервис в шаблоне (находится тут: Project\AndroidManifest.template.xml)

    Примерно вот так.

    Находим:

    <%services%>

    Заменяем на:

    	<service android:exported="false" android:foregroundServiceType="mediaPlayback" android:name="com.embarcadero.services.serPublic" />
    	<service android:exported="false" android:name="com.embarcadero.firebase.messaging.ProxyFirebaseMessagingService">
    		<intent-filter>
    			<action android:name="com.google.firebase.MESSAGING_EVENT" />
    		</intent-filter>
    	</service>
    
    	<service android:exported="true" android:name="com.google.firebase.messaging.FirebaseMessagingService">
    		<intent-filter android:priority="-500">
    			<action android:name="com.google.firebase.MESSAGING_EVENT" />
    		</intent-filter>
    	</service>
    
    	<service android:exported="false" android:name="com.google.firebase.components.ComponentDiscoveryService">
    		<meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar" android:value="com.google.firebase.components.ComponentRegistrar" />
    	</service>

    Делаем сборку и деплой.

     

    p.s. Возможно есть ещё способы, я давненько не касался темы сервисов..

  11. Отлично.

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

     

    По поводу книг, загляните сюда https://delphifmandroid.blogspot.com/p/blog-page_15.html, ещё полезное можно найти тут https://blogs.embarcadero.com/. Тут - https://www.youtube.com/watch?v=Q6vXbXFthLU&list=PLvs4_U1JSz61q3b-S1KcX4F5rbWPAEWsH , Ярослав выложил курс по стилям. И вот сюда - https://learndelphi.org/

     

    P.s. Студия не поддерживает разработку под версии Андроида ниже 5.1. http://docwiki.embarcadero.com/RADStudio/Sydney/en/Android_Devices_Supported_for_Application_Development

  12. 17 часов назад, PowerOwl сказал:

    Да, именно такая

    Так, а чего сразу то не сообщили, какая именно ошибка?! (вот так всегда, в 95% случаев, приходится вытягивать всю информацию из людей...).

     

    Теперь по теме:

    1) Касательно "Тогда я посмотрел в Androidapi.JNI.GraphicsContentViewText.pas класс BitmapFactory, и там почему-то в разделе декларации методов объекта JBitmapFactory ничего нет. Возможно я ошибаюсь, но мне кажется, что так быть не должно. " Ещё раз повторяю, изучите основы. Всё реализовано правильно.

    2) В коде, с помощью TFile.Exists проверьте, существование файла.

    3) Если проверка пишет, что файл есть, то скорее всего нужно поиграться с настройками BitmapFactory.Options, например с этими:

    var
    	BitmapFactory_Options: JBitmapFactory_Options;
    begin
    	BitmapFactory_Options.inJustDecodeBounds (эту пробуйте в первую очередь)
    	BitmapFactory_Options.inPreferQualityOverSpeed
    	BitmapFactory_Options.inSampleSize
         
    	Image := TJBitmapFactory.JavaClass.decodeFile(StringToJString(FilePath), BitmapFactory_Options);

    Описание есть в документации к АПИ.

     

     

    p.s. У меня демо приложение работает(как на эмуляторе, так и на девайсе с 11 Андроидом), если файл существует в нужном месте.

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

    Про контекст, получить можно , например так:

    uses 
    	... Androidapi.Helpers, ....
    
    var
    	Context: JContext;
    begin
    	Context := TAndroidHelper.Context;
    	или
    	Context := SharedActivityContext;

     

  14. 2 часа назад, Hevard сказал:

    Доброго дня! И что с этим делать? А то пол ветки про магический фикс и никакой конкретики, акромя ссылки на закрытый ресурс...

    В 8 сообщении этой темы (https://fire-monkey.ru/topic/6814-android-11/?do=findComment&comment=39589) есть ссылка на другую тему (в которой описано решение) https://fire-monkey.ru/topic/6801-android-10-api-уровня-29/?do=findComment&comment=39593

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