BUILD SUCCESSFUL in 1m 39s 33 actionable tasks: 33 executed
跑出这行字的是一台 Android 12 手机。aarch64,7.8G 内存,剩余 20G 空间。没有电脑,没有 Android Studio,没插数据线。
官方根本不支持这条路
Termux 里能跑 Linux 那一套,但它不是安卓开发环境。
Google 的 build-tools 只发 linux-x86_64 的二进制,而我这台是 ARM64。所以整件事不是「装个包就能用」,是把官方不给的环境自己拼出来。
第一步,装 Java
pkg install openjdk-17
仓库实际给到的是 21.0.13。Gradle 也有,9.8.2,直接装。
然后 aapt2 一跑就崩:
cannot locate symbol _ZNSt6__ndk113__hash_memoryEPKvm
字都认识,意思不懂。
查了一阵才明白:aapt2 和 adb 都是对着 libc++ 30 编的,仓库里装的是 27c。版本对不上。
pkg install --reinstall libc++
好了。就这么一行。

最恶心的一步:build-tools 里全是 x86 二进制
Google 只发 linux-x86_64,解压出来 aapt、aapt2、aidl 全是 x86-64 ELF,ARM64 上直接跑不了。
我的处理办法:
- aapt / aapt2 / aidl 换成 wrapper,exec 到 Termux 自带的原生版本
- zipalign 没有 ARM 版,我自己用 Python 写了一个——手动算 local header 偏移,写 0xd935 extra field 做 4 字节对齐
zipalign 逻辑不难。但对齐规则错一次,apksigner 后面就给你脸色看。
AGP 开始怀疑人生
AGP 装完,第一次构建直接报:
Build Tools revision 36.0.0 is corrupted
原因是我一开始图省事,把 x86 的工具删了。
AGP 靠文件清单校验完整性,少一个就判 corrupt。所以除了我替换的那三个,其余 dexdump、split-select、lld、各种 -ld 全部原样保留——虽然它们永远不会被执行。
第一个 APK
先用手工链路跑通:javac 编 Java,d8 转 dex,aapt2 打资源,apksigner 签名。
BUILD OK build/app-signed.apk 8.4K V3.0 Signer: CN=CodeLion, OU=Dev, O=7Tan
8.4K,基本是个空壳。但它能装。
然后换 Gradle + AGP 9.5.0,compileSdk 36:
BUILD SUCCESSFUL in 1m 39s app-debug.apk 865K
package 是 com.codelion.agp,minSdk 21,targetSdk 36,V2 签名,zipalign 验证通过。

真正的考验在 Kotlin 和 Compose
现在没人写纯 Java 了。
这里踩了两个坑,都属于报错信息在骗你那种。
第一个:AGP 9 已经把 Kotlin 内置了。网上九成教程里那句 kotlin.android 插件,在 AGP 9.5 上是硬错误:
The 'org.jetbrains.kotlin.android' plugin is no longer required for Kotlin support since AGP 9.0
正确写法只剩两个插件:com.android.application,加 org.jetbrains.kotlin.plugin.compose。
第二个更坑。Compose 1.12.1 会拒绝低版本的 compileSdk:
requires libraries to compile against version 37 or later
要 compileSdk 37。而 AGP 里只有 platforms/android-36。
我去 repository2-3.xml 里挖出了 platforms;android-37.0 的地址,拉了 65M 的 zip 装上。
然后 AGP 报:
Failed to install ... some licences have not been accepted
不是许可证的问题。
是我手解压的 platform 缺 package.xml。AGP 靠这个文件判断「包装没装」,没有就当成没装。
手写元数据:api-level=37.0(字符串,不是数字 37)、extension-level=22、revision major=2。
这几个值靠猜是猜不出来的,是从官方 repo 的 XML 里抠出来的。
跑起来到底是什么速度
首次全量大约 5 分钟,因为要拉 Kotlin 编译器和 Compose 全套。
改一行 Kotlin 代码之后,增量构建:57 秒。
assembleRelease(带 lintVital 和 baseline profile 生成):4 分 1 秒。
APK 体积 debug 11.5MB,release 7.9MB。内存峰值 4.3G / 7.5G,没 OOM。
关键是这个开关:
kotlin.compiler.execution.strategy=in-process
让 Kotlin 编译器跑在 Gradle 的 JVM 里。不然两个进程一起把内存吃穿。
产物我逐个验过:com.codelion.compose,compileSdk 37,minSdk 24,targetSdk 36,dex 五个,V2 + V3 签名,zipalign 通过。
MainActivity 和 Composer 是不是真的编进 dex 了?我没信 badging 的空口承诺,自己用 Python 写了个 Dex 字符串池解析去查。

它装不上自己的手机
这台没 root,pm install 没权限。adb devices 是空的,5555 也拒绝连接。
要装到真机,得 adb connect 连另一台设备,或者走无线配对。
所以结论是:能编,但编出来的东西装不进它自己。
值不值得这么干
不值得当主力。配置环境那几个晚上,用电脑早干完了。
但它确实有个位置。你手上只有一部手机,偏偏又得交个东西出去——出差、断电、电脑坏了、甲方在饭桌上当面催改——这些场景里,有和没有是两码事。
还有个附带感受。
在一个官方明确不支持的环境里,把 aarch64 这条路走通,靠的不是什么技巧。就是一条一条读报错,一次一次猜错,把每个「许可证未接受」背后真正的文件缺失挖出来。
报错信息经常是错的。这是我这几晚最大的收获。
你有没有在什么奇怪的环境里编过东西?手机、树莓派、网吧机器,评论区说说,我挺想听。