准备工作:
- Nexus 6P真机
- Linux系统(建议使用Ubuntu)
这里需要注意的是不要用window子系统,因为编译andorid需要区分大小的文件系统,而window是不区分大小写的 - 科学上网工具
- 至少300G的硬盘空间
- docker(找了好久也没找到openjdk7,但是docker环境我看了下是有的)
1. 安装git
apt-get install git
git config --global user.name "Your Name"
git config --global user.email "Your [email protected]"
2. 下载Android6.0源码
首先下载 repo 工具。
参考链接:
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
https://lug.ustc.edu.cn/wiki/mirrors/help/aosp/
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
## curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo
然后建立一个工作目录(名字任意)
mkdir android-6.0.1_r62
cd android-6.0.1_r62
指定Android 版本初始化仓库Android 版本列表:
之前有试过android-6.0.0_r11版本,一直卡在开机页面,换了版本就好了
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-6.0.1_r62
## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
新建脚本开始同步(防止出现网络异常可以自动重试)
vim down.sh
输入以下内容保存并退出
#!/bin/bash
PATH=/home/zhd/bin:$PATH # /home/zhd/bin为~/bin对应的绝对路径
echo $PATH
repo sync -j4
while [ $? = 1 ]; do
echo “======sync failed, re-sync again======”
sleep 3
repo sync -j4
done
运行同步脚本,等待一个晚上就好了
sudo ./down.sh
3. 编译Android源码
安装docker
参考:
https://www.runoob.com/docker/ubuntu-docker-install.html
官方教程地址太卡,可以使用上面的链接步骤进行安装
下载openjdk7镜像
由于网上找了很久也没找到openjdk7安装的方法,很多下载链接都已经实效了,所以这里就采用docker的openjdk7镜像进行anroid源码的编译
openjdk镜像链接:
https://registry.hub.docker.com/_/openjdk
选择Oldest进行排序
找到7u111版本(其他版本没去试过)
拉取镜像
docker pull openjdk:7u111
运行镜像
sudo docker run -dit -v /home/zhd/aosp:/tmp/aosp 5dc48a6b75af /bin/bash
将下载好的源码目录挂载到容器tmp/aosp目录中,并以交互模式并后台运行
安装编译的需要的扩展
安装vim
apt-get update
apt-get install vim
安装https支持
apt-get install -y apt-transport-https
update-ca-certificates -f
apt-get install --reinstall ca-certificates
修改源,提高下载速度
先备份
cp /etc/apt/sources.list /etc/apt/sources.list.bak
选择适合的源
https://mirrors.tuna.tsinghua.edu.cn/help/debian/
查看linux版本
cat /etc/issue
修改源
vim /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ jessie main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ jessie main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ jessie-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ jessie-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security jessie/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security jessie/updates main contrib non-free
更新软件版本信息
apt-get update
如果报证书错误
可以用以下命令解决
touch /etc/apt/apt.conf.d/99verify-peer.conf && echo >>/etc/apt/apt.conf.d/99verify-peer.conf "Acquire { https::Verify-Peer false }"
安装扩展(可能有些扩展会安装失败,可忽略,命令一行一行复制执行)
apt-get install rsync
apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
apt-get install git-core gnupg flex bison gperf build-essential
apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
apt-get install libc6-dev-i386
apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
apt-get install lib32z-dev ccache
apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
设置环境变量
export USER=$(whoami)
导入编译Android源码所需的环境变量和其它参数:
source build/envsetup.sh
为了提高编译效率,设置编译器高速缓存:
prebuilts/misc/linux-x86/ccache/ccache -M 50G
运行lunch命令选择编译目标:
lunch
aosp_angler-userdebug ,解释一下,angler是nexus 6p的代号(code name),每个设备对应的代号如下:
userdebug 是编译类型,含义如下:
这里选择aosp_angler-userdebug选项
开始编译
make -j8
等待完成就行了
4. 刷机
退出docker容器
进入bootloader或同时按住音量-和电源键直到进入bootloader
adb reboot bootloader
新建文件夹
~/nexus6p
cd
mkdir nexus6p
cd nexus6p
下载工厂镜像
https://developers.google.com/android/images#angler
将下载好的工厂镜像进行解压,进入目录
cd ~/nexus6p/angler-mtc20f-factory-4355fe06/angler-mtc20f
./flash-all.sh
进入源码编译好的目录
cd ~/aosp/android-6.0.1_r62_MTC20F/out/target/product/angler
fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash system system.img
fastboot flash userdata userdata.img
fastboot flash cache cache.img
fastboot reboot
开机可能会出现
点ok就行不用管
文章参考:https://blog.csdn.net/chen1234219/article/details/90342071