Boots app on android

Android. Автозапуск приложения при загрузке: теория и практика

1. Теория

Взглянув на примеры из официального источника (например, этот и этот) и изучив рекомендации на сайте stackoverflow.com, можно выделить следующие правила:

    В манифесте в элементе «manifest» указать разрешение:

В манифесте в элементе «application» зарегистрировать ваш ресивер на прием сообщения ACTION_BOOT_COMPLETED:

Используйте правильное полное или относительное имя класса вашего broadcast-ресивера. В описании ресивера без необходимости не указывайте атрибуты «enabled», «exported» и т.д. Вполне достаточно настроек и атрибутов по умолчанию.

Код вашего broadcast-ресивера:

Если ваш ресивер используется только для сообщения ACTION_BOOT_COMPLETED, то проверка «if» не обязательна. Однако иногда разработчики используют один и тот же ресивер для разных сообщений. В этом случае фильтруйте сообщения, проверяя их внутри метода onReceive.

Приложение должно быть установлено на внутреннюю память. ОС Android устроена таким образом, что сообщение ACTION_BOOT_COMPLETED отправляется приложениям перед монтированием внешний памяти. Поэтому приложения, установленные на внешней памяти, никогда не получат это сообщение. Чтобы указать системе не устанавливать приложение на внешнюю память, в манифесте НЕ нужно прописывать для атрибута «@android:installLocation» значения «auto» или «preferExternal». По умолчанию, т.е. если этот атрибут не указан, ОС установит ваше приложение только на внутреннюю память. Однако согласно официальной документации лучше явно указать значение «internalOnly», чтобы у вас и других разработчиков не возникло искушение в будущем указать иное значение.

После установки или принудительной остановки (force stop) приложение должно быть запущено хотя бы один раз, чтобы система «запомнила» это приложение для отправки ему сообщения ACTION_BOOT_COMPLETED. Такое поведение было реализовано в версии Android 3.1 в целях безопасности. В чем суть? Все только что установленные приложения находятся в состоянии «stopped» (не путать с активити, т.к. ОС управляет этим состоянием у приложений и активити по-разному). В это же состояние приложение «уходит», когда пользователь в настройках телефона принудительно его останавливает. Пока приложение находится в таком состоянии, оно не будет запущено системой ни по какой причине (например, через ACTION_BOOT_COMPLETED), исключая, конечно же, запуск самим пользователем. Благодаря такому нововведению немалая часть«вирусни и троянцев» перестала работать, т.к. уже нет возможности запуститься автоматом после установки.

Исключение составляют системные приложения: см. замечание пользователя kolipass.

Особенности режима Fast boot в HTC-устройствах. Известно, что HTC-устройства не перезагружаются в классическом смысле, а используют так наз. режим Fast boot (это одна из форм гибернации), сохраняя состояние ОС на диск. Поэтому сообщение ACTION_BOOT_COMPLETED не отправляется системой, т.к. в действительности перезагрузка не происходит (см. здесь). Вместо ACTION_BOOT_COMPLETED система может отправить следующие сообщения:

В вашем приложении укажите в теге «receiver» кроме ACTION_BOOT_COMPLETED также вышеуказанные сообщения. Кроме этого необходимо прописать разрешение в дополнение к п.1:

2. Практика: ошибки и особенности эксплуатации

Разберем ошибки, которые совершают новички при настройке приложения и в коде.

    После установки или force stop приложение ни разу не запускалось (см. п.1.5).

Приложение установлено не на внутренней памяти, или пользователь вручную перенес его на внешнюю память (см. п. 1.4).

Читайте также:  Обои iphone для андроида

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

Также некоторые разработчики, отлаживая приложение, в logcat не видели своих сообщений из ресивера. Используйте Toast для отладки:

Опечатки или несуществующие сообщения внутри тега ресивера:

Неправильное положение элементов в манифесте приложения:

  • «uses-permission» должен быть указан только как прямой потомок элемента «manifest», не нужно его указывать/дублировать в теге «receiver»;
  • тег «receiver» должен быть указан только как прямой потомок элемента «application».

  • Различные диспетчеры задач, оптимизаторы, приложения безопасности, Startup-менеджеры и т.п. могут отслеживать регистрацию приложения для приема ACTION_BOOT_COMPLETED и запрещать/разрешать его получение при загрузке. Удалите эти приложения или добавьте в исключение вашу программу в их настройках.

    Как было указано выше, некоторые устройства используют режим Fast boot. Можно попробовать в настройках телефона отключить этот режим или учесть п. 1.6.

    В приложении нет ни одной активити, поэтому после установки у пользователя нет возможности хотя бы 1 раз запустить ваше приложение. Из-за этого сообщение ACTION_BOOT_COMPLETED не будет отправлено в ваше приложение.

    Не ошибки, но все же: указаны лишние, не обязательные атрибуты в теге «receiver», например («uses-permission», «enabled», «exported»):

    3. Отладка ресивера в эмуляторе и на реальных устройствах.

      В терминале выполните:

    Далее, чтобы отправить ACTION_BOOT_COMPLETED всем приложениям, наберите в терминале:

    Или для отправки ACTION_BOOT_COMPLETED конкретному приложению наберите в терминале:

    В эмуляторе: установите ваше ПО, запустив его из студии. При этом студия соберет ваш проект, установит приложение и запустит его. После этого закройте эмулятор (это аналогично выключению на реальном устройстве). Чтобы получить сообщение ACTION_BOOT_COMPLETED, запустите эмулятор из AVD-менеджера, а не с помощью кнопки «Run app» в тулбаре студии.

    После запуска эмулятора во вкладке Android Monitor укажите запущенный эмулятор и ваше приложение, чтобы просмотреть логи logcat.

    Итоги

    Чтобы ваше приложение запускалось при загрузке на всех устройствах, манифест как минимум должен выглядеть так:

    Код ресивера, как правило, будет таким:

    Надеюсь, эта статья поможет новичкам побороть «коварного врага» под названием «ACTION_BOOT_COMPLETED».

    Источник

    Boots app on android

    Platform-tools: r31.0.3
    ADB: 1.0.41 (31.0.3-7562133)
    Fastboot: 31.0.3-7562133
    Make_f2fs: 1.14.0 (2020-08-24)
    Mke2fs: 1.46.2 (28-Feb-2021)
    Последнее обновление утилит в шапке: 01.08.2021

    ADB (Android Debug Bridge — Отладочный мост Android) — инструмент, который устанавливается вместе с Android-SDK и позволяет управлять устройством на базе ОС Android.
    Работает на всех Android-устройствах, где данный функционал не был намеренно заблокирован производителем.
    Здесь и далее: PC — ПК, компьютер к которому подключено устройство.
    ADB — консольное приложение для PC, с помощью которого производится отладка Android устройств, в том числе и эмуляторов.
    Работает по принципу клиент-сервер. При первом запуске ADB с любой командой создается сервер в виде системной службы (демона), которая будет прослушивать все команды, посылаемые на порт 5037.
    Официальная страница
    ADB позволяет:

    • Посмотреть какие устройства подключены и могут работать с ADB.
    • Просматривать логи.
    • Копировать файлы с/на аппарат.
    • Устанавливать/Удалять приложения.
    • Удалять (очищать) раздел data.
    • Прошивать (перезаписывать) раздел data.
    • Осуществлять различные скрипты управления.
    • Управлять некоторыми сетевыми параметрами.

    Поставляется ADB в составе инструментария разработчика Андроид (Android SDK), который, в свою очередь входит в состав Android Studio.

    Читайте также:  Fonbet для android зеркало

    Если что-то неправильно, то в списке подключенных устройств (List of devices attached) будет пусто.

    Скрытые команды ADB
    adb -d Команда посылается только на устройство подключенное через USB.
    Внимание: Выдаст ошибку, если подключено больше одного устройства.

    adb -e Команда посылается на устройство в эмуляторе.
    Внимание: Выдаст ошибку, если подключено больше одного эмулятора.

    adb -s Команда посылается на устройство с указанным серийным номером:

    adb -p Команда посылается на устройство с указанным именем:
    Если ключ -p не указан, используется значение переменной ANDROID_PRODUCT_OUT.

    adb devices Список всех подсоединенных устройств.

    adb connect [: ] Подсоединиться к андроид хосту по протококу TCP/IP через порт 5555 (по умолчанию, если не задан).

    adb disconnect [ [: ]] Отсоединиться от андроид подключенного через TCP/IP порт 5555 (по умолчанию, если не задан).
    Если не задан ни один параметр, отключиться от всех активных соединений.

    adb push Копировать файл/папку PC->девайс.

    adb pull [ ] Копировать файл/папку девайс->PC.

    adb sync [ ] Копировать PC->девайс только новые файлы.
    Ключи:
    -l Не копировать, только создать список.

    adb shell Запуск упрощенного unix shell.
    Примеры использования

    adb emu Послать команду в консоль эмулятора

    adb install [-l] [-r] [-s] Послать приложение на устройство и установить его.
    Пример: adb install c:/adb/app/autostarts.apk Установить файл autostarts.apk лежащий в папке /adb/app/ на диске с:
    Ключи:
    -l Блокировка приложения
    -r Переустановить приложение, с сохранением данных
    -s Установить приложение на карту памяти
    Установка split apk

    adb uninstall [-k] Удаление приложения с устройства.
    Ключи:
    -k Не удалять сохраненные данные приложения и пользователя.

    adb wait-for-device Ждать подключения устройства.

    adb start-server Запустить службу/демон.

    adb kill-server Остановить службу/демон.

    adb get-state Получить статус:
    offline Выключен.
    bootloader В режиме начальной загрузки.
    device В режиме работы.

    adb get-serialno Получить серийный номер.

    adb status-window Непрерывный опрос состояния.

    adb remount Перемонтировать для записи. Требуется для работы скриптов, которые изменяют данные на.

    adb reboot bootloader Перезагрузка в режим bootloader.

    adb reboot recovery Перезагрузка в режим recovery.

    adb root Перезапуск демона с правами root

    adb usb Перезапуск демона, прослушивающего USB.

    adb tcpip Перезапуск демона, прослушивающего порт TCP.

    adb ppp [параметры] Запуск службы через USB.
    Note: you should not automatically start a PPP connection. refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
    Параметры:
    defaultroute debug dump local notty usepeerdns

    FastBoot — консольное приложение для PC. Используется для действий над разделами

    fastboot devices Список присоединенных устройств в режиме fastboot.
    fastboot flash Прошивает файл .img в раздел устройства.

    fastboot erase Стереть раздел.
    Разделы: boot, recovery, system, userdata, radio
    Пример: fastboot erase userdata Стирание пользовательских данных.

    fastboot update Прошивка из файла имя_файла.zip

    fastboot flashall Прошивка boot + recovery + system.

    fastboot getvar Показать переменные bootloader.
    Пример: fastboot getvar version-bootloader Получить версию bootloader.

    fastboot boot [ ] Скачать и загрузить kernel.

    fastboot flash:raw boot [ ] Создать bootimage и прошить его.

    fastboot devices Показать список подключенных устройств.

    fastboot continue Продолжить с автозагрузкой.

    fastboot reboot Перезагрузить аппарат.

    f astboot reboot-bootloader Перезагрузить девайсв режим bootloader.
    Перед командами fastboot можно использовать ключи:
    -w стереть данные пользователя и кэш
    -s Указать серийный номер устройства.
    -p

    Читайте также:  Reface app pro android

    Указать название устройства.
    -c Переопределить kernel commandline.
    -i Указать вручную USB vendor id.
    -b Указать в ручную базовый адрес kernel.
    -n

    Указать размер страниц nand. по умолчанию 2048.

    Команду logcat можно использовать с машины разработки
    $ adb logcat
    или из удаленного shell
    # logcat Каждое сообщение лога в Android имеет тэг и приоритет
    Тэг – это строка указывающая компонент системы, от которого принято сообщение (например: View для системы view)
    Приоритет – имеет одно из нижеследующих значений (в порядке от меньшего к большему):
    V — Verbose (Низший приоритет).
    D — Debug
    I — Info
    W — Warning
    E — Error
    F — Fatal
    S — Silent (Наивысший приоритет, при котором ничего не выводится).

    Получить список тэгов, используемых в системе, вместе с их приоритетами можно запустив logcat. В первых двух столбцах каждого из выведенных сообщений будут указаны / .
    Пример выводимого logcat сообщения:
    I/ActivityManager( 585): Starting activity: Intent

    Для уменьшения вывода лога до приемлемого уровня нужно использовать выражения фильтра. Выражения фильтра позволяют указать системе нужные комбинации и , остальные сообщения система не выводит.
    Выражения фильтра имеют следующий формат : . где указывает нужный тэг, указывает минимальный уровень приоритета для выбранного тэга. Сообщения с выбранным тэгом и приоритетом на уровне или выше указанного записываются в лог. Можно использовать любое количество пар : в одном выражении фильтра. Для разделения пар : используется пробел.

    Пример ниже выводит в лог все сообщения с тэгом «ActivityManager» с приоритетом «Info» или выше, и сообщения с тэгом «MyApp» и приоритетом «Debug» или выше:
    adb logcat ActivityManager:I MyApp:D *:S
    Последний элемент в выражении фильтра *:S устанавливает приоритет «silent» для всех остальных тэгов, тем самым обеспечивая вывод сообщений только для «View» и «MyApp». Использование *:S – это отличный способ для вывода в лог только явно указанных фильтров (т.е. в выражении фильтра указывается «белый список» сообщений, а *:S отправляет все остальное в «черный список»).

    При помощи следующего выражения фильтра отображаются все сообщения с приоритетом «warning» или выше для всех тэгов:
    adb logcat *:W

    Если logcat запускается на машине разработчика (не через удаленный adb shell), можно также установить значение выражения фильтра по умолчанию задав переменную окружения ANDROID_LOG_TAGS:
    export ANDROID_LOG_TAGS=»ActivityManager:I MyApp:D *:S»

    Следует обратить внимание что задав переменную окружения ANDROID_LOG_TAGS она не будет работать в эмуляторе/устройстве, если вы будете использовать logcat в удаленном shell или используя adb shell logcat.
    Вышеописанная команда export работает в ОС *nix и не работает в Windows.

    Контроль формата вывода лога

    Сообщения лога в дополнение к тэгу и приоритету содержат несколько полей метаданных. Можно изменять формат вывода сообщений показывая только конкретные поля метаданных. Для этого используется параметр -v и указывается один из ниже перечисленных форматов вывода.

    brief Показывать приоритет/тэг и PID процесса (формат по умолчанию).
    process Показывать только PID.
    tag Показывать только приоритет/тэг.
    thread Показывать только процесс:поток и приоритет/тэг.
    raw Показать необработанное сообщение, без полей метаданных.
    time Показывать дату, время вызова, приоритет/тэг и PID процесса.
    long Показывать все поля метаданных и отдельно сообщения с пустыми строками.

    При запуске logcat можно указать формат вывода используя параметр -v:
    adb logcat [-v

    Источник

  • Оцените статью