阅读 760

【折腾Framework】开篇:源码编译与烧写

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

前言

环境搭建等内容网上资料很多,这里不再赘述。

此处以 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

RP1A.201105.002 对应的分支

选择分支

执行完上述操作如果直接编译的话实际上是编译的 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 系统镜像需要制作附加 sdksdk_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人只有通过和别人的讨论,才能知道我们自己的经验是否是真实的,加我微信交流,让我们共同进步。

关注公众号,点击底部 联系我 -> 知识星球 加入免费的知识星球

文章分类
Android
文章标签