Posts and how to...
Many useful articles and instructions!
Building Android applications on Linux ARM (aarch64) directly on a smartphone via Termux
Building an Android App on Linux ARM (aarch64)
Guide for AI assistants: how to build an Android project on a Linux ARM host (for example, Ubuntu 24.04 aarch64) when the default aapt2 from Android Gradle Plugin does not start.
1) Check architecture and base tools
uname -m
# expected: aarch64
sudo apt-get update
sudo apt-get install -y openjdk-17-jdk unzip wget curl jq
java -version
2) Install Gradle (if missing)
Recommended example: 8.7 (compatible with AGP 8.5.x).
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) Install Android SDK command-line tools
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
Accept licenses and install SDK components:
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) Configure the project
Create local.properties in the project root:
sdk.dir=/opt/android-sdk
If resources use theme Theme.Material3.DayNight.NoActionBar, make sure this dependency exists:
implementation("com.google.android.material:material:1.12.0")
5) ARM aapt2 issue and fix
On ARM, build often fails with errors like:
AAPT2 ... Daemon startup failed- or
cannot executefor x86_64aapt2.
Fix: use ARM64 aapt2 (community static build).
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
Add this to project gradle.properties:
android.aapt2FromMavenOverride=/usr/local/bin/aapt2
6) Build APK
cd /path/to/project
ANDROID_HOME=/opt/android-sdk gradle --no-daemon assembleDebug
After success, APK is usually located at:
app/build/outputs/apk/debug/app-debug.apk
7) Quick troubleshooting
SDK location not found:- check
local.propertiesandANDROID_HOME.
- check
Custom AAPT2 location does not point to an AAPT2 executable:- path must point to an executable named
aapt2.
- path must point to an executable named
resource style/Theme.Material3... not found:- add
com.google.android.material:material.
- add
AAPT2 Daemon startup failedon ARM:- verify ARM
aapt2is used viaandroid.aapt2FromMavenOverride.
- verify ARM
8) Stability note
Official Android toolchain on Linux is primarily x86_64-oriented. ARM flow with community aapt2 works, but is unofficial. For production CI, keep a fallback x86_64 pipeline.







