Я успешно решил проблему автоматического запуска приложения на прошлой неделе на работе, используя Delphi Tokyo 10.2. В настоящее время я изучаю запуск фоновой службы вместо приложения после загрузки, поскольку заставка и приложение в настоящее время «всплывают» каждый раз при запуске устройства. (Я наткнулся на ваш вопрос, изучая, как запустить только службу, и я попробую вариант предложенного Java-подхода «startService» в ближайшие выходные. Пройдя через боль, я могу облегчить вашу.)
В основном для более новых компиляторов вам больше не нужны шаги в статье Дэнни Винд, которые изменяют файл «Classes.dex». То, что я описываю ниже, работает для Токио и, вероятно, сработает для Сиэтла, если будет работать так же, как я думаю, так оно и есть.
Вы не можете использовать код Delphi для регистрации BroadcastReceiver. Это должно быть сделано на Java, а скомпилированный класс находится в JAR. Пакет Дэнни Винд для Java будет по-прежнему делать то же самое, при условии, что вы включите шаг 4 своего вопроса в файл манифеста и шаг 5 своего вопроса в разрешениях проекта Android.
Кстати, вы не должны редактировать файл «AndroidManifest.xml», а скорее файл «AndroidManifest.template.xml».
Если вы понимаете, как добавить JAR для фоновой службы, вы следуете тому же подходу, чтобы добавить JAR, содержащий ваш BroadcastReceiver для «BOOT_COMPLETED», перейдя в папку «Библиотеки» под целевой платформой «Android» и щелкнув правой кнопкой мыши. нажав и выбрав «Добавить». Вместо добавления JAR-файла фоновой службы (который уже должен быть там) в этом случае вы добавляете JAR-файл, содержащий BroadcastReceiver.
Чтобы скомпилировать Java в класс, а затем включить его в JAR, я использую следующий пакетный файл, основанный на статье Дэнни Винд и команде, которую запускает Delphi для компиляции Java, которую он генерирует для фоновой службы ( который вы можете увидеть на вкладке «Вывод» окна «Сообщения»):
@ECHO OFF
rem Path to Android classes JAR-file
SET ANDROID_JAR="C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\platforms\android-26\android.jar"
rem Setup parameters
SET SOURCE_FILE=%1
SET JAR_FILE=%2
IF x%2 == x SET JAR_FILE=%SOURCE_FILE%
SET CONFIGURATION=%3
IF x%3 == x SET CONFIGURATION=Debug
rem Ensure directory to hold Java Class files exists for Java Archive
MKDIR JavaClasses\%JAR_FILE% 2> NUL
rem Indicate actions
ECHO .
ECHO Compiling %SOURCE_FILE%.java to %SOURCE_FILE%.class and storing in %CONFIGURATION%\%JAR_FILE%.jar...
ECHO .
rem Compile Java Class file
"%JAVASDK%\javac" -Xlint:deprecation -classpath %ANDROID_JAR% -bootclasspath %ANDROID_JAR% -d JavaClasses\%JAR_FILE% -target 1.6 -g -source 1.6 %SOURCE_FILE%.java
rem Create Java Archive file containing class file
"%JAVASDK%\jar" cf %CONFIGURATION%\%JAR_FILE%.jar -C .\JavaClasses\%JAR_FILE% com
rem Clean-up
SET ANDROID_JAR=""
SET SOURCE_FILE=""
SET JAR_FILE=""
SET CONFIGURATION=""
Пакетный файл принимает 3 параметра:
- Имя файла Java без расширения.
- Имя файла JAR без расширения.
- Имя конфигурации (например, «Отладка» или «Выпуск»)
Если имеется только один параметр, имя файла JAR будет совпадать с именем файла Java, а для конфигурации будет установлено значение «Отладка».
Если есть только два параметра, конфигурация будет установлена на «Отладка».
Обратите внимание, что сейчас пакетный файл не проверяет параметры на наличие ошибок.
Пакетный файл использует несколько другие параметры при вызове «javac», чем в статье Дэнни Винд. Я взял их из того, что использует Delphi IDE (как показано на вкладке «Вывод»).
Вам нужно будет изменить строку, которая устанавливает переменную среды «ANDROID_JAR», чтобы иметь правильный путь к файлу «android.jar» вашего компилятора.
Вам также потребуется установить переменную среды с именем «JAVASDK» на путь к папке «bin» вашего Java SDK. На моей машине это «C:\Program Files\Java\jdk1.8.0_60\bin». Это я установил через «Свойства системы/Дополнительно/Переменные среды».
После компиляции и архивирования JAR-файл, содержащий BroadcastReceiver, будет находиться в папке «Debug» или «Release» в зависимости от выбранной вами конфигурации.
После добавления JAR-файла, содержащего BroadcastReceiver, в ваш проект, более новые версии Delphi автоматически свяжут JAR-файл с «Classes.dex» и, в конечном итоге, с APK для вашего приложения.
Разверните APK на своем устройстве, запустите приложение хотя бы один раз, а затем перезагрузите устройство. Вы должны увидеть запуск вашего приложения после завершения загрузки.
person
Roland Skinner
schedule
08.03.2018
BOOT_COMPLETED
, используя только код Delphi? Я тоже застрял здесь. Ваш подход может потерпеть неудачу, потому что BroadcastReceiver необходим для запуска приложения и создания основной формы, а в вашем коде форма создает BroadcastReceiver. - person Joachim Marder   schedule 31.08.2017