В данном руководстве я актуализировал разрозненные инструкции на текущий момент (май 2022 года). Если совсем коротко, то собрать приложение можно командой:
gradlew assembleDebug или gradlew assembleRelease
Но как всегда есть нюанс ;) Что нужно минимально поставить на ноутбук или компьютер, а главное где это скачать?
Потребуется скачать и настроить 2 вещи Jdk и Command line tools only.
JAVA DEVELOPER KIT
Нужен именно JDK. В его состав входит компилятор. JRE не подойдет.
Если у Вас уже стоит JDK давайте проверим, что настроено правильно.
C:> cd %JAVA_HOME%
Не сработало - нет переменной окружения . Исправляем.
C:\Program Files\BellSoft\LibericaJDK-11-Full>java -version
openjdk version "11.0.12" 2021-07-20 LTS OpenJDK Runtime Environment (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM (build 11.0.12+7-LTS, mixed mode)
нет вывода как выше - директория bin не добавлена в пути
Обратите внимание на версию. Требуется 11.x.x
Установка JDK
Найти откуда скачать дистрибутив - наверная самая сложная задача. Для разработчиков 1С проще всего взять дистрибутив Liberica, скачав ее с сайта релизов 1С. Подтверждаю, что с ней андроид приложения замечательно собираются.
Если посмотрим в папки Андроид студии увидим, что сейчас использует
JAVA_VERSION="11.0.12"
После изменения лицензии в 2019 году, скачать с https://www.oracle.com/cis/java/technologies/javase/jdk11-archive-downloads.html можно только после регистрации.
Без регистрации и смс доступно https://jdk.java.net/archive/ только версия 11.0.2 (отстает на 9 от используемой сейчас в студии).
Будем настраивать в варианте без установщика. Т.е. распакуем архив самостоятельно и настроем нужные переменные среды в ручную.
1. Распакуем файлы из архива в c:\Jdk11
2. Добавляем переменную среды JAVA_HOME
Если у Вас есть значок моего компьютера на рабочем столе, то жмем по нему правой кнопки мыши. Параметры.
Или идем через параметры (н-р через кнопку Пуск. Шестерёнка) Система. О программе. В правой колонке синяя ссылка Дополнительные параметры системы.
Открылся диалог Свойства системы. Вкладка дополнительно. Переменные среды.
3. Добавляем в пути %JAVA_HOME%\bin
Для этого находим переменную path. Встали на нее. Изменить. Создать. Мы добавили новую строчку в диалоге. Редактируем.
%JAVA_HOME%\bin - означает подставить введенное на предыдущем шаге значение c:\Jdk11 и дописать к нему \bin . У вас должен быть введен реальный путь c:\Jdk11\bin
Чтобы не возвращаться к этому еще раз настройку утилит командной строки начнем с ввода переменных окружения.
Установка Command line tools для Android
4. Добавляем переменную среды ANDROID_HOME значение c:\android
5. В переменную Path добавляем %ANDROID_HOME%\cmdline-tools\latest\bin
Напомню еще раз . Полный реальный путь. c:\android\cmdline-tools\latest\bin
Закрываем все диалоги и окна, если все ввели без опечаток, то больше они нам не потребуются.
6. Скачиваем и распаковываем архив
https://developer.android.com/studio#command-tools
Обратите внимание внутри архива два уровня вложенности, а нам нужно файлы разложить с еще одним промежуточным, который назовем latest.
Создайте папку c:\android . Распакуйте в нее архив. Войдите в cmdline-tools. Создайте папку latest. Переместите остальные файлы и папки в неё.
Теперь у нас есть инструмент с помощью которого можно доустановить остальные нужные компоненты.
7. c:>sdkmanager --list
Скачает список доступных .
8. c:>sdkmanager --install "platform-tools"
принимаем лицензию ответив Y
Смотрим в своем проекте нужную версию платформы . В моем примере 32-я .
9. c:>sdkmanager --install "platforms;android-32"
На этом подготовка завершена.
Собираем проект на практике
Для тестов использован дешевый ноутбук с алиэкспресс (210$). На корпусе нет никаких надписей, в общем настоящий китайский ноунейм 2021 года.
ОЗУ 6 гб. Android Studio запустить можно, но работать не комфортно.
Проверим как этот ноут будет справляться со сборкой через командную строку.
Напомню мы установили и настроили два обязательных компонента для начала сборки. В настоящий момент на диске мы заняли 289M - папка Jdk , 220M - папка Android. Папка андроид будет разрастаться. Также в папке пользователя будут созданы автоматически две служебных папки для кэширования. Папка .android уже существует и занимает 2М. В момент первой сборки появиться еще .gradle
Скачаем с гитхаба демо проект для этой статьи. Минимальный пример создан в студии через визард.
https://github.com/Muraveiko/androidHello
Если Вы не знакомы с гитом, то скачайте в виде архива. кнопка “Code” . Download .zip
Для начала соберем отладочную версию приложения
c:\work\androidHello>gradlew assembleDebug
В первый раз процесс длительный. Сначала скачается gradle.
В ходе сборки будут скачиваться остальные нужные зависимости. Займет это 10-15 минут.
Давайте посмотрим .
Папка c:\android подросла до 1G. В папке пользователя появилась .gradle и в ней файлов на 632 мегабайта.
Что изменилось в самой папке приложения?
Добавилась c:\work\androidHello-main\.gradle со служебными файлами для оптимизации повторной сборки.
Появилась c:\work\androidHello-main\app\build . В нашем проекте один модуль. Аналогичная папка создается для каждого модуля в проекте.
А где же собранное приложение ?
Нужный нам файл создался в папке build подпапка outputs . Собирали мы apk и следующая папка в пути называется также. Вариант сборки для отладки, поэтому дальше debug. И вот мы видим результат.
c:\work\androidHello-main\app\build\outputs\apk\debug\apk\debug\apk-debug.apk
В данном случае места на жестком диске нам потребовалось меньше двух гигабайт. Если подключать больше зависимостей, собирать под разные целевые версии андроида и т.д. Места потребуется значительно больше. Легко это все распухнет со временем до 40 гигабайт, а то и более.
Замеры времени сборки проектов
Мы собрали приложение в первый раз за 12 минут. В данном случае большинство времени было потрачено на скачивание нужных библиотек.
Попробуем запустить еще раз.
c:\work\androidHello>gradlew assembleDebug
7 секунд. Что произошло. GRADLE проверил файлы на изменения и ничего пересобирать не стал.
Давайте почистим наш проект
./gradlew clean
Uses your project's gradle wrapper to execute your project's clean task. Usually, this just means the deletion of the build directory.
Это полностью аналогично действиям в студии Android Studio --> Build --> Clean или если бы вручную удалили папку c:\work\androidHello-main\app\build.
Запускаем gradlew assembleDebug - 59 секунд. Увы но даже маленький проект собирается целую минуту.
Запустим еще раз сборку - 5 секунд (время немного плавает. Аналогичное действие в прошлый раз заняло 7 секунд)
Попробуем внести небольшую правку в исходный код.
Дополнил код парой букв . Исправив home на myhome.
7 секунд . 4 задачи отработали. 30 не требовали повторного запуска.
Сборка подписанного приложения
Нельзя считать статью о сборке полной, если хотя бы кратко не упомянуть этот момент. Сразу предупрежу, что следующие правки будут содержать секретную информацию и не все из них можно держать под контролем версий. Особенно если Вы используете публичный репозиторий. Положите в проект пример файла, а реальный добавьте в список игнорируемых.
Начнем с модификации app/build.gradle
android {
…
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
}
buildTypes {
release {
…
signingConfig signingConfigs.release
}
}
}
Пока ничего секретного нет. Добавили конфиг для задачи подписи и дополнительный шаг в релиз.
А вот с файлом gradle.properties уже нужно решать проблему безопасности.
# app sign
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=real_pasword_there
MYAPP_RELEASE_KEY_PASSWORD=real_pasword_there
например оригинальный файл добавить в игнорируемые. Рядом положить дополненный этими строками заглушками как пример. Н-р как gradle.properties.example
С реальными строчками хранить отдельно вместе с файлом my-release-key.keystore
Хранилище ключа может иметь расширение .keystore или .jks (то, которое укажете в команде его генерации).
Ключ подписи использовать готовый или если его нет создать можно командой keytool. В случае когда пишет, что не знает такую команду, то неправильно добавили к пути c:\Jdk11\bin (директорию куда ставили JDK).
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
my-release-key.keystore - имя файла хранилища Н-р: your.jks
my-key-alias - имя ключа в хранилище, часто key0
После запуска команды отвечайте на вопросы программы. Код страны единственное место где есть контроль правильности. Пишем ru . Остальные вещи лучше тоже заполнять латиницей.
Если прописать так
MYAPP_RELEASE_STORE_FILE="my-release-key.keystore"
то файл ключа будет искаться в подпапке app, можно указать абсолютный или относительный путь и не хранить его в папках проекта.
И Вы уже догадались, что собрать подписанное приложение это команда
gradlew assembleRelease
В завершение
Как видите даже на слабом компьютере задача сборки андроид приложения вполне решаема.
К сожалению, это не заменит полноценно андроид студию.
Интегрированная среда разработки это не только подсветка синтаксиса. Это еще множество других полезных вещей. Работая в студии не нужно даже запускать приложение, чтобы увидеть 90% ошибок.
Комментарии (17)
lair
13.06.2022 14:40+1Удивительно, сколько раз в одном посте можно повторить ошибочную команду (которая является центром статьи).
Chuvi
13.06.2022 20:02можно для тех, кто в танке, уточнить, в какой команде ошибка и как надо правильно?
lair
13.06.2022 20:15+2Не
gradlew assebleDebug
илиgradlew assebleRelease
а
gradlew assembleDebug
илиgradlew assembleRelease
(даже на скриншотах видно)
Borz
13.06.2022 20:29вы не думали что это могла быть банальная опечатка, о которой автору можно было просто в личку написать?
lair
13.06.2022 20:39+2Думал. Но "банальная опечатка" в команде, которую по-хорошему автор должен был бы копировать из терминала и обратно, да потом еще и повторенная по тексту статьи несколько раз — это не очень банально. И об этом полезнее знать читателям.
sparhawk
13.06.2022 20:47+1Ну без Studio, но с gradle это каждый
CI workerможет. А можно собрать приложение Android без помощи gradle?sparhawk
13.06.2022 20:52+1Спойлер: можно. На Хабре уже было. Но руками это все запускать почти не реально. Даже свой батник сборки сложно написать с нуля.
Однако, без gradle может… и сама Studio собрать (да-да, без всяких систем сборки, как старый-недобрый Delphi) и плагин для Maven еще был. Правда, они не умеют запускать AAPT2, только AAPT1, и наверняка не умеют что-то еще. А AAPT1 последние девайсы уже не понимают.402d Автор
14.06.2022 11:51Несколько лет назад выпили. До этого были скрипты для Appache ANT в составе самого SDK . Это для исторической полноты.
iLLuzor
14.06.2022 14:23Не вопрос - command line tools в руки и вперёд. Собрать элементарные приложения довольно просто. Но если взять большое приложение с множеством модулей, флейворов, подключенных библиотек, над которым работает пара десятков человек, то сложность такой сборки становится невообразимой и сопоставимой с написанием своего agp. Практического смысла в этом нет.
Chuvi
13.06.2022 23:38+1Окей. А можно ли собрать приложение для Android вообще без компьютера? Например, на самом Android в Termux?
baldr
А нельзя это все оформить как один Docker-образ и распространять только его? Неужели в 2022 году все еще надо ставить что-то по скриншот-инструкциям и править
реестрсистемные переменные окружения?Brown2Fox
Нужно ставить докер...
TerryChan2003
Человек будучи в винде он не поймёт что такое докер)
baldr
Ну ясно. Запустить одну команду сложнее чем набивать с клавиатуры команды из статьи с опечатками.