博客链接:https://blog.xhyeax.com/2019/12/29/ubuntu-1910-android-6-source/
提示
[2020/04/16更新]
建议使用docker
进行编译,省心省力
见:在WSL2中使用docker编译安卓源码
概述
之前编译了AOSP 5.1.1源码,没有写文章记录。这次记录一下编译安卓6.0.0_r1的过程,流程大致跟编译5.1.1一样
步骤
配置软件源
sudo vim /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
启动i386架构
sudo dpkg --add-architecture i386
更新软件源
sudo apt-get update
安装依赖
程序包
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib \
tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \
dpkg-dev libsdl1.2-dev libesd0-dev \
git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib \
libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev \
lib32z-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip m4
JDK
官网查询得知,编译安卓5.x-6.0都是使用JDK7
下载地址: https://pan.baidu.com/s/1AcnT-D9x8EE0Z6Jzuxgscw 提取码: hqh5
将openJDK7解压到/usr/lib/jvm
目录下:
mkdir /usr/lib/jvm
tar xvf openjdk-1.7.0_121.tar.xz -C /usr/lib/jvm/
最终文件夹名为/usr/lib/jvm/openjdk-1.7.0_121
修改/etc/profile
文件,在末尾添加:
export JAVA_HOME=/usr/lib/jvm/openjdk-1.7.0_121
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
之后执行source /etc/profile
,从而免重启使环境变量在当前bash环境下生效,
然后执行以下命令测试java是否正常:
java -version
javac -version
下载源码
有两种选择,直接下载压缩包或者使用repo下载
下载压缩包
使用repo下载
repo可使用中科大版本或清华版本
ustc - AOSP(Android) 镜像使用帮助
tuna - AOSP(Android) 镜像使用帮助
以清华源为例
~/.bashrc
添加以下内容:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
再执行
mkdir aosp
cd aosp
## 创建工作文件夹,并初始化repo
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.0_r1 --depth=1
## 指定深度和分支,只下载对应版本的代码,不下载commit记录
repo sync
## 同步源码树
下载驱动文件
在官网找到对应型号和版本的驱动,并解压到源码目录下
然后逐一运行解压出的脚本,读到第8条第e项之后输入I ACCEPT
解压出驱动
编译前准备
修改mk文件
修改 art/build/Android.common_build.mk
文件,定位到75行
将
ifneq ($(WITHOUT_HOST_CLANG),true)
改为
ifeq ($(WITHOUT_HOST_CLANG),false)
切换python
版本
如果python默认版本为python2
,则不需要进行这一步
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
sudo update-alternatives --config python
选择python2
的序号并回车
使用ccache
为提高编译效率,使用ccache加速编译
(1) 在~/.bashrc
文件末尾添加:export USE_CCACHE=1
(2) 在源码目录执行:
prebuilts/misc/linux-x86/ccache/ccache -M 100G
PS:据说该设置会保存到CCACHE_DIR中,且该命令是长效的,不会因系统重启而失效。
但是可能因为其他原因失效,导致不使用ccache编译,所以建议每次编译前手动设置一下
编译
执行export LC_ALL=C
然后导入编译Android源码所需的环境:
source build/envsetup.sh
执行lunch
选择编译目标
make -j24
多线程编译,建议设置线程数为cpu核心数的2倍(grep ^processor /proc/cpuinfo | wc -l
查看)
耐心等待编译完成
刷入
在out/target/product/型号
下找到生成的镜像,fastboot刷入即可
参考
Ubuntu 18.04.3 LTS 编译安卓6.0.0_r1
E:Unable to locate package libssl-dev:i386
ubuntu18.04无法安装libesd0-dev【学习笔记】