Сборка Android приложения без Studio

от автора

В данном руководстве я актуализировал разрозненные инструкции на текущий момент (май 2022 года). Если совсем коротко, то собрать приложение можно командой:

gradlew assebleDebug  или  gradlew assebleRelease

Но как всегда есть нюанс 😉  Что нужно минимально поставить на ноутбук или компьютер, а главное где это скачать?


Потребуется скачать и настроить 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 assebleDebug

В первый раз процесс длительный. Сначала скачается 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 assebleDebug

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 assebleDebug — 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 assebleRelease

В завершение

 Как видите даже на слабом компьютере задача сборки андроид приложения вполне решаема. 

К сожалению, это не заменит полноценно андроид студию. 

Интегрированная среда разработки это не только подсветка синтаксиса. Это еще множество  других полезных вещей. Работая в студии не нужно даже запускать приложение, чтобы увидеть 90% ошибок.


ссылка на оригинал статьи https://habr.com/ru/post/671086/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *