问题说明
Google 官方给出的安装包,现在还没有提供 linux arm64 的版本(大概原因是受众小),网上也没有找到 arm64 下的安装包,或是明确的方法可以跑起来的。但是我们 FDE 环境下是希望能给开发者提供完整的开发套件,支持开发调试的。所以,需要进行 linux arm64 下的适配,下面记录了碰到的问题和解决方法。
适配过程
源码编译(失败)
Android Studio 是基于 IntelliJ IDEA 社区版修改过来,也是开源的,代码在 aosp 的源码中,下面是具体编译的方法:
mkdir studio-master-dev
cd studio-master-dev
repo init -u https://android.googlesource.com/platform/manifest -b studio-master-dev
repo sync -c -j4 -q |
谷歌源下载不到的话,也可以替换成清华源来下载代码:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b studio-master-dev |
代码下载完成后,可以使用 IntelliJ IDEA Community Edition 来进行编译,使用 idea 打开 tools/idea 文件夹,然后进行构建。
编译过程开始就会出现错误,主要是源码中的 prebuilt 文件都是 x86 的,如果都自行编译 arm64 版本,工作量比较大,暂时放弃。
参考链接:
替换二进制文件(成功)
因为 Android Studio 是基于 IntelliJ IDEA Community 的,而 idea 是提供了 linux arm64 的安装包的,并且能够正常安装启动,于是通过对比 idea arm64 和 android studio linux x86 的目录结构,发现基本相同,于是使用 idea arm64 中的二进制文件替换到了 android studio linux x86 的同名目录中,测试是可以成功启动 android studio 的界面的,下面是具体的步骤:
目录结构对比,idea 的版本是 232.8660.185,android studio 的版本是 223.8836.35.223.10406996
替换文件或目录:
bin/libdbm.so
jbr
lib/jna/amd64/libjnidispatch.so当前替换的二进制文件可能并不包含所有的二进制文件,后面使用过程中如果碰到了错误,再进行修复补充。
build-tools 替换
Android Studio 工具打开后,sdk manager 自动安装的 build-tools 还是 x86 的包,所以编译代码的时候是无法使用的,需要安装 arm64 版本的 build-tools,有两种方式安装:
# apt 安装,ubuntu 23.04 源中版本是 29.0.3
sudo apt install android-sdk-build-tools
# 手动下载安装,github 有编译好的 33.0.3 版本
# 解压到 android-sdk/build-tools/33.0.3/
wget https://github.com/lzhiyong/android-sdk-tools/releases/download/33.0.3/android-sdk-tools-static-aarch64.zip推荐安装33.0.3 的版本,因为新版本和当前 gradle 版本是匹配的,Android Studio 向导生成的项目就能直接编译成功。29.0.3 的版本需要自己调整对应的gradle 版本(4.1.0),并修改向导生成的 gradle 语法,才能编译成功。
ndk 安装(暂时未解决,下面的方法不对,这个ndk 是安卓系统下用来编译的,linux 下无法使用)
同样的,sdk manager 自动安装的 ndk 也是 x86 下的包,所以也需要手动进行安装:
# 手动下载安装,github 有编译好的 r24 版本
wget https://github.com/lzhiyong/termux-ndk/releases/download/ndk-r24/android-ndk-r24-aarch64.zip |
以上步骤完成后,在编译示例项目过程中,最后还会碰到一个错误是关于 aapt2 的,因为 gradle 默认是会从 maven 源中下载 aapt2 的二进制文件来完成编译过程,并没有使用 build-tools 目录下的,这个暂时没有办法彻底解决,只能根据报错找到 gradle 下载的 aapt2 文件位置,使用 build-tools 下的 aapt2 替换就能成功,不过似乎每次编译 gradle 都会重新下载,导致需要反复替换才行。
AAPT2 aapt2-8.1.0-10154469-linux Daemon #0: Unexpected error output: /home/phytium/.gradle/caches/transforms-3/f9d93ef8580380ad3aa81 |