Сборка Android-приложения на Linux ARM (aarch64) прямо на смартфоне через Termux
Инструкция для ИИ-ассистентов: как собрать Android-проект на Linux ARM-хосте (например, Ubuntu 24.04 aarch64), когда стандартный aapt2 из Android Gradle Plugin не запускается.
1) Проверить архитектуру и базовые инструменты
|
1 2 |
uname -m # ожидается: aarch64 |
|
1 2 3 |
sudo apt-get update sudo apt-get install -y openjdk-17-jdk unzip wget curl jq java -version |
2) Установить Gradle (если не установлен)
Рекомендуемый пример: 8.7 (совместим с AGP 8.5.x).
|
1 2 3 4 5 6 7 |
GRADLE_VERSION=8.7 cd /tmp wget -q https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip unzip -q -o gradle-${GRADLE_VERSION}-bin.zip sudo mv /tmp/gradle-${GRADLE_VERSION} /opt/gradle-${GRADLE_VERSION} sudo ln -sf /opt/gradle-${GRADLE_VERSION}/bin/gradle /usr/local/bin/gradle gradle -v |
3) Установить Android SDK command-line tools
|
1 2 3 4 5 6 7 8 9 10 |
SDK_ROOT=/opt/android-sdk TOOLS_ZIP=/tmp/commandlinetools.zip sudo mkdir -p "$SDK_ROOT/cmdline-tools/latest" wget -q -O "$TOOLS_ZIP" https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip sudo unzip -q -o "$TOOLS_ZIP" -d "$SDK_ROOT/cmdline-tools/latest" if [ -d "$SDK_ROOT/cmdline-tools/latest/cmdline-tools" ]; then sudo mv "$SDK_ROOT/cmdline-tools/latest/cmdline-tools"/* "$SDK_ROOT/cmdline-tools/latest"/ sudo rmdir "$SDK_ROOT/cmdline-tools/latest/cmdline-tools" fi sudo "$SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --sdk_root="$SDK_ROOT" --version |
Принять лицензии и поставить SDK-компоненты:
|
1 2 3 4 5 6 |
SDK_ROOT=/opt/android-sdk (yes | sudo "$SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --sdk_root="$SDK_ROOT" --licenses) || true sudo "$SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --sdk_root="$SDK_ROOT" \ "platform-tools" \ "platforms;android-34" \ "build-tools;34.0.0" |
4) Настроить проект
В корне проекта создать local.properties:
|
1 |
sdk.dir=/opt/android-sdk |
Если в ресурсах тема Theme.Material3.DayNight.NoActionBar, убедиться, что есть зависимость:
|
1 |
implementation("com.google.android.material:material:1.12.0") |
5) Проблема ARM с aapt2 и её решение
На ARM часто падает сборка с ошибкой вида:
AAPT2 ... Daemon startup failed- или
cannot executeдля x86_64aapt2.
Решение: использовать ARM64 aapt2 (community static build).
|
1 2 3 4 5 6 |
sudo mkdir -p /opt/android-arm-tools cd /opt/android-arm-tools wget -q https://github.com/lzhiyong/android-sdk-tools/releases/download/35.0.2/android-sdk-tools-static-aarch64.zip -O tools.zip sudo unzip -q -o tools.zip sudo install -m 755 /opt/android-arm-tools/build-tools/aapt2 /usr/local/bin/aapt2 /usr/local/bin/aapt2 version |
В gradle.properties проекта добавить:
|
1 |
android.aapt2FromMavenOverride=/usr/local/bin/aapt2 |
6) Сборка APK
|
1 2 |
cd /path/to/project ANDROID_HOME=/opt/android-sdk gradle --no-daemon assembleDebug |
После успеха APK обычно лежит в:
|
1 |
app/build/outputs/apk/debug/app-debug.apk |
7) Быстрая диагностика
SDK location not found:- проверить
local.propertiesиANDROID_HOME.
- проверить
Custom AAPT2 location does not point to an AAPT2 executable:- путь должен указывать на исполняемый файл с именем
aapt2.
- путь должен указывать на исполняемый файл с именем
resource style/Theme.Material3... not found:- добавить
com.google.android.material:material.
- добавить
AAPT2 Daemon startup failedна ARM:- проверить, что используется ARM
aapt2черезandroid.aapt2FromMavenOverride.
- проверить, что используется ARM
8) Примечание по стабильности
Официальный Android toolchain на Linux ориентирован на x86_64. ARM-решение с community aapt2 рабочее, но неофициальное. Для production CI лучше иметь резервный x86_64 pipeline.