RK3588 编译 Android 13 镜像方法

下载Android SDK源代码
# 下载完成后,在解压前先校验下MD5码:
$ md5sum -c android*.txt
android*_rk35xx_*_sdk.tar.gzaa: OK
android*_rk35xx_*_sdk.tar.gzab: OK
android*_rk35xx_*_sdk.tar.gzac: OK
android*_rk35xx_*_sdk.tar.gzad: OK
android*_rk35xx_*_sdk.tar.gzae: OK
android*_rk35xx_*_sdk.tar.gzaf: OK
android*_rk35xx_*_sdk.tar.gzag: OK
android*_rk35xx_*_sdk.tar.gzah: OK

# 解压Android源码
$ cat *.tar.gz* | tar -xzv

#进入Android SDK根目录
$ cd android*

#执行脚本安装依赖
$./install_dependencies.sh 并输入密码即可开始自动安装依赖。

# 切换python2以保证u-boot编译通过
sudo ln -sf /usr/bin/python2 /usr/bin/python

编译SDK自带的板型

# 执行设置环境变量:
source build/envsetup.sh

# 列出配置菜单
lunch
.............................................................
请注意:使用一键编译命令之前需要设置环境变量,选择好自己需要编译的平台
.............................................................
 61. rk3588s_lubancat_4_hdmi-user
 62. rk3588s_lubancat_4_hdmi-userdebug              HDMI接口
 63. rk3588s_lubancat_4_hdmi_tv-user
 64. rk3588s_lubancat_4_hdmi_tv-userdebug           HDMI Android12 TV版
 65. rk3588s_lubancat_4_mipi1080p-user
 66. rk3588s_lubancat_4_mipi1080p-userdebug         野火5.5寸屏幕
 67. rk3588s_lubancat_4_mipi600p-user
 68. rk3588s_lubancat_4_mipi600p-userdebug          野火7寸屏幕
 69. rk3588s_lubancat_4_mipi800p-user
 70. rk3588s_lubancat_4_mipi800p-userdebug          野火10.1寸屏幕

# 选择数字: 62
  • build.sh 一键编译

  • # -J16后面数字表示16个线程数,如果遇到编译报错或者内存不足可降低线程数
    ./build.sh -UKAu -J16
    
  • 生成的固件位于rockdev/Image-rk3568_lubancat_2_hdmi目录下:

  • ~/android11/rockdev/Image-rk3568_lubancat_2_hdmi$ ll
    total 3622700
    drwxrwxr-x 2 d d       4096 Sep  8 07:34 ./
    drwxrwxr-x 5 d d       4096 Sep 13 02:50 ../
    -rwxrwxr-x 1 d d    1048576 Aug  1 10:14 baseparameter.img*
    -rw-rw-r-- 1 d d   35432448 Sep  8 07:27 boot-debug.img
    -rw-rw-r-- 1 d d   35284992 Sep  8 07:26 boot.img
    -rwxrwxr-x 1 d d       6129 Aug  1 10:14 config.cfg*
    -rw-rw-r-- 1 d d        623 Sep  8 07:26 dtbo.img
    -rw-rw-r-- 1 d d     465344 Sep  8 05:42 MiniLoaderAll.bin
    -rw-rw-r-- 1 d d      49152 Aug  1 11:10 misc.img
    -rw-rw-r-- 1 d d        630 Sep  8 07:26 parameter.txt
    -rw-rw-r-- 1 d d      49152 Aug  1 11:10 pcba_small_misc.img
    -rw-rw-r-- 1 d d      49153 Aug  1 11:10 pcba_whole_misc.img
    -rw-rw-r-- 1 d d  127311872 Sep  8 07:27 recovery.img
    -rw-rw-r-- 1 d d    2636288 Sep  8 07:25 resource.img
    -rw-r--r-- 1 d d 1667579532 Sep  8 07:30 super.img
    -rw-rw-r-- 1 d d    4194304 Sep  8 05:42 uboot.img
    -rw-rw-r-- 1 d d 1836413514 Sep  8 07:34 update.img   <----这就是打包完成的Android镜像
    -rwxrwxr-x 1 d d       4096 Aug  1 10:14 vbmeta.img
    
  • 可使用./build.sh单独编译:

  • # 编译U-boot
    ./build.sh -U
    
    # 编译 Kernel
    ./build.sh -K
    
    # 编译Android
    ./build.sh -A
    
    # 镜像打包
    ./build.sh -u
    
    # 线程数
    ./build.sh -J
    
    # 打包update.zip升级包
    ./build.sh -Auo
  • # 执行设置环境变量:
    source build/envsetup.sh
    
    #清理建构
    make clean
    
    # 列出配置菜单
    lunch
    .............................................................
    请注意:使用一键编译命令之前需要设置环境变量,选择好自己需要编译的平台
    .............................................................
     63. rk3588s_lubancat_4_hdmi_tv-user
     64. rk3588s_lubancat_4_hdmi_tv-userdebug           HDMI Android12 TV版
    
    # 选择数字: 63
    
  • build.sh 一键编译

  • ./build.sh -UKAu -J16
    

    了解./build.sh菜单

    dev@dev/rk356x-lubancat-android1x$./build.sh: option requires an argument --
    USAGE: [-U] [-CK] [-A] [-p] [-o] [-u] [-v VERSION_NAME]
    No ARGS means use default build option
    WHERE: -U = build uboot
       -C = build kernel with Clang
       -K = build kernel
       -A = build android
       -p = will build packaging in IMAGE
       -o = build OTA package
       -u = build update.img
       -v = build android with 'user' or 'userdebug'
       -d = huild kernel dts name
       -V = build version
       -J = build jobs
    
    - 编译kernel             ./build.sh -K
    - 编译uboot              ./build.sh -U
    - 编译android            ./build.sh -A
    - 编译kernel with Clang  ./build.sh -C
    - 打包固件               ./build.sh -u
  • 预置第三方apk

    预置不可卸载、可卸载的apk

  • 首先进入指定目录:device/rockchip/rk356x/rk3568_lubancat_2_hdmi

  • # 创建存放不可卸载应用的文件夹
    mkdir preinstall
    
    # 创建存放可卸载应用的文件夹
    mkdir preinstall_del_forever
    
    # 创建存放卸载后可通过恢复出厂设置复原的应用的文件夹
    mkdir preinstall_del
    
    将APK文件放入对应目录的示例:
    
    # 将一个APK放入不可卸载目录
    cp /path/to/your_app.apk ./preinstall/
    
    # 将一个APK放入可卸载目录
    cp /path/to/your_app2.apk ./preinstall_del_forever/
    
    # 将一个APK放入可卸载但可恢复目录
    cp /path/to/your_app3.apk ./preinstall_del/
    
    注意事项:确保路径 device/rockchip/rk356x/rk3568_lubancat_2_hdmi 存在,替换 /path/to/your_app.apk 为您实际的APK文件路径
    
  • APK文件名建议:

  • 使用英文命名
    避免使用中文字符
    建议使用小写字母和下划线
    示例:myapp_v1.0.apk
    

    根据需求只需将 apk 放在对应文件夹即可,比如将 lubancat.apk 设置为不可卸载应用,那么需要放进preinstall文件夹中。编译镜像烧写进去会发现已预置apk。

  • 制作OTA升级包

    构建完整更新

  • 先编译0.0.2版本修改device/rockchip/rk3588/device.mk,找到ro.product.version = 0.0.1 改为 0.0.2

  • 构安卓12的时候,带o,./build.sh -Auo 是打包update ota升级版,形成文件名是rk3588s_lubancat_4_v1_hdmi-ota-eng.dev.zip
    编译完成后,会在rockdev/Image-rk3588_lubancat_4_hdmi/目录下生成所需镜像,如下所示:
    dev@dev:~/android/android12-dev/rockdev/Image-rk3588s_lubancat_4_v1_hdmi$ ll
    ........
    -rw-rw-r-- 1 dev dev  725114113 Oct 18 07:54 rk3588s_lubancat_4_v1_hdmi-ota-eng.dev.zip
    -rw-rw-r-- 1 dev dev 2011523312 Oct 18 07:54 rk3588s_lubancat_4_v1_hdmi-target_files-eng.dev.zip
    .......
    
    将 rk3588s_lubancat_4_v1_hdmi-ota-eng.dev.zip 重命名为 ota-update.zip 完整升级包。
    mv ./rockdev/Image-rk3588s_lubancat_4_v1_hdmi/rk3588s_lubancat_4_v1_hdmi-ota-eng.dev.zip ./ota-update.zip
    
    rk3588s_lubancat_4_v1_hdmi-target_files-eng.dev.zip的0.0.2版本作为基础素材包,重命名为0.0.2.zip备份下来,用来制作增量升级包会用到。
    mv ./rockdev/Image-rk3588s_lubancat_4_v1_hdmi/rk3588s_lubancat_4_v1_hdmi-target_files-eng.dev.zip ./0.0.2.zip
    

    再次编译0.0.3

  • 接着修改device/rockchip/rk3588/device.mk,找到ro.product.version = 0.0.2 改为 0.0.3

  • ./build.sh -UCKAuo
    
    编译完成后,会在rockdev/Image-rk3588_lubancat_4_hdmi/目录下生成所需镜像,如下所示:
    dev@dev:~/android/android12-dev/rockdev/Image-rk3588s_lubancat_4_v1_hdmi$ ll
    ........
    -rw-rw-r-- 1 dev dev  725114113 Oct 18 07:54 rk3588s_lubancat_4_v1_hdmi-ota-eng.dev.zip
    -rw-rw-r-- 1 dev dev 2011523312 Oct 18 07:54 rk3588s_lubancat_4_v1_hdmi-target_files-eng.dev.zip
    .......
    
    将rk3588s_lubancat_4_v1_hdmi-target_files-eng.dev.zip 重命名 为0.0.3.zip
    mv ./rockdev/Image-rk3588s_lubancat_4_v1_hdmi/rk3588s_lubancat_4_v1_hdmi-target_files-eng.dev.zip ./0.0.3.zip
    

    将上面0.0.2.zip和0.0.3.zip进行备份保存

    构建增量更新

    执行下面代码将制作OTA增量包
    ota_from_target_files --block -v -i 0.0.2.zip -p out/host/linux-x86 -k build/target/product/security/testkey 0.0.3.zip files-update.zip
    会形成files-update.zip增量升级包在当前目录。
    
    这个命令是使用Ota(Over-the-air)工具从目标文件中读取数据,用于OTA更新。
    下面分解每个选项:
    -block: 使用block模式进行OTA read。
    -v: 增加 verbosity,显示更多详细信息。
    -i : 指定要从哪个 zip 压缩包中读取数据,这里是指 0.0.2.zip。
    -p : 指定输出 directory,用于存储从目标文件中读取的数据。这里是 out/host/linux-x86。
    -k : 指定密钥文件,用于加密或解密读取的数据。这里是 build/target/product/security/testkey。
    这个命令会从 0.0.2.zip 和 0.0.3.zip 中读取数据,并将其存储在 out/host/linux-x86目录中,使用 testkey 密钥进行加密或解密。

你可能感兴趣的:(RK35XX学习,android,linux)