Достался мне на новой работе в поддержку и разработку средних размеров проект Android приложения, которое контора планирует выпустить как дополнение к десктопной версии. После ознакомления с фронтом работ, руководство дало задание сделать автоматическую сборку realise-версии «в один клик». До этого все мои проекты прекрасно собирались в IDE, а предстояло сделать безИДЕшную реализацию, поэтому пришлось пройти путь граблей и шишек. Соли добавляло обстоятельство что в проекте используется зависимость от ActionBarSherlock (Maven-проект, apklib).
Аутсорсеры, делавшие проект до меня, использовали Intelij IDE, я же в основном использую в работе NetBeans и Eclipse. Открыть и собрать проект в Eclipse не составило особого труда, только путь к ABS пришлось указать. Компиляция, сборка и запуск готового apk прошла без проблем. А вот с NetBeans такой фокус не прошел. Он упорно отказывается принимать ABS как библиотеку. Погуглив, выяснилось что это баг в НетБинс (к примеру как тут у человека), нашел даже тикет на официальном багрепорте. Так же нашел парочку способов собрать из под НетБинса (изменение pom.xml, копирование исходников ABS в папку основного проекта), но они мне не подходили (дана была четкая установка сделать так, чтобы зависимости основной проект вообще брал с внешнего репозитория и никак не влиял на них).
Поигравшись с IDE, начал реализовывать автосборку. Гугление вывело на эту и эту статью. После нескольких экспериментов был написан такой мануал:
1. Устанавливаем (вдруг у кого не стоит) JAVA_HOME и ANDOID_HOME (к примеру C:\Program Files (x86)\Java\jdk1.7.0_07 и D:\android\android-sdk)
2. Устанавливаем в Path пути к Android tools и Ant (у меня Ant отдельно, последняя версия). Что-то вроде такого должно быть
D:\android\android-sdk\tools;D:\android\android-sdk\platform-tools;D:\android\android-sdk\bin;D:\android\apache-ant-1.9.0\bin
3. Для ленивых открываем проект в NetBens, он создаст основные файлы, для остальных выполняем команду android rebuild , она должна создать необходимые файлы.
4. Поскольку собираем realise-версию, ложим наш файл key.keystore (или как он у вас называется) в папку проекта. В файл ant.properties добавляем:
key.store=key.keystore
key.alias=mykey
key.store.password=pass1
key.alias.password=pass2
5. В project.properties добавляем пути к нашей apklib-зависимости:
android.library.reference.1=../ActionBarSherlock
android.library=false
Сама папка проекта ABS лежит рядом с папкой нашего проекта.
6. Если нужно запускать ProGuard, в том же файле пишем (или раскомментируется):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
6. Поскольку у меня задача была сделать сборку «в один клик», создаем батник с содержимым:
echo Build
call ant release
pause
(первая и последняя строчки опционально)
Итогом мы должны получить такую структуру проекта:
.../rootfolder/
ActionBarSherlock/
src/
res/
bin/
libs/
pom.xml
AndroidManigest.xml
…
MyProject/
src/
res/
bin/
jni/
libs/
project.properties
ant.properties
build.xml
build.bat
AndroidManigest.xml
…
Если все сделано правильно, по нажатию на батник мы увидим консоль сборки

и счастливые найдем в папке bin наш готовый *-realise.apk
Спасибо за внимание.
Аутсорсеры, делавшие проект до меня, использовали Intelij IDE, я же в основном использую в работе NetBeans и Eclipse. Открыть и собрать проект в Eclipse не составило особого труда, только путь к ABS пришлось указать. Компиляция, сборка и запуск готового apk прошла без проблем. А вот с NetBeans такой фокус не прошел. Он упорно отказывается принимать ABS как библиотеку. Погуглив, выяснилось что это баг в НетБинс (к примеру как тут у человека), нашел даже тикет на официальном багрепорте. Так же нашел парочку способов собрать из под НетБинса (изменение pom.xml, копирование исходников ABS в папку основного проекта), но они мне не подходили (дана была четкая установка сделать так, чтобы зависимости основной проект вообще брал с внешнего репозитория и никак не влиял на них).
Поигравшись с IDE, начал реализовывать автосборку. Гугление вывело на эту и эту статью. После нескольких экспериментов был написан такой мануал:
1. Устанавливаем (вдруг у кого не стоит) JAVA_HOME и ANDOID_HOME (к примеру C:\Program Files (x86)\Java\jdk1.7.0_07 и D:\android\android-sdk)
2. Устанавливаем в Path пути к Android tools и Ant (у меня Ant отдельно, последняя версия). Что-то вроде такого должно быть
D:\android\android-sdk\tools;D:\android\android-sdk\platform-tools;D:\android\android-sdk\bin;D:\android\apache-ant-1.9.0\bin
3. Для ленивых открываем проект в NetBens, он создаст основные файлы, для остальных выполняем команду android rebuild , она должна создать необходимые файлы.
4. Поскольку собираем realise-версию, ложим наш файл key.keystore (или как он у вас называется) в папку проекта. В файл ant.properties добавляем:
key.store=key.keystore
key.alias=mykey
key.store.password=pass1
key.alias.password=pass2
5. В project.properties добавляем пути к нашей apklib-зависимости:
android.library.reference.1=../ActionBarSherlock
android.library=false
Сама папка проекта ABS лежит рядом с папкой нашего проекта.
6. Если нужно запускать ProGuard, в том же файле пишем (или раскомментируется):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
6. Поскольку у меня задача была сделать сборку «в один клик», создаем батник с содержимым:
echo Build
call ant release
pause
(первая и последняя строчки опционально)
Итогом мы должны получить такую структуру проекта:
.../rootfolder/
ActionBarSherlock/
src/
res/
bin/
libs/
pom.xml
AndroidManigest.xml
…
MyProject/
src/
res/
bin/
jni/
libs/
project.properties
ant.properties
build.xml
build.bat
AndroidManigest.xml
…
Если все сделано правильно, по нажатию на батник мы увидим консоль сборки

и счастливые найдем в папке bin наш готовый *-realise.apk
Спасибо за внимание.