Aosp编译随笔

644 阅读1分钟

Aosp编译流程

目录
01源码同步
02切换分支
03编译源码
04编译级别
05应用违规
06user 版本下打开 adb 调试
07生成系统证书
08参考文档

1. 源码同步

  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
    
  2. 初始化Repo (清华大学Aosp镜像)

    mkdir ~/aosp
    chmod 777 ~/aosp
    cd ~/aosp
    repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r39
    
  3. 同步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属于违规应用, 所以需要关闭检测

  1. 添加 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. 上面
  2. 添加 DISABLE_ARTIFACT_PATH_REQUIREMENTS := trueBoardConfigCustom.mk 或者 BoardConfig.mk 文件中

回到目录

6. user 版本下打开 adb 调试

  1. 修改aosp/build/core/main.mk文件
注释 ADDITIONAL_SYSTEM_PROPERTIES += ro.adb.secure=1
改为 ADDITIONAL_SYSTEM_PROPERTIES += ro.adb.secure=0
  1. 修改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. 生成系统证书

  1. 删除旧证书

    进入到 <aosp>/build/target/product/security 目录执行rm ./*.p*命令删除所有证书

  2. 生成安卓系统证书

    返回到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 #联系电子邮件地址
    
  3. 验证证书

    进入到 <aosp>/build/target/product/security 目录,执行如下命令:

    openssl x509 -noout -subject -issuer -in media.x509.pem
    
  4. 生成 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
    
  5. 系统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

回到目录