Pull to refresh

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

Reading time3 min
Views5.9K
Недавно столкнулся с проблемой — нужно было на удаленном сервере генерировать 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
Tags:
Hubs:
+27
Comments2

Articles