首先 需要一个台式电脑,有个i7处理器,有一个1T的机械+ 500G的固态,如果条件允许改一个服务器也可以。我这里是一个台式电脑。
在台式电脑上安装一个虚拟机,基本是使用的VMware ,应该这个虚拟机有一个好处就是把每次成功的结果做成一个快照,就相当于做了一个备份,可以回退。
安装好虚拟机你就可以在创建虚拟机, 编译android 源码我用的Ubuntu 18.4 ,在虚拟机中安装即可。不会的自行百度,我这里不做赘述。
安装完系统 再启动虚拟机,这个时候需要 aosp 系统镜像
AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
我下载的不是最新的,最新的现在要 95G,很浪费磁盘空间。
Index of /aosp-monthly/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 在这个链接中可以看到
本人下载的是 这个版本,这个版本刚好有 Android 9,相对小了很多
下载完成之后 执行文件MD5 完整性校验,看看是不是 文件有损害,
md5sum aosp-20190401.tar
再通过命令来解压
tar xf aosp-20190401.tar
解压完成之后就 配置编译的环境
编译android 8.0以上的源码需要 配置 jdk8
##安装openjdk
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo apt-get install openjdk-8-jre
##安装编译依赖的库文件
首先需要更新软件源,这里使用阿里源
编辑如下文件:
sudo apt update vim #先安装vim
sudo apt install vim -y
sudo vim /etc/apt/sources.list #或者sudo gedit /etc/apt/sources.list
末尾添加如下内容
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb http://kr.archive.ubuntu.com/ubuntu/ xenial main universe
deb-src http://kr.archive.ubuntu.com/ubuntu/ xenial main universe
上述软件源添加完成以后,需要先做更新操作:
sudo apt-get update
- ###安装依赖库文件
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
安装并配置git
sudo apt-get install git -y
git config --global user.name "your name"
git config --global user.email "your@example.com"
在根目录
sudo gedit ~/.bashrc
PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
保存以后退出
安装repo
sudo apt install repo -y
同步源码
cd aosp
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.0.0_r2
repo sync
这里就等待 大概1小时 ,如果同步不成功 就在 执行 repo sync ,多次执行除非同步成功。
同步成功如下
需要下载对应的驱动
https://developers.google.com/android/drivers#sailfishopm4.171019.021.p1
下载这两个 压缩文件 并解压得到两个脚本 ,拷贝到 aosp 目录下 运行,
./extract-google_devices-sailfish.sh
./extract-qcom-sailfish.sh
输入 I ACCEPT
另一个同样的方法,这样子脚本就安装完成。
##编译AOSP
source build/envsetup.sh
lunch
我自己用的pixel 手机,所以选择的 23
设备编码选择 https://source.android.com/setup/build/running#selecting-device-build
最后一步就是 在主目录找到 .bashrc 文件,在最后面添加 export LC_ALL=C
echo "export LC_ALL=C" >> ~/.bashrc
source ~/.bashrc
链接文件
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
然后就是编译
make -j16
如果用python3编译失败,那就切换用python2来编译
当出现heap不足时有两种解决办法:
方法1 :
打开 prebuilts/sdk/tools/jack-admin
对JACK_SERVER_COMMAND增加-Xmx4096m选项
用如下命令
sudo vim /jack-admin 或者sudo gedit /jack-admin
找
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8}"
修改为
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -Xmx8g}"
方法2 : 导出环境变量
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8g"
两种方式任选其一都可以,然后执行jack重启命令:
out/host/linux-x86/bin/jack-admin kill-server
out/host/linux-x86/bin/jack-admin start-server
编译完成如下
刷机
可以写成脚本来刷机 ,刷机的时候 需要解锁 bootloader,谷歌官网先下载对应版本的 刷机包 ,解压之后
第一种刷机方法
用刷机命令 如下图:
第二种刷机方法
在所有.img 文件的文件夹里面,打开 cmd直接执行 如下命令,
fastboot flashall -w
就是将所有的.img 文件刷入手机。
刷机完成