В данном руководстве я актуализировал разрозненные инструкции на текущий момент (май 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)


  1. baldr
    13.06.2022 14:06

    А нельзя это все оформить как один Docker-образ и распространять только его? Неужели в 2022 году все еще надо ставить что-то по скриншот-инструкциям и править реестр системные переменные окружения?


    1. Brown2Fox
      14.06.2022 12:08

      Нужно ставить докер...


    1. TerryChan2003
      15.06.2022 10:08

      Человек будучи в винде он не поймёт что такое докер)


      1. baldr
        15.06.2022 12:19

        Ну ясно. Запустить одну команду сложнее чем набивать с клавиатуры команды из статьи с опечатками.


  1. lair
    13.06.2022 14:40
    +1

    Удивительно, сколько раз в одном посте можно повторить ошибочную команду (которая является центром статьи).


    1. Chuvi
      13.06.2022 20:02

      можно для тех, кто в танке, уточнить, в какой команде ошибка и как надо правильно?


      1. lair
        13.06.2022 20:15
        +2

        Не


        gradlew assebleDebug или gradlew assebleRelease

        а


        gradlew assembleDebug или gradlew assembleRelease


        (даже на скриншотах видно)


        1. Borz
          13.06.2022 20:29

          вы не думали что это могла быть банальная опечатка, о которой автору можно было просто в личку написать?


          1. lair
            13.06.2022 20:39
            +2

            Думал. Но "банальная опечатка" в команде, которую по-хорошему автор должен был бы копировать из терминала и обратно, да потом еще и повторенная по тексту статьи несколько раз — это не очень банально. И об этом полезнее знать читателям.


    1. 402d Автор
      13.06.2022 21:33

      спасибо исправил.


  1. sparhawk
    13.06.2022 20:47
    +1

    Ну без Studio, но с gradle это каждый CI worker может. А можно собрать приложение Android без помощи gradle?


    1. sparhawk
      13.06.2022 20:52
      +1

      Спойлер: можно. На Хабре уже было. Но руками это все запускать почти не реально. Даже свой батник сборки сложно написать с нуля.

      Однако, без gradle может… и сама Studio собрать (да-да, без всяких систем сборки, как старый-недобрый Delphi) и плагин для Maven еще был. Правда, они не умеют запускать AAPT2, только AAPT1, и наверняка не умеют что-то еще. А AAPT1 последние девайсы уже не понимают.


      1. 402d Автор
        14.06.2022 11:51

        Несколько лет назад выпили. До этого были скрипты для Appache ANT в составе самого SDK . Это для исторической полноты.


    1. iLLuzor
      14.06.2022 14:23

      Не вопрос - command line tools в руки и вперёд. Собрать элементарные приложения довольно просто. Но если взять большое приложение с множеством модулей, флейворов, подключенных библиотек, над которым работает пара десятков человек, то сложность такой сборки становится невообразимой и сопоставимой с написанием своего agp. Практического смысла в этом нет.


  1. Chuvi
    13.06.2022 23:38
    +1

    Окей. А можно ли собрать приложение для Android вообще без компьютера? Например, на самом Android в Termux?


    1. romandeveloper
      14.06.2022 13:00

      А зачем?) на анроид 10 же даже уже не запустишь)


  1. Mansur_85
    15.06.2022 10:08

    Завтра почитаю. Сегодня уже поздно. Устал )