Сборка Android приложения без Studio
В данном руководстве я актуализировал разрозненные инструкции на текущий момент (май 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С. Подтверждаю, что с ней андроид приложения замечательно собираются.
Если посмотрим в папки Андроид студии увидим, что сейчас использует
Без регистрации и смс доступно 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. Скачиваем и распаковываем архив
Обратите внимание внутри архива два уровня вложенности, а нам нужно файлы разложить с еще одним промежуточным, который назовем 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
Скачаем с гитхаба демо проект для этой статьи. Минимальный пример создан в студии через визард.
Если Вы не знакомы с гитом, то скачайте в виде архива. кнопка “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
Пока ничего секретного нет. Добавили конфиг для задачи подписи и дополнительный шаг в релиз.
А вот с файлом 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 . Остальные вещи лучше тоже заполнять латиницей.
то файл ключа будет искаться в подпапке app, можно указать абсолютный или относительный путь и не хранить его в папках проекта.
И Вы уже догадались, что собрать подписанное приложение это команда
gradlew assembleRelease
В завершение
Как видите даже на слабом компьютере задача сборки андроид приложения вполне решаема.
К сожалению, это не заменит полноценно андроид студию.
Интегрированная среда разработки это не только подсветка синтаксиса. Это еще множество других полезных вещей. Работая в студии не нужно даже запускать приложение, чтобы увидеть 90% ошибок.