Автоматизация установки множества apk файлов на Android

  • Tutorial
Приходилось ли вам сталкиваться с ситуацией, когда вам нужно автоматизировать установку определённого списока приложений на андроид девайс? Такой вопрос может возникнуть у вас в случае, если у вас много устройств и на все требуется установить одни и те же программы. Или в ситуации, если вы часто перепрошиваете свой смартфон разными прошивками и хотите сразу иметь определённые приложения на борту для работы.
Как это можно осуществить? В официальном магазине Google Play вы не можете этого сделать. Там есть категория «Мои приложения», в которой две вкладки: «установленные» и «все» (которые когда-либо были установлены, а затем удалены). Также есть категория «Список желаний». Но нигде нет кнопки для установки всего списка желаний, и нигде нет списка «Избранные».
Таким образом, в Google Play для установки нужного списка программ вам придётся долго и терпеливо выбирать из вашего списка по одному приложению и на каждом нажимать кнопку установить. Такой вариант нас не устраивает.


Способ с локальным хранилищем apk файлов


Следующий вариант: попробуем закачать к себе все приложения в виде apk файлов и устанавить их. Плюс этого способа в том, что не надо зависеть от Google Play и бояться, что там удалят какое-то приложение. Также можно ставить свои приложения, которых нет в Google Play.
Тут начинается самое интересное. Как скачать из Google Play? Просто так вытянуть из него apk файл не получится. На сайте play.google.com просто нет кнопки «Скачать». Есть только «установить» (и то только в случае «совместимости» с устройством) и «добавить в список желаний». Во-вторых, на телефоне мы можем не увидеть интересующие нас приложения. Те, которые «несовместимы» с вашим устройством, просто не отображаются, как будто их нет. Слово «Несовместимы» в кавычках — потому что на самом деле приложение вполне может быть совместимым. Это искусственное ограничение на установку делается по вполне понятным причинам — ограничение себя от отрицательных отзывов и соблюдение местного законодательства, или же желание дать доступ к приложение только определённой «илите». На «несовместимость» могут влиять название производителя телефона, разрешение экрана, страна проживания, сотовый оператор, частота и архитектура процессора и так далее (существуют программы для подмены всего этого). И, видимо, поэтому нельзя просто так взять и скачать apk c Google play. Этот сервис хочет знать под какой конкретный аппарат и аккаунт скачивается приложение и выдать ему нужный apk.

Так как всё-таки скачать?


Погуглив проблему, нашел я такой онлайн сервис как APK downloader (http://apps.evozi.com/apk-downloader/). Вы даёте ссылку на приложение на сайте play.google.com и получаете прямую ссылку на apk. Однако этим сервисом нельзя скачать с Samsung Apps.
Закачиваем себе всё необходимое. Теперь подключаем девайс, включаем отладку по usb и устанавливаем скриптом все приложения. Примерно такой скрипт:
#/bin/sh
for i in {1..50}
do
adb install apk$i.apk
done
Всё. Теперь все приложения установлены.
Решение это не очень красивое. В любой момент APK Downloader может быть прикрыт. И вообще для меня этот сервис как черный ящик. Я не знаю, как он качает. Кстати, этот же Apk downloader доступен в виде неофициального расширения для хрома (crx). Это zip архив с файлами. Я планирую посмотреть исходники из него. Может быть узнаю как инициализируется скачка. Вот он: codekiem.com/apk-downloader/crx/1.2.crx
Догадываюсь, что единственным способом скачать с плея остаётся закачка на какой-то девайс. Этот сервис наверняка так и скачивает: извлекает файл из «памяти устройства», а потом отдаёт уже скачанный апк. Почему бы тогда ему так же не сделать скачку и с самсунг аппс?

Как быть с обновлениями


Тут ещё проблема с обновлениями. Как мне обновлять приложения в своём хранилище? Всё заново качать? Нет удобного просмотра версии пакета и вообще автоматического обновления. Но есть одна софтина, которая может решить все эти проблемы. Правда, я её не пробовал стаить. Называется она Real apk leecher. Автор выложил исходный код на xda developers.
Вот здесь 4pda.ru/forum/index.php?showtopic=384677&st=60#entry16248359 инструкция как обновлять локальное хранилище.

Способ без локального хранилища apk файлов


Хотелось бы иметь возможность установки не только со своего хранилища, а прямо с гугл плея. Это решает проблему старых версий приложений. Как это сделать программно я не знаю.
Для установки apk на устройство можно использовать такие команды:
$ adb install <путь до apk на компьютере>
или же
$ adb shell pm install [опции] <путь до apk на телефоне>

Обратите внимание, что в Google Play на компьютере есть кнопка «установить» под приложением. Нажитие на неё прводит к чтению разрешений и подтверждением желания установки. Далее на телефон подключенный к интернету [ К НЕМУ ВООБЩЕ ДАЖЕ МОЖЕМ НЕ ПРИКАСАТЬСЯ ] приходит сам апк и устанавливается. То есть достаточно прислать какую-то команду из интернета на телефон и он всё сделает. Это вселяет какую-то надежду. Точно так же с сайта кнопкой можно установить приложение из Samsung Apps.
Я догадываюсь, что маркетодержатели (Гугл и Самсунг) оставили себе возможность подключения к рутовому шеллу. При нажатии кнопки «установить» на сайте они делают

$ adb push <файл apk из их хранилища> <временная папка на вашем андроиде>

Затем

$ adb shell pm install <путь до только что скачанного apk файла>.

Потом кидают в уведомления «успешно установлено». Или какая-то похожая схема. Вот и получается установка с компа.
Проблема тогда в том, как узнать какую команду и каким образом надо послать на телефон, чтобы он сам всё скачал и установил из их хранилища? Они же наверняка спрашивают телефон о его серийнике, версии установленной уже программы. Может надо предварительно поставить сниффер и прослушивать весь траффик, между телом и интернетом. Но я не знаю как это сделать. Опытные хабровчане подскажут?

Ссылки по теме:
toster.ru/q/62556
4pda.ru/forum/index.php?showtopic=345461
androidsmartfony.com/249-kak-ustanovit-mnogo-apk-faylov-na-android-ustroystvo-s-pk-v-odin-klik.html
www.linux.org.ru/forum/mobile/7535268
4pda.ru/forum/index.php?showtopic=316475&st=740
  • +6
  • 43.5k
  • 8
Share post

Comments 8

    +2
    А можно просто поставить Titanium Backup
      0
      А он без рута насколько функционален?
        0
        Тут ещё один момент: бесплатная версия при попытке восстановить, скажем, штук 20 приложений, будет каждый раз выводить диалог «Установить?» Это, мягко говоря, удлиняет процесс установски большого количества приложений. Если мне не изменяет память, то за автоматическую установку отвечает фича «Hypershell». Сам с этим сталкивался год назад где-то, с тех пор может уже и поменялось.
      +3
      Предполагаю, что схема работы google play примерно такая:
      1. Сервер гугла посылает push уведомление
      2. Приложение получает уведомление и качает файл с сайта по http
      3. Google play является системным приложением и имеет permission на установку, поэтому может вызвать метод PackageManager.install, который обычно недоступен и в апи не описан.
      4. Выводит уведомление пользователю
        +1
        Доброго времени суток,

        Я уже несколько раз мелькал в комментариях к подобным статьям. И еще раз решил тихонечко пропиариться :)

        Я один из разработчиков замечательного кроссплатформенного приложения «Android Package Manager» или же просто APM. Это приложения призвано облегчить работу с приложениями на устройстве. Оно умеет устанавливать и удалять приложения с устройства(да же пачками) и еще много мелких плюшек. И все те скрипты которые Вы писали делаются в удобном(надеюсь что это так) графическом интерфейсе.

        Так что это приложение вполне можно использовать для частичного решения ваших проблем. Итак:
        1) Для установки множества приложений(apk файлов) достаточно их перенести(при помощи drag&drop) в список пакетов. И все эти приложения автоматически установятся
        2) Для поддержания актуальных apk файлов придется приложить больше усилий. Для этого их придется скачать/обновить на устройстве, а затем сохранить у себя на жестком диске. Опять же сохранение делается через наше приложение(можно сохранять и пачками). Так же никто не отменял описанный вами способ добывания приложений. Единственной неудобство что за версиями придется следить самостоятельно.

        Теперь рассмотрим что нужно для APM:
        1) Скачать по ссылке mac/win/nix
        2) Распаковать в удобное для вас место
        3) Запустить при помощи Java. Для этого у вас должна быть установлена Java 6 или старше. Переходим в каталог с приложением и выполняем эту команду "java apm-0.7.1.jar" (Это только один из способов)
        4) Включить отладку по USB на телефоне
        5) Подключить телефон по USB кабелю к компьютеру

        Собственно думаю этого достаточно для начала использования.

        ЗЫ
        Не судите строго люди, пожалей меня родня.
        Все писали сами и с нуля :)

        ЗЫЫ
        Сейчас готовиться большое обновление для APM, в котором мы стараемся исправить недочеты о которых уже попросили люди. Но при этом приложением занимаемся в свободное время так что процесс хоть и движется, но медленно. С выходом новой версии мы хотим так же написать статью на habrahabr. Надеюсь у нас все получиться
          0
          Приношу свои извинения я ошибся в команде запуска Java приложения, команда должна выглядеть так "java -jar apm-0.7.1.jar". Ошибку заметил после обращения пользователя Snowly, который сообщил мне что команда у него не работает.
          +1
          Ну если приложений очень много, а девайсов тьма, тогда может взглянуть в сторону Aptoide?
            0
            Вижу там в меню пункт «Запланированные загрузки». Непонятно только где сохраняется этот список.

          Only users with full accounts can post comments. Log in, please.