Модераторы Andrey Efimov Опубликовано 31 января, 2016 Модераторы Поделиться Опубликовано 31 января, 2016 Ссылка: http://delphifmandroid.blogspot.ru/2016/01/ansroidservicebroadcastreceiver.html Автор: Ефимов Андрей Описание: [AndroidService+BroadcastReceiver] Автозапуск службы после рестарта ОС p.s. Тему почистил zairkz и Anatoliy 2 Цитата Ссылка на комментарий
fsdb Опубликовано 3 марта, 2016 Поделиться Опубликовано 3 марта, 2016 (изменено) Все что угодно перепробывал не создается файл test_class.dex Windows 10, Delphi X Seattle,jdk1.8.0_66 я думаю ошибка тут: call %DX_LIB%\dx.jar --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\output\jar\test_classes.jar что делать? Изменено 3 марта, 2016 пользователем fsdb Цитата Ссылка на комментарий
fsdb Опубликовано 3 марта, 2016 Поделиться Опубликовано 3 марта, 2016 (изменено) решение: меняем на java -jar что бы понять что случилось - далее в гугл и.. делаем Downgrade jdk Изменено 3 марта, 2016 пользователем fsdb Цитата Ссылка на комментарий
fsdb Опубликовано 4 марта, 2016 Поделиться Опубликовано 4 марта, 2016 (изменено) Все равно не смог по статье повторить. прошу помочь и поправьте меня в манифесте добавил <receiver android:name="com.PanelControlReceiver.BootCompletedReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> в яве файле написал, запустил батник. все файлы создались. package com.PanelControlReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class BootCompletedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService"); context.startService(TestLauncher); } } } сервис запускаю так, он запускается, когда приложение закрываю - вижу что сервис дальше работает. после перезагрузки не стартует сервис заново ServiceHandle:=TLocalServiceConnection.Create; ServiceHandle.StartService('PanelControlService'); ServiceHandle.Free; замену класса сделал. вот скрин https://yadi.sk/i/FbVOPXOSpv3Qs права дал приложению . https://yadi.sk/i/WwAwCWEypv3iB надо ли давать права такие же сервису? Изменено 4 марта, 2016 пользователем Andrey Efimov Цитата Ссылка на комментарий
Модераторы Andrey Efimov Опубликовано 4 марта, 2016 Автор Модераторы Поделиться Опубликовано 4 марта, 2016 Сервису права не нужно давать. В статье, написано всё, что необходимо сделать. Ошибки вываливаются? Файл classes.dex правильно сгенерили? Вот так, примерно: 1. Добавляем сервис в приложение, даём права, делаем сборку 2. Вносим изменения в манифест, делаем сборку, 3. В батнике меняем путь до нового classes.dex из сборки(2 шаг), генерим 4. Заменяем classes.dex на файл из 3 шага С виду, по тем данным, что вы привели, всё нормально. Ещё проверьте, есть ли в конечном манифесте зарегистрированный ресейвер. p.s. Используйте тег "Код" для кода в сообщениях. Цитата Ссылка на комментарий
fsdb Опубликовано 4 марта, 2016 Поделиться Опубликовано 4 марта, 2016 (изменено) Andrey Efimov спасибо что ответили, ошибок не получаю. пути в бат файле if x%ANDROID% == x set ANDROID=C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\ set ANDROID_PLATFORM=%ANDROID%\platforms\android-22 set DX_LIB=%ANDROID%\build-tools\22.0.1\lib set EMBO_DEX="C:\DB\eHomeSmartMobile\eHSforAndroid\Application\Android\Debug\classes.dex" set PROJ_DIR=%CD% set VERBOSE=0 если удалить папку output то она каждый раз создается заново с файлами test_classes.dex, classes.dex, BootCompletedReceiver.class,test_classes.jar Скриншот конечного манифеста https://yadi.sk/i/EreQmlmtpvE7h Очень хотелось бы реализовать это по Вашей статье... у меня с сервисами вообще какая то большая проблема. ниразу не удалось Остановить работу по breakpoint в внутри сервиса. я перечитал форум и у одного формутчанина тоже так не работало - даже тут не работает дебагер м.б. проблема в этом как раз...... uses Androidapi.JNI.App; function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Result := TJService.JavaClass.START_STICKY; end; В стандартных Samples где есть примеры по сервисам - тоже нигде не останавливается по breakpoint порекомендуйте пожалуйста что нибудь для решения проблемы Изменено 4 марта, 2016 пользователем fsdb Цитата Ссылка на комментарий
Модераторы Andrey Efimov Опубликовано 4 марта, 2016 Автор Модераторы Поделиться Опубликовано 4 марта, 2016 К сожалению, мне сложновато судить по частичным данным. Если хотите, скиньте исходники в личку, я постараюсь найти проблему. Если не хотите скидывать исходники, скиньте апк, проверю, также будет или нет. Кстати, автозапуск происходит не сразу, т.е. нужно подождать, пока система запустит сервис. То, что файлы создаются, ещё не значит, что они правильные. Это не конечный манифест, это шаблон манифеста для RAD Studio, по нему создаётся промежуточный и уже потом конечный. промежуточный лежит в папке - ProjectAutoStartService\App\Android\Debug конечный - C:\Users\Infocean\Desktop\ProjectAutoStartService\App\Android\Debug\ServiceApp\bin\*.apk\AndroidManifest.xml посмотрите, есть ли упоминание в промежуточном манифесте. с отладкой сервисов, у всех, похоже, беда... Я сталкивался с двумя причинами, из-за которых не происходил автозапуск (без ошибок): 1) В манифесте не прописывался ресейвер 2) classes.dex не правильно клеился p.s. А проект из статьи нормально стартует? Цитата Ссылка на комментарий
fsdb Опубликовано 5 марта, 2016 Поделиться Опубликовано 5 марта, 2016 (изменено) Ваш проект прекрасно запускается после растарта системы Насколько я понял упоминание есть в манифестах: Промежуточный: https://yadi.sk/i/X3XfifkfpvWHE Конечный: https://yadi.sk/i/gkMucscxpvWHn Вероятно вторая причина. classes.dex не правильно клеился или формируется. Хотелось бы узнать причину. Как понять, что файлы формируются не верные. Исходный код я скинул в личку. Спасибо!!!! Изменено 5 марта, 2016 пользователем fsdb Цитата Ссылка на комментарий
fsdb Опубликовано 5 марта, 2016 Поделиться Опубликовано 5 марта, 2016 Огромное спасибо.я очень доволен. Напишу для всех пост. м.б. кому пригодится неправильно указали имя пакета для java класса, т.е. если указано com.PanelControlReceiver то и сам java файл должен лежать в папке eHSforAndroid\Application\java\src\com\PanelControlReceiver\ Цитата Ссылка на комментарий
ENERGY Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 (изменено) В 3/3/2016 в 20:36, fsdb сказал: Все что угодно перепробывал не создается файл test_class.dex Windows 10, Delphi X Seattle,jdk1.8.0_66 я думаю ошибка тут: call %DX_LIB%\dx.jar --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\output\jar\test_classes.jar что делать? Привет. Точно такая же проблема. Можно уточнить что означает фраза "меняем на java -jar что бы понять что случилось - далее в гугл и.. делаем Downgrade jdk" Что конкретно поменять на java -jar? Спасибо Изменено 18 февраля, 2017 пользователем ENRGY Цитата Ссылка на комментарий
Модераторы Andrey Efimov Опубликовано 18 февраля, 2017 Автор Модераторы Поделиться Опубликовано 18 февраля, 2017 14 минут назад, ENRGY сказал: Привет. Точно такая же проблема. Можно уточнить что означает фраза "меняем на java -jar что бы понять что случилось - далее в гугл и.. делаем Downgrade jdk" Что конкретно поменять на java -jar? Спасибо 1) Откройте bat файл 2) найдите строку, которая начинается на "javac" (примерно 19) если файл из статьи, то выглядит вот так: javac %VERBOSE_FLAG% -Xlint:deprecation и т.д. замените на javac -source 1.7 -target 1.7 %VERBOSE_FLAG% -Xlint:deprecation Если не получится, то замените цифры на 1.6. (т.е. вам надо добавить -source 1.7 -target 1.7 сразу после javac) 3) Отпишитесь о результате. ENERGY 1 Цитата Ссылка на комментарий
ENERGY Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 (изменено) To Андрей В обоих случаях пишет c:\Projects\MyProj\Java>javac -source 1.6 -target 1.6 -Xlint:deprecation -cp c:\Users\Alex\Documents\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows\platforms\android-24\android.jar -d output\classes src\TestClassHello\HelloWorld.javawarning: [options] bootstrap class path not set in conjunction with -source 1.6 1 warning Я указал путь Java 1.8 (там только 2 папки с названием jdk1.8.0_60 и jre1.8.0_60 с другими версиями нету), насколько я понял эта Java поставилась с Delphi Berlin. Может мне нужно скачать другую версию Java ? Изменено 18 февраля, 2017 пользователем ENRGY Цитата Ссылка на комментарий
Модераторы Andrey Efimov Опубликовано 18 февраля, 2017 Автор Модераторы Поделиться Опубликовано 18 февраля, 2017 Это обычный варнинг, не обращайте на него внимания. Ошибка исчезла? Файлы сгенерились? Цитата Ссылка на комментарий
fsdb Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 у меня была проблема с явой. потом открыл гугл и оказывается именно с этой версией ничего не получалось. скачал другую Цитата Ссылка на комментарий
fsdb Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 javac заменил на java -jar вроде бы и получил подробней текст ошибки. я могу ошибаться. уже не помню деталей Цитата Ссылка на комментарий
Модераторы Andrey Efimov Опубликовано 18 февраля, 2017 Автор Модераторы Поделиться Опубликовано 18 февраля, 2017 А вот ещё, проверьте, файл classes.dex от приложения вы сгенерили? А то он у вас пишет, что не может найти его... 15 минут назад, fsdb сказал: у меня была проблема с явой. потом открыл гугл и оказывается именно с этой версией ничего не получалось. скачал другую Да, там с версиями косяк какой-то, уже далеко не первый раз пишут мне с такой проблемой, но пока всем помогало добавление строки "-source 1.7 -target 1.7". Причём ошибки у всех разные, но эта магическая строчка спасает Цитата Ссылка на комментарий
ENERGY Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 Andrey Efimov javac -source 1.7 -target 1.7 %VERBOSE_FLAG% -Xlint:deprecation Спасибо! Все заработало! Появился файл dex Цитата Ссылка на комментарий
ENERGY Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 (изменено) А вот еще такой вопрос, в эту же тему. Сейчас пока не надо, но чтобы знать. Если нужно сделать автозапуск службы после рестарта ОС, как в статье, и одновременно с этим Автозапуск приложения в назначенное время или добавить еще какой то Java класс, то ведь получиться 2 файла classes.dex? Как их объединить? Я так понял по идее нужно взять первый сгенерированный файл classes.dex (от первой статьи), отложить его в другую папку и указать его путь вместо set EMBO_DEX="c:\Program Files (x86)\Embarcadero\Studio\18.0\lib\android\release\classes.dex" ? И на основе него сгенерить второй файл DEX (от второй статьи)? Изменено 18 февраля, 2017 пользователем ENRGY Цитата Ссылка на комментарий
Модераторы Andrey Efimov Опубликовано 18 февраля, 2017 Автор Модераторы Поделиться Опубликовано 18 февраля, 2017 3 часа назад, ENRGY сказал: А вот еще такой вопрос, в эту же тему. Сейчас пока не надо, но чтобы знать. Если нужно сделать автозапуск службы после рестарта ОС, как в статье, и одновременно с этим Автозапуск приложения в назначенное время или добавить еще какой то Java класс, то ведь получиться 2 файла classes.dex? Как их объединить? Я так понял по идее нужно взять первый сгенерированный файл classes.dex (от первой статьи), отложить его в другую папку и указать его путь вместо set EMBO_DEX="c:\Program Files (x86)\Embarcadero\Studio\18.0\lib\android\release\classes.dex" ? И на основе него сгенерить второй файл DEX (от второй статьи)? Получится один classes.dex. Такой задачи у меня ещё не было, поэтому только теория: Варианты: 1) Пишем два класса, наследника от BroadcastReceiver. Прописываем в манифесте, один будет реагировать на перезагрузку, другой на время. По очереди, клеим к основному файлу classes.dex от приложения. Т.е. приклеили 1 раз, у нас получился 1 classes.dex, далее клеим к нему след. класс. 2) Пишем один класс, который будет отрабатывать за два. Суть в том, чтобы отслеживать Action внутри OnReceive. Клеим его, а вот генерация интента уже будет отличаться. Это в теории . Цитата Ссылка на комментарий
ENERGY Опубликовано 19 февраля, 2017 Поделиться Опубликовано 19 февраля, 2017 (изменено) Андрей Ефимов, мое персональное вам спасибо и почтение, счастье и здоровье в комплекте! Без вас Delphi сообщество многое бы потеряло.. Насчет склеивания dex файлов, судя по коммандной строке в батнике, dex файлы можно склеивать просто указав их пути - к примеру, в ней указано сразу 3 файла classes.dex (который может лежать тут, это может быть какой нибудь предыдущий dex файл) test_classes.dex и classes.dex от Embarcadero. java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX% Еще один ньюанс о котором я забыл, и промучился пол дня переименовывая проект 10 раз т.к. выскакивали разные ошибки. А переименовывать его нужно было, потому что - андроид запоминал битый пакет и не давал его ставить по новой. Спойлер If your Android application is not configured to be deployed with a valid classes.dex file, and you run your application on an Android device from RAD Studio or install on your device an APK file of your application generated with RAD Studio, the installation will fail, but it will leave data in your Android device preventing you from installing applications with the same package name as your application. Не забудьте в Deployment при добавлении classes.dex поставить напротив него в колонке Remote Path строчку "classes\"! Иначе будет Unable to create process: Unable to install '<APK file>'. Failure [INSTALL_FAILED_DEXOPT] Также есть оф. инструкция: Using a Custom Set of Java Libraries In Your RAD Studio Android Apps Изменено 19 февраля, 2017 пользователем ENRGY Andrey Efimov и Rusland 2 Цитата Ссылка на комментарий
Модераторы Andrey Efimov Опубликовано 19 февраля, 2017 Автор Модераторы Поделиться Опубликовано 19 февраля, 2017 Спасибо, приятно слышать :). 7 часов назад, ENRGY сказал: Насчет склеивания dex файлов, судя по коммандной строке в батнике, dex файлы можно склеивать просто указав их пути - к примеру, в ней указано сразу 3 файла classes.dex (который может лежать тут, это может быть какой нибудь предыдущий dex файл) test_classes.dex и classes.dex от Embarcadero. java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX% А конечный файл нормальный получается? по размерам и по работоспособности? По размерам должен получиться на несколько КБ больше, чем основной classes.dex приложения. 7 часов назад, ENRGY сказал: Не забудьте в Deployment при добавлении classes.dex поставить напротив него в колонке Remote Path строчку "classes\"! Ага, поэтому, я в каждой статье связанной с classes.dex пишу об этом Rusland 1 Цитата Ссылка на комментарий
M1shQa Опубликовано 28 июня, 2017 Поделиться Опубликовано 28 июня, 2017 (изменено) В 31.01.2016 в 21:02, Andrey Efimov сказал: Ссылка: http://delphifmandroid.blogspot.ru/2016/01/ansroidservicebroadcastreceiver.html Автор: Ефимов Андрей Описание: [AndroidService+BroadcastReceiver] Автозапуск службы после рестарта ОС p.s. Тему почистил Скачал пример, собрал сервис, добавил его к приложению, но оно почему-то крашится. Т.е. только запускается, мы видим лого и бдыщ, без ошибок вылетает на рабочий стол. С загрузкой приложения после рестарта тоже проблемы - собираю проект, проверяю все галочки, приложуха запускается, но после рестарта - ничего. UPD. Пересобрал свой проект (gps трекер). Пытаюсь запустить после рестарта именно само приложение, но ничего не помогает. Делал как в ЭТОЙ статье. Собственно даже предоставленный сэмпл у меня не работает. Пытаюсь подсунуть в библиотеки сгенерированный java файл, в юзер пермишнах галочку ставлю, .dex решил не добавлять ибо в инструкции написано что так можно. UPD 2. Пересобрал с .dex классами - приложение тут же крашится после запуска. Почти прям как сэмпл из блога (rad studio tokyo). Изменено 28 июня, 2017 пользователем MikeWuzHere Цитата Ссылка на комментарий
M1shQa Опубликовано 28 июня, 2017 Поделиться Опубликовано 28 июня, 2017 В 19.02.2017 в 15:18, Andrey Efimov сказал: Спасибо, приятно слышать :). А конечный файл нормальный получается? по размерам и по работоспособности? По размерам должен получиться на несколько КБ больше, чем основной classes.dex приложения. Ага, поэтому, я в каждой статье связанной с classes.dex пишу об этом Кстати можно ли использовать classes.dex из вашего семпла? правда у меня ни со сгенерированным не работает, ни с Вашим Цитата Ссылка на комментарий
M1shQa Опубликовано 29 июня, 2017 Поделиться Опубликовано 29 июня, 2017 Есть у кого готовый сэмпл приложения, которое загружается при перезагрузки системы? На Tokyo приложение из блога товарища Andrey Efimov собирается отлично, но крашится уже на телефоне, причем тут же при запуске, без ошибок. Цитата Ссылка на комментарий
Модераторы Andrey Efimov Опубликовано 29 июня, 2017 Автор Модераторы Поделиться Опубликовано 29 июня, 2017 В 28.06.2017 в 07:47, MikeWuzHere сказал: Пытаюсь подсунуть в библиотеки сгенерированный java файл, В Java файле всё правильно прописали? В 28.06.2017 в 07:47, MikeWuzHere сказал: .dex решил не добавлять ибо в инструкции написано что так можно. Можно, но тогда нужно добавить jar-файл. В 28.06.2017 в 12:36, MikeWuzHere сказал: Кстати можно ли использовать classes.dex из вашего семпла? В вашем случае - нет. 1 час назад, MikeWuzHere сказал: На Tokyo приложение из блога На Токио не проверялось. Статья написана для Seattle, но 100% работает на Berlin (только вчера реализовывал данную функцию в новом приложении), а вот Токио пока в топку. Rusland и M1shQa 2 Цитата Ссылка на комментарий
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.