说明
菜鸡尝试编译aosp源码,手中有一台n5x,专门用来折腾。之前刷了fart镜像,好奇制作过程,所以自己来捣鼓一下。原先想用r0env编译,有个依赖过不去(太菜了)还是自己搞个虚拟机吧*。*,把坑又踩了一遍。
编译环境
虚拟机
虚拟机这里选择vmware16 pro,破解版请自行查找
iso
iso这里选择ubuntu20,因为ubuntu的镜像小。试过centos7结果操作过程崩了T。T
镜像下载:
# 镜像md5
ca0c7f1cf362eef25f54f6cd61c5fdba *ubuntu-20.04.4-desktop-amd64.iso
Ubuntu配置如下,内存可开到12G,10G可以编译但还会有卡顿,并且安装过程中请立即分配磁盘,避免后面磁盘大小问题:
编译步骤
- 安装jdk,加入环境
1
2
3
4
5
6
7
|
apt
-
get install openjdk
-
8
-
jdk
vim ~
/
.bashrc
export JAVA_HOME
=
/
usr
/
lib
/
jvm
/
java
-
8
-
openjdk
-
amd64
export PATH
=
$JAVA_HOME
/
bin
:$PATH
source ~
/
.bashrc
|
安装依赖, 提示没有python,就apt install python
1
|
apt
-
get install 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 libgl1
-
mesa
-
dev libxml2
-
utils xsltproc unzip
|
下载 repo 工具
1
2
3
4
5
6
7
8
9
10
|
mkdir ~
/
bin
PATH
=
~
/
bin
:$PATH
curl https:
/
/
aosp.tuna.tsinghua.edu.cn
/
git
-
repo
-
downloads
/
repo > ~
/
bin
/
repo
chmod a
+
x ~
/
bin
/
repo
vim ~
/
.bashrc
在文件末尾加入
export PATH
=
~
/
bin
:$PATH
source ~
/
.bashrc
|
选择磁盘空间大的建立源码下载文件夹,如果磁盘不够请自行扩展磁盘和挂载文件夹
1
2
|
mkdir
-
p data
/
aosp
/
android
-
8.1
.
0_r20
cd data
/
asop
/
android
-
8.1
.
0_r20
|
初始化git,repo;初始化repo中应查询清楚编译出来的镜像是否适配手中的手机
1
2
3
4
5
6
|
git config
-
-
global
user.name
"***"
git config
-
-
global
user.email
"you@example.com"
export REPO_URL
=
'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
repo init
-
u git:
/
/
mirrors.ustc.edu.cn
/
aosp
/
platform
/
manifest
-
b android
-
8.1
.
0_r20
|
下载源码, 过程很长,请耐性等待
1
2
3
|
repo sync
-
j1
repo sync
-
-
current
-
branch
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
fn_repo_sync()
{
repo sync
-
j8
2
>&
1
| tee sync_log.txt
}
fn_get_source_code()
{
echo
"fn_get_source_code:$(pwd)"
fn_repo_sync
FETCH_ERROR
=
`grep
-
i
"error: Exited sync"
-
A
1
sync_log.txt`
echo
"${FETCH_ERROR}"
while
[
-
n
"${FETCH_ERROR}"
]
do
echo
"Need to pull the code again"
fn_repo_sync
FETCH_ERROR
=
`grep
-
i
"error: Exited sync"
-
A
1
sync_log.txt`
done
echo
"leave begin download source"
}
fn_get_source_code
|
下载驱动
下载源码对应版本驱动并解压放入源码根目录:
依次执行刚解压的shell文件(别enter的太急),每个文件执行都需要在最后输入 “I AGREE”,所以谨慎enter(坑人)。
- 下载源码后并执行完成驱动文件后的项目根目录:
make clobber:删除所有以前编译操作的已有输出,如果编译过单项重新编译就执行这条命令
编译
选择设备编译系统:
1
2
3
4
5
6
7
8
9
10
|
source build
/
envsetup.sh
lunch aosp_hammerhead
-
userdebug
export CLASSPATH
=
.:$JAVA_HOME
/
lib:$CLASSPATH
export LC_ALL
=
C
ulimit
-
c unlimited
make
-
j8
|
编译完成
- 编译完成后的镜像在out文件夹下
刷机
配置镜像环境变量
1
|
export ANDROID_PRODUCT_OUT
=
/
root
/
data
/
android
-
8.1
.
0_r20
/
out
/
target
/
product
/
bullhead
|
进入fastboot模式
开始刷机
如果遇到这个错误“error: Cannot generate image for userdata”,请删除 -w执行
刷机结束,等待手机重启
遇见问题
- 在编译步骤中出现错误最多的可能在下载源码和编译过程中
- 下载源码的错误多为源的问题,选择国内源即可
- 编译过程中的错误多为环境和版本的问题。环境依赖需要安装齐全,并且查漏补缺把环境补全;并且手机型号,源码,驱动以及设备编译系统都要一致,不可错乱,以免变砖=。=
- 在刷机中的问题一般比较简单,一般把oem锁打开刷机即可成功,如有问题可自行搜索
小结
这次编译本想周末搞完,没想到搞了一个礼拜(踩坑*N),中间还差点手机变砖T。T到总算编译刷机成功。对于fart镜像将相应的代码替换源码编译应该就可以了(还没试)。关于过root检测等系统级别的操作在 编译步骤-8 之前做出修改再编译也应是同理。在网上也有其他编译的文章,但多多少少都有点出入,写完这篇文章,根据步骤自己是可以编译和刷机成功的,但如果还有出入,需自行甄别实现。(手机变砖概不负责)
加油,少年。。。
相关文章
更多【2022记录一次编译aosp并刷机n5x】相关视频教程:www.yxfzedu.com