【我的AOSP第一课】AOSP 下载、编译与运行

引言

最近下载编译了 AOSP 源码,最初以为会很困难,但实践下来基本没遇到什么阻碍,一些小问题也都很容易看出问题所在,从而在互联网上找到解决方案。这里只是简单记录下当时遇到的各种各样地问题。

配置

设备 等级
OS Ubuntu20.04
CPU 6核12线程
Memory 32GB
Disk 1TB
Java 1.8
Python 2.7.15

下载

下载AOSP的主要困难在于 gitrepo 以及镜像的配置。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

参考

juejin.cn/post/720411...

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_ALLLANG 环境变量设置为某些值(尤其是中文 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

参考

blog.csdn.net/yyzsyx/arti...

juejin.cn/post/704144...

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}
相关推荐
阿巴斯甜4 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker4 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95275 小时前
Andorid Google 登录接入文档
android
黄林晴7 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab19 小时前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android