Как стать автором
Обновить

Автоматическое генерирование APK с различными данными из командной строки с помощью Ant

Время на прочтение3 мин
Количество просмотров6K
Недавно столкнулся с проблемой — нужно было на удаленном сервере генерировать apk файл для загрузки, причем в зависимости от передаваемого адреса сервера программа должна была по умолчанию при установке соединяться с различными серверами.

Итак задача — дать пользователю возможность загрузить из интернета динамически генерируемое Андроид приложение которые буду вести себя по разному в зависимости от переданных параметров (в данном случае разные сервера загрузки данных).



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

Сначала настраиваете Java и Ant, Android SDK на вашем удаленном сервере. Убедитесь, что прописаны пути к ним или вводите полный путь при запуске приложений из этих пакетов. Скопируйте исходники проекта на сервер.

Порядок выполнения команд


Я привожу данный пример для Ubuntu. Для Windows сервера нужно будет заменить только команду создания файла в командной строке.

Создаете пакетный файл который будет генерировать apk файл с переменными адресами сервера. Естественно вы можете его использовать и для других переменных.

Сначала создаете файл ваших данных указал в качестве пути к данным папку /assets в вашем проекте…

cat<<ЕОF>путь_к_данным/файл_данных.txt
здесь любые ваши данные, в моем случае просто адрес сервера
ЕОF


Сгенерируйте файла build.xml в корне проекта, причем название проекта <project_name> вы можете указывать любое, это будет названием apk файла. Если вам нужно делать различные релизы, то вы можете указывать к примеру project_name_release_number_version_number и т.д.

android update project --name <project_name> --path <path_to_your_project>

Затем из корня проекта запускаете команду

ant release

в результате вы получите готовую apk в каталоге /bin. В данном случае вы получите файл с суффиксом -unsigned.apk, поскольку вы не подписали ваше приложение. Чтобы подписать ваше приложение нужно убедиться что в файле local.properties прописаны пути к вашему хранилищу сертификатов. Как создать сертификат для подписи вашего приложения описано здесь. Это выходит за рамки этой заметки.

key.store=/Path/to/my/keystore/MyKeystore.ks
key.alias=myalias


Для уверенности мы можем вставить код генерации этого файла.

cat<<ЕОF >каталог_проекта/local.properties
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked in Version Control Systems,
# as it contains information specific to your local configuration.
# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/путь_к_sdk/Android-sdk
key.store=/Path/to/my/keystore/MyKeystore.ks
key.alias=myalias
ЕОF


В вашем Java коде достаете нужные для работы данные из сгенерированного файла в /assets. Используйте их как вам необходимо. В моем случае просто читаю адрес сервера с которого нужно производить загрузку.
Пользователю для загрузки даете ссылку на готовую apk.

Полный пакетный файл приведен ниже. Пути данных и названия файлов вы можете передавать в скрипт/пакетный файл при помощи параметров.

ВНИМАНИЕ! В тексте заметки везде EOF написано при помощи русских букв Е и О — иначе некорректно отображалось.

cat<<ЕОF >путь_к_данным/файл_данных.txt
здесь любые ваши данные, в моем случае просто адрес сервера
ЕОF
android update project --name <project_name> --path <path_to_your_project>
cat<<ЕОF>каталог_проекта/local.properties
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked in Version Control Systems,
# as it contains information specific to your local configuration.
# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/путь_к_sdk/Android-sdk
key.store=/Path/to/my/keystore/MyKeystore.ks
key.alias=myalias
ЕОF
ant release
Теги:
Хабы:
Всего голосов 35: ↑31 и ↓4+27
Комментарии2

Публикации

Истории

Работа

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область