Rusland Опубликовано 18 января, 2016 Поделиться Опубликовано 18 января, 2016 Добрый день. Делаю запуск приложения после рестарта системы согласно этой статье Выключаю телефон, включаю - вижу что программа стартует, но тут же закрывается. Если просто запустить программу, то стартует нормально и не закрывается. Почему это происходит? Цитата Ссылка на комментарий
0 Rusland Опубликовано 18 января, 2016 Автор Поделиться Опубликовано 18 января, 2016 (изменено) Похоже закрывается в момент когда запрашивается пинкод на одной симкарте. Вроде памяти достаточно (особенно в момент старта системы... программа пока вообще пустая). Хотя нет, убрал симку где запрашивается pin-код: в первый раз программа не закрылась после перезагрузки телефона, а второй раз закрылась. Почему система закрывает прогу? Изменено 18 января, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 22 января, 2016 Модераторы Поделиться Опубликовано 22 января, 2016 Да, проверил у себя. Такая же фигня, только я даже не вижу программу, мне просто выскакивает сообщение, что приложение завершилось. Пока несколько предположений, либо я где-то что-то забыл, либо ОС выгружает приложение из-за потребляемой памяти, либо что-то ещё... Нужно попробовать тоже самое с сервисом. Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 22 января, 2016 Администраторы Поделиться Опубликовано 22 января, 2016 Раздел Tips в статье прочитали? Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 22 января, 2016 Модераторы Поделиться Опубликовано 22 января, 2016 Ярослав, я вообще не по статье писал ресейвер))) Но про эти особенности знаю и конечно же перепроверил их. Единственное, попробовал сейчас задать явное имя проекта, но и это не помогло... Сейчас, ради интереса попробую запустить проект из статьи... АП. Проверил, такая же фигня. Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 22 января, 2016 Администраторы Поделиться Опубликовано 22 января, 2016 До понедельника нету возможности запустить проект. Что выводится в лог? Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 22 января, 2016 Модераторы Поделиться Опубликовано 22 января, 2016 Пока пытался отловить через monitor.bat, но он у меня не успевает найти устройство после перезагрузки. Где ещё лучше посмотреть? Сегодня уже точно не смогу, а завтра попытаюсь хоть какие-то логи выудить. ап. 23.01.16. Подключение по USB происходит только после отрабатывания ресейвера... ап.2. Попробовал с автозапуском сервиса, тоже самое, ошибка и всё... Не пойму, то ли я где-то в склейках что-то упускаю, то ли это ошибка в FMX. Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 23 января, 2016 Модераторы Поделиться Опубликовано 23 января, 2016 Это крендец... В общем, мучил среду и телефон весь вечер. Итог: сначала удалось запустить свой код, потом пересобрал весь проект из статьи и он тоже заработал. Т.е. я по сути не внёс никаких изменений. В проекте из статьи: 1) сбросил Deployment на дефолтные настройки, там было много лишнего... после чего добавил пересобранный classes.dex. 2) в Project Manager удалил файл AndroidManifest.template.xml, не знаю, за чем его туда добавил автор... всё, компилим проект на устройстве и всё работает как надо... Мой проект: Не содержал в себе кучи мусора + код я перепроверял раз 100 + пересобирал classes.dex раз 20 точно. В своём проекте ничего не изменял, просто в очередной раз всё пересобрал и попробовал запустить... Ярослав, не знаю в чём проблема... только вы там сможете разобраться... Сейчас, ещё раз соберу проект из статьи, вообще ничего не трогая и посмотрю, запустится или нет... И заодно проверю автозапуск для сервиса АПДЕЙТ - 24.01.16 1:20 МСК Собрал проект из статьи, не внося изменений вообще, затронут только bat файл, в нем обновлены пути. Итог: проект не работает и падает с той же ошибкой... Сейчас попробую выяснить, что на него так влияет... 1:24 - Обнаружил, что среда подключила второй classes.dex, ок сейчас проверим... 1:30 - Проект отлично заработал... В общем, моего ума не хватает, чтобы понять, в чём было дело... Могу только сказать, что все особенности, типа второго classes.dex я перепроверял раз 100. Более того, я свой проект писал вообще не по статье и он ведь тоже почему-то не работал... Какие-то чудеса... С сервисом не прокатывает автозапуск, также вываливается с ошибкой... ап.24.01.16 15:25 - Сервис пока так и не удаётся запустить zairkz 1 Цитата Ссылка на комментарий
0 Rusland Опубликовано 26 января, 2016 Автор Поделиться Опубликовано 26 января, 2016 (изменено) С сервисом не прокатывает автозапуск, также вываливается с ошибкой... ап.24.01.16 15:25 - Сервис пока так и не удаётся запустить Аналогично добавил сервис к проекту и при перезапуске устройства программа говорит "В программе произошла ошибка" и закрывается. Теперь и при простом запуске также говорит... глюк на глюки, черт побери ) Изменено 26 января, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 26 января, 2016 Модераторы Поделиться Опубликовано 26 января, 2016 Ну обычный автозапуск приложения у меня (тьфу-тьфу-тьфу) работает пока, а вот сделать такой автозапуск для сервиса мне пока не удалось, где-то косячу видимо, сегодня собирался ещё посмотреть эту тему, если время будет... Пока с автозапуском сервиса у меня такие дела (это просто эксперименты): Попытка №1: Сервис - подсовываем Манифест + клеим classes Приложение - стандартный Манивест + стандартный classes Результат: Не ловит событие перезагрузки устройства, само приложение работает как надо. Попытка №2: Сервис - стандартный Манивест + клеим classes Приложение - подсовываем Манифест + стандартный classes Результат: Ошибка "Приложение завершилось", т.е. событие ловит, но сервис/приложение завершается ошибкой Попытка №3: Сервис - стандартный Манивест + стандартный classes Приложение - подсовываем Манифест + клеим classes Результат: Сервис вообще не запускается, даже просто из приложения, валится ошибкой. p.s. баги или ещё что... только опубликовал статью про создание простейшего сервиса, как объявился первый человек, у которого сервис не запускается... Цитата Ссылка на комментарий
0 Rusland Опубликовано 27 января, 2016 Автор Поделиться Опубликовано 27 января, 2016 (изменено) О, а это идея!Я действовал только по третьему сценарию как у вас:"Сервис - стандартный Манифест + стандартный classesПриложение - подсовываем Манифест + клеим classes" Надо тоже попробовать к самому сервису клеить classes (как в первом варианте). Andrey Efimov, а не пробовали ли вы вместо замены classes.dex добавлять в Deployment созданный bat-ником файл *.dex до склейки.Где-то видел на stackoverflow такое предложение... я попробовал, но у меня не получилось. Почитал вашу статью, возникли вопросы:1.) Почему проект сервиса обязательно должен быть в отдельной папке? Из-за того что все компилируется в одну папку Android/Debug, да?2.) Что будет если переименовать сервис в «Service»? )3.) Можно подробнее как смотреть логи через monitor.bat? ) Не могли бы вы расширить свою статью и рассказать в ней что можно использовать в сервисе, а что нет (например что нельзя использовать визуальные компоненты - это понятно, но хотелось бы знать что можно... можно ли в сервисе получать координаты местоположения с сенсора?) PS. А какой classes.dex вы подсовывали в Попытках 1 и 2 в Сервис? Ведь при Build-е проекта Сервиса classes.dex не создается (кстати в Deployment сервиса по умолчанию classes подключается, но он выделен серым шрифтам что говорит о том что подключать то нечего) В общем на текущий момент по третьему Способу №3 просто программа запускается, но после рестарта системы программа стартует и закрывается ошибкой (значит событие рестарта ловится).Сервис - стандартный Манифест + стандартный classes.dexПриложение - редактированный Манифест + деплойдим склеенный Classes.dexОтличие лишь в том что в bat-файле я заменил путь к исходному classes.dex на тот, который компилируется в Android\Debugset EMBO_DEX="C:\Program Files (x86)\Embarcadero\Studio\17.0\lib\android\debug\classes.dex" заменил на свойset EMBO_DEX="C:\Test\Proj\Android\Debug\classes.dex" Коллективный разум, помогай Изменено 27 января, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 27 января, 2016 Модераторы Поделиться Опубликовано 27 января, 2016 Итак, я добился автозапуска сервиса! Всё оказалось очень даже банально... Как сделать (вкратце): 1) Создаём сервис, собираем его 2) Создаём приложение, добавляем туда сервис, собираем приложение 3) Далее генерим "classes.dex" НЕ на основе файла по умолчанию, а на основе файла "classes.dex" из приложения (второй пункт) 4) Полученный файл будет меньше по размеру (пока не понял почему так происходит), его добавляем в приложение, через Deployment Manager и снимаем галочку с файла "classes.dex", который установлен по умолчанию Т.е. мы склеим наш BroadcastReceiver с файлом, в котором уже упомянут Сервис. До этого, как я понимаю, склеивание происходило с файлом, в котором не был упомянут сервис или как-то так. 5) Профит. (Проверено!) В ближайшие дни (постараюсь), я опубликую две новые статьи про автозапуск приложения и сервиса. По поводу вопросов: 1) Правила про отдельную папку и имя сервиса указаны в документации 1.1) Про папку, да все файлы перемешаются и ошибок не избежать, да и не правильно это (в общем случае, плохой тон), городить всё в одну папку, потом сами запутаетесь 1.2) Имя, не знаю, что будет, но не зря это имя зарезервировано. Проверять не хочу)) 2) Про monitor.bat полно информации в интернете, воспользуйтесь поиском. По поводу расширения статьи. Я не буду её расширять, специально опустил все эти моменты, чтобы просто показать, как создать самый простой сервис в Студии. В след. статьях обязательно рассмотрю все эти вопросы. АП (13:40). Только сейчас заметил, что вы идёте по такому же пути Но у меня служба стартанула вообще без проблем Цитата Ссылка на комментарий
0 Rusland Опубликовано 27 января, 2016 Автор Поделиться Опубликовано 27 января, 2016 (изменено) Пока пытался отловить через monitor.bat, но он у меня не успевает найти устройство после перезагрузки. Где ещё лучше посмотреть? Сегодня уже точно не смогу, а завтра попытаюсь хоть какие-то логи выудить. ап. 23.01.16. Подключение по USB происходит только после отрабатывания ресейвера...У меня Android Device Monitor успевает найти устройство до загрузки и я вижу логи, вижу как проскакивает ошибка, но как только я жму кнопку Сохранения в файл, получаю файл 0 размера. Да и кроме того в логе видимо какое-то ограничение на количество записей - за считанные секунды моя ошибка пропадает и не успеваю ее посмотреть. Как расширить количество записей в логе?Оказывается прежде чем сохранять выделять надо через Ctrl+A Изменено 27 января, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 27 января, 2016 Модераторы Поделиться Опубликовано 27 января, 2016 Вот ещё особенность Андроида, из-за неё может вываливаться ошибка: Необходимо запустить приложение/сервис один раз вручную или через код. Т.е. устанавливаете приложение, запускаете его или сервис из него. Перезагружаетесь и должен сработать автозапуск. Цитата Ссылка на комментарий
0 Rusland Опубликовано 27 января, 2016 Автор Поделиться Опубликовано 27 января, 2016 (изменено) Andrey Efimov, у меня сервис стартует автоматом OnCreate private { Private declarations } FService: TLocalServiceConnection; ... procedure TForm1.FormCreate(Sender: TObject); begin FService := TLocalServiceConnection.Create; FService.StartService('MyService'); end; Сейчас попробую сначала проект создать. Еще вот на что обратил внимание, в предыдущем проекте я забыл в сервисе прописать function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Result := TJService.JavaClass.START_STICKY; end; НО при закрытии приложения, процесс все равно восстанавливался! Спрашивается, а нужна ли вообще эта строчка? Изменено 27 января, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Rusland Опубликовано 27 января, 2016 Автор Поделиться Опубликовано 27 января, 2016 (изменено) Создал новый проект, повторил все действия, добавив лишь Androidapi.JNI.App в юнит сервиса и System.Android.Service в юнит программы (согласно статье ). Также вижу как приложение крошится при старте. При обычном запуске все нормально. Успел сохранить вот такой кусок лога в Android Device Monitor (фильтровал по названию проекта myproject) 01-27 15:24:39.514: D/PackageManager(493): scan package: /data/app/com.mycompany.myproject-2.apk , start at: 21264ms. 01-27 15:24:40.123: I/PackageManager(493): Perform pre-dex opt for package: com.mycompany.myproject 01-27 15:24:40.132: D/PackageManager(493): scan package: /data/app/com.mycompany.myproject-2.apk , end at: 21881ms. elapsed time = 617ms. 01-27 15:25:02.167: I/ActivityManager(493): Start proc com.mycompany.myproject for broadcast com.mycompany.myproject/com.mycompany.myproject: pid=1132 uid=10119 gids={50119, 3003, 1028} 01-27 15:25:02.225: V/ActivityManager(493): Binding process pid 1132 to record ProcessRecord{425f9c00 1132:com.mycompany.myproject/u0a10119} 01-27 15:25:02.228: V/ActivityManager(493): New app record ProcessRecord{425f9c00 1132:com.mycompany.myproject/u0a10119} thread=android.os.BinderProxy@427c5b18 pid=1132 01-27 15:25:02.278: E/AndroidRuntime(1132): java.lang.RuntimeException: Unable to instantiate receiver com.mycompany.myproject: java.lang.ClassNotFoundException: Didn't find class "com.mycompany.myproject" on path: DexPathList[[zip file "/data/app/com.mycompany.myproject-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.mycompany.myproject-2, /vendor/lib, /system/lib]] 01-27 15:25:02.278: E/AndroidRuntime(1132): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mycompany.myproject" on path: DexPathList[[zip file "/data/app/com.mycompany.myproject-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.mycompany.myproject-2, /vendor/lib, /system/lib]] 01-27 15:25:02.434: V/WindowManager(493): Changing focus from Window{427992b8 u0 com.android.launcher/com.android.launcher2.Launcher} to Window{425f6970 u0 Application Error: com.mycompany.myproject} 01-27 15:25:02.436: I/WindowManager(493): Gaining focus: Window{425f6970 u0 Application Error: com.mycompany.myproject} 01-27 15:25:02.462: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:0) setConsumerName: Application Error: com.mycompany.myproject 01-27 15:25:02.486: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:0) setDefaultBufferSize: w=480, h=190 01-27 15:25:02.504: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:0) connect: api=2 01-27 15:25:02.504: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:2) setSynchronousMode: enabled=1 01-27 15:25:02.504: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:2) new GraphicBuffer needed 01-27 15:25:02.520: I/SurfaceTexture(133): [Application Error: com.mycompany.myproject](this:0x4198e908,api:2) [void* android::SurfaceTexture::createImage(EGLDisplay, const android::sp<android::GraphicBuffer>&)] 01-27 15:25:02.624: D/Launcher(738): IconCache, CacheLocked get title from cache: title = MyProject 01-27 15:25:02.646: D/Launcher(738): AllAppsList, Add application in app list: app = ComponentInfo{com.mycompany.myproject/com.embarcadero.firemonkey.FMXNativeActivity}, title = MyProject 01-27 15:25:02.955: D/AES(493): process : com.mycompany.myproject 01-27 15:25:02.955: D/AES(493): module : com.mycompany.myproject v1 (1.0.0) 01-27 15:25:02.956: D/AEE/LIBAEE(493): shell: raise_exp(2, 1132, -1361051648, com.mycompany.myproject, 0x0x56549008, 0x0x0) Изменено 27 января, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 27 января, 2016 Модераторы Поделиться Опубликовано 27 января, 2016 Скиньте весь проект, гляну у себя. Только исходники. Цитата Ссылка на комментарий
0 Rusland Опубликовано 27 января, 2016 Автор Поделиться Опубликовано 27 января, 2016 Посмотрите пожалуйста что в проекте не так ASARserv.zip Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 27 января, 2016 Модераторы Поделиться Опубликовано 27 января, 2016 Я сходу уже вижу ошибки... в Манифесте, в java классе. Похоже, всё-таки нужна статья на русском языке... Вот эта ошибка из логов, как раз подтвердила мои догадки: E/AndroidRuntime(1132): java.lang.RuntimeException: Unable to instantiate receiver com.mycompany.myproject Цитата Ссылка на комментарий
0 Rusland Опубликовано 27 января, 2016 Автор Поделиться Опубликовано 27 января, 2016 (изменено) А что там должно быть? Статья конечно же нужна. Изменено 27 января, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 27 января, 2016 Модераторы Поделиться Опубликовано 27 января, 2016 Сейчас исправлю проект и проверю, заработает или нет, потом сюда выложу. Rusland 1 Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 27 января, 2016 Модераторы Поделиться Опубликовано 27 января, 2016 Java класс: Вы же хотите запустить сервис, а запускаете Активити приложения... Правильная строка: launchintent.setClassName(context, "com.embarcadero.services.MyService"); Также некоторые модули совсем необязательны там. И вообще, вы хотите запустить службу, но весь код, запускает у вас активити... т.е. для службы надо так: 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.TestService"); context.startService(TestLauncher); } } } Манифест: Строка: <receiver android:name="com.mycompany.myproject" имя указано неверно, у вас же Ресейвер имеет имя "com.mycompany.BootReceiver", откуда взялось "com.mycompany.myproject"?! Правильно писать: <receiver android:name="com.mycompany.BootReceiver" и т.д. Это батник из статьи? у меня другой , в своей статье выложу Ну вот, всё работает как часы Держите исправленный проект: ASARservRepair.zip p.s. Забыл вычистить проект от classes.dex, поэтому весит 900 кб. p.s.2 Постараюсь, поскорее написать статью, чтобы все подобные ошибки не возникали у людей Rusland 1 Цитата Ссылка на комментарий
0 Rusland Опубликовано 27 января, 2016 Автор Поделиться Опубликовано 27 января, 2016 (изменено) Andrey Efimov, большое спасибо. Понял свои ошибки. Теперь все работает как надо! Статья будет очень полезна для всех! Также хотелось бы видеть продолжение статьи про Сервисы, в которой бы освещались возможности... что можно делать, а что нельзя... а то приходится методом тыка изучать Изменено 27 января, 2016 пользователем Rusland Цитата Ссылка на комментарий
Вопрос
Rusland
Добрый день.
Делаю запуск приложения после рестарта системы согласно этой статье
Выключаю телефон, включаю - вижу что программа стартует, но тут же закрывается.
Если просто запустить программу, то стартует нормально и не закрывается.
Почему это происходит?
Ссылка на комментарий
22 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.