本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
前言
环境搭建等内容网上资料很多,这里不再赘述。
此处以 Pixel 3a & Android 11 为例介绍如何编译 ROM 包并烧录
手上没有真机的小伙伴可以选择制作模拟器,本文最后提供了基于 Android 11 编译的自定义 AVD 下载链接
编译环境
下载源码
这里推荐使用 清华镜像
下载 每月更新的初始化包 并解压(可以使用迅雷等工具下载再 copy 到服务器中)
下载驱动(可选)
如果要刷到真机上,需要下载相应机型的驱动,进入 该链接,选择相应的机型对应的 Android 版本号和驱动
我这里选择的是 Android 11.0.0(RP1A.201105.002)
在 Android 8.0.0 (Oreo) 及更高版本中,每个 build 均采用 build ID 格式 PVBB.YYMMDD.bbb[.Cn] 进行标识,其中:
- P 表示平台版本代号的第一个字母,例如 R 表示 Android 11。
- V 表示支持的行业。按照惯例,P 表示主要平台分支。
- BB 是由字母和数字组成的代码,Google 可通过该代码识别 build 所属的确切代码分支。
- YYMMDD 表示相应版本从开发分支细分出来或与开发分支同步的日期。它并不一定是 build 的确切构建日期,因为 Google 常常会在现有 build 中增加细微的更改,并在新 build 中重复使用与现有 build 相同的日期代码。
- bbb 表示具有相同日期代码的不同版本,从 001 开始。
- Cn 是可选的字母数字,表示在现有 PVBB.YYMMDD.bbb build 之上构建的修补程序,从 A1 开始。
将两个驱动文件下载并解压,并执行
./extract-qcom-sargo.sh
./extract-google_devices-sargo.sh
点击 Enter 并输入 I ACCEPT 同意 License
根据 Build 在 该链接 中找到相匹配的分支,本例中对应 android-11.0.0_r17
选择分支
执行完上述操作如果直接编译的话实际上是编译的 master 分支,我们还需要切换到想要编译的分支
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-11.0.0_r17 --depth=1
repo sync -j8
repo start android-11.0.0_r17 --all
编译与烧写
在源码目录执行
source build/envsetup.sh
lunch 进入菜单
选择相应的版本
我这里选择的是 19
编译
接着便可以进行编译了,可以使用 make -j 命令,其中 j 代表的是编译 job 的数量
执行(我这里指定了生成 log 文件)
make -j32 2>&1 | tee build_20200628_1635.log
编译成功后会出现一个 out 目录,ROM 镜像文件就在此处
例如我的路径为:~/aosp/out/target/product/sargo
烧写
设备进入 bootloader 并执行:fastboot flashall -w,其中 -w 代表清空数据
烧写成功,开机!
制作自定义 AVD(Android Virtual Devices) 系统镜像
很多小伙伴没有相应的真机,不过可以制作出自定义的 AVD 作为模拟器使用。
lunch 进入菜单时选择相应的模拟器,例如选择上图的 24,64 位的通用设备
想要制作 AVD 系统镜像需要制作附加 sdk 和 sdk_repo 软件包
执行
$ make -j32 sdk sdk_repo
该操作可能会出现异常,例如
这是由于没有编译这些工具导致的,解决办法是依次编译这些工具
依次输入如下命令,后面工具视情况而定
$ make libaapt2_jni
$ make dmtracedump
$ make etc1tool
$ make deployagent
$ make aapt
$ make split-select
$ make bcc_compat
$ make apksigner
$ make dx
$ make layoutlib-legacy
编译好相关工具我们再次执行 make -j32 sdk sdk_repo
编译成功后会在 out/host/linux-x86/sdk/aosp_x86_64 目录下生成 sdk-repo-linux-system-images-eng.[username].zip 文件
按照官方文档中使用镜像的方式我没有成功
这里我使用了一个取巧的方式
我们在 Android Studio 创建 AVD 时可选的镜像一般有三种,这里以 Android 10 为例
Google Play,Google APIs,和默认的
它们会下载到 SDK/system-images/android-29 中
Google APIs 版本对应的目录就是 google_apis
我们可以将我们编译出的 AVD 镜像 copy 到其中的一个目录
例如,我将自定义的 AVD 镜像放置在了这里:
我们在创建模拟器时选择自定义的 AVD 镜像即可创建出自己编译 ROM 的模拟器
这里提供了我编译出来的自定义 AVD,不方便自己编译的小伙伴可以在此处下载
链接:pan.baidu.com/s/1LIcuycoU… 提取码:CAVD
关于我
人总是喜欢做能够获得正反馈(成就感)的事情,如果感觉本文内容对你有帮助的话,麻烦点亮一下👍,这对我很重要哦~
我是 Flywith24,人只有通过和别人的讨论,才能知道我们自己的经验是否是真实的,加我微信交流,让我们共同进步。
关注公众号,点击底部 联系我 -> 知识星球 加入免费的知识星球