Aosp编译流程
| 目录 | |
|---|---|
| 01 | 源码同步 |
| 02 | 切换分支 |
| 03 | 编译源码 |
| 04 | 编译级别 |
| 05 | 应用违规 |
| 06 | user 版本下打开 adb 调试 |
| 07 | 生成系统证书 |
| 08 | 参考文档 |
1. 源码同步
-
安装Repo
mkdir ~/bin curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo chmod a+x ~/bin/repo export PATH=~/bin:$PATH -
初始化Repo (清华大学Aosp镜像)
mkdir ~/aosp chmod 777 ~/aosp cd ~/aosp repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r39 -
同步Aosp(-j为同时编译线程, 不带-j为自适应线程数)
repo sync -j 4
2. 切换分支
git branch -a | cut -d / -f 3
-
切换整个project 每个仓库的分支
- 方法1
# 只能在第一次拉完代码后使用, 后面用这个切换分支会有各种冲突 repo forall -c git checkout branchname- 方法2
# 删除所有的本地检出文件, 在源码根目录执行, 即android-<version>目录下 rm -rfv * # 重新init目标分支 repo init -b android-13.0.0_r39 # sync同步代码 repo sync
3. 编译安卓源码
cd ~/<aosp>
source build/envsetup.sh
lunch <机型>
# 开始编译
m -j12
# 编译完之后将手机切换到Bootloader或者Fastboot模式下
adb reboot bootloader | adb reboot fastboot
# 刷入系统(带上 -w 擦除数据)
fastboot flashall -w
4. 编译级别
| 编译级别 | 拥有权限 |
|---|---|
| user | 权限受限;适用于生产环境 |
| userdebug | 与“user”类似,但具有 root 权限和调试功能;是进行调试时的首选编译类型 |
| eng | 具有额外调试工具的开发配置 |
5. 应用违规
问题描述: error: build/make/core/artifact_path_requirements.mk:30, 该问题是编译规则检测, 添加的App属于违规应用, 所以需要关闭检测
- 添加
export DISABLE_ARTIFACT_PATH_REQUIREMENTS="true"到build/envsetup.sh文件中的# The gcc toolchain does not exists for windows/cygwin. In this case, do not reference it.上面 - 添加
DISABLE_ARTIFACT_PATH_REQUIREMENTS := true到BoardConfigCustom.mk或者BoardConfig.mk文件中
6. user 版本下打开 adb 调试
- 修改aosp/build/core/main.mk文件
注释 ADDITIONAL_SYSTEM_PROPERTIES += ro.adb.secure=1
改为 ADDITIONAL_SYSTEM_PROPERTIES += ro.adb.secure=0
- 修改aosp/build/core/main.mk文件
注释 ADDITIONAL_SYSTEM_PROPERTIES += ro.debuggable=0
修改 ADDITIONAL_SYSTEM_PROPERTIES += ro.debuggable=1
3. 修改aosp/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java文件
注释 boolean connected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false);
改为 boolean connected = false;
7. 生成系统证书
-
删除旧证书
进入到
<aosp>/build/target/product/security目录执行rm ./*.p*命令删除所有证书 -
生成安卓系统证书
返回到AOSP的根目录,使用
make_key脚本去生成4个签名key./development/tools/make_key build/target/product/security/shared '/C=CN/ST=ShenZhen/L=ShenZhen/O=xch/OU=xch/CN=www.xch.com/emailAddress=xch@xch.com'由于需要生成4个, 所以可以创建脚本生成:
subject='/C=CN/ST=ShenZhen/L=ShenZhen/O=xch/OU=xch/CN=www.xch.com/emailAddress=xch@xch.com' for x in testkey releasekey platform shared media cts_uicc_2021 verity; do ./development/tools/make_key build/target/product/security/$x "$subject"; done其中脚本中的属性:
C —> Country Name (2 letter code) #国家名称(2 个字母代码) ST —> State or Province Name (full name) #州或省名称(全名) L —> Locality Name (eg, city) #地区名称(例如,城市) O —> Organization Name (eg, company) #组织名称(例如,公司) OU —> Organizational Unit Name (eg, section) #组织单位名称(例如,部分) CN —> Common Name (eg, your name or your server’s hostname) #通用名称(例如,您的姓名或服务器的主机名) emailAddress —> Contact email address #联系电子邮件地址 -
验证证书
进入到
<aosp>/build/target/product/security目录,执行如下命令:openssl x509 -noout -subject -issuer -in media.x509.pem -
生成 generate_verity_key, 运行以下命令:
cd \<aosp> source build/envsetup.sh make generate\_verity\_key out/host/linux-x86/bin/generate\_verity\_key -convert build/target/product/security/verity.x509.pem verity\_key -
系统key文件生成keystore
生成platform.pem文件
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem生成platform.p12文件,设置对应的密码 password 和别名 alias ;
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:<xchnfctag> -name <xch>生成platform.keystore
keytool -importkeystore -deststorepass 密码 -destkeystore ./platform.keystore -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 密码
8. 参考文档
驱动二进制文件
代号、标记和 build 号
Google Web 刷机工具
设备Build