引言
最近下载编译了 AOSP 源码,最初以为会很困难,但实践下来基本没遇到什么阻碍,一些小问题也都很容易看出问题所在,从而在互联网上找到解决方案。这里只是简单记录下当时遇到的各种各样地问题。
配置
设备 | 等级 |
---|---|
OS | Ubuntu20.04 |
CPU | 6核12线程 |
Memory | 32GB |
Disk | 1TB |
Java | 1.8 |
Python | 2.7.15 |
下载
下载AOSP的主要困难在于 git
,repo
以及镜像的配置。repo
并不是一个新的代码管理工具,它只是Google基于Python编写的 多git 仓库管理工具
安装git
这一步就不多说了,git 实在太过于常用了
bash
sudo apt install git
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
repo
bash
# 下载
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
# 配置环境
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
# 配置repo镜像源
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
配置镜像并下载
bash
# 代码目录
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
# 同步代码
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-8.1.0_r1
repo sync
参考
mirrors.tuna.tsinghua.edu.cn/help/AOSP/
编译
编译主要的困难在于各种各样的编译错误。主要集中在
libncurses.so 找不到
这个时候需要安装对应的依赖
bash
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libncurses5:i386
sudo apt-get install libncurses5-dev libncurses5
Python except getopt.GetoptError, err:
AOSP 在编译时应该使用 Python2
,而现在的Ubuntu一般内置的为 Python3。这就需要我们重新设置环境变量,使用update-alternatives
可以快捷切换软件版本
bash
# sudo update-alternatives --install <链接> <名称> <路径> <优先级>
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2
sudo update-alternatives --config python (选择切换Python版本)
python --version
flex 的 locate bug
flex
是一个词法分析器生成工具,在 Android 编译过程中用于从 lexer.ll
文件生成 C++ 代码。
一些预编译 flex
版本存在 locale 相关的 bug ,当系统的 LC_ALL
或 LANG
环境变量设置为某些值(尤其是中文 locale zh_CN.UTF-8
)时,会触发断言失败并崩溃。
通常可以设置相关环境变量来解决
bash
# 编辑 ~/.bashrc 或 ~/.zshrc
echo 'export LC_ALL=C' >> ~/.bashrc
source ~/.bashrc
Jack server SSL error
这个问题,主要是Java版本导致的,在Java8的一些后期发布版本中,默认禁用了TLSv1, TLSv1.1,而在编译 AOSP 的时候,恰恰需要这俩个东西,所以要去修改相关的配置
bash
cd /etc/java-8-openjdk/security
code java.security
然后将
ini
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves
改为
ini
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves
参考
dev.t-firefly.com/thread-1005...
segmentfault.com/a/119000003...
运行
运行基本没困难,依靠AOSP自带的模拟器
bash
elmulator
镜像找不到
没有产生镜像
不过我在编译时出现了一些问题。虽然编译成功结束,但是并没有弹出绿色提示条,同时模拟器也无法启动。经查发现System.img
文件根本没有生成,导致模拟器根本找不到系统镜像。
尤其没有任何错误产生,故这里优先尝试了重新编译,最终也是成功弹出了绿色提示条,生成了System.img
文件,也启动了elmulator
故编译是否成功,以是否弹出build completed successfully为准


镜像生成位置有误
其次,如果你使用过 ASFP
打开过项目,可能会导致 OUT_DIR
路径被修改,导致 lunch 目标路径与 make 目标路径不一致,这个时候需要自定义 out 路径
sh
export OUT_DIR=${out}