Android 系统定制
1. 概述
1.1 功能简介
本文档介绍 M4-R2( RK3576)Android 14 系统的定制方法,涵盖新增 lunch 目标、分区表定制、DTBO 设备树 overlay、特性开关、开机动画/logo 替换、预装应用与系统属性配置等内容,帮助开发者基于 RK3576 进行产品化定制。
1.2 应用场景
- 为量产产品定制独立的产品配置文件
- 调整系统分区大小
- 替换开机 logo、动画、壁纸
- 预装第三方应用
- 配置系统属性与功能开关
1.3 前置条件
- 已完成 Android SDK 编译(详见 Android_SDK编译)
- 已了解 RK3576 平台基础配置
- 具备 Android 构建系统基本知识
2. 新增 lunch 目标
参考说明:lunch 目标通过
device/rockchip/下产品目录定义(以实际 SDK 为准),参考 RK Android 通用做法。
2.1 新建产品目录
参考 Rockchip 通用做法,在 device/rockchip/ 下创建产品配置:
device/rockchip/
├── rk3576/ # RK3576 平台配置
│ ├── rk3576_u/ # 参考产品目录
│ └── rk3576_shimetapi/ # 自定义产品目录(新建)
│ ├── AndroidProducts.mk # 注册 lunch 目标
│ ├── BoardConfig.mk # 板级配置
│ ├── device.mk # 产品 Makefile
│ ├── parameter.txt # 分区表
│ └── ...
└── common/2.2 注册 lunch 目标
在 AndroidProducts.mk 中注册:
# device/rockchip/rk3576/rk3576_shimetapi/AndroidProducts.mk
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/rk3576_shimetapi.mk2.3 新增 lunch 组合
待板上验证:具体 lunch 目标名以 SDK 中
device/rockchip/rk3576/AndroidProducts.mk实际定义为准。
# 重新加载后即可看到新 lunch 目标
source build/envsetup.sh
lunch
# 选择 rk3576_shimetapi-userdebug3. 分区表定制
3.1 parameter 分区表
参考说明:RK 平台分区表由
parameter.txt定义,Android 14 使用 super 动态分区(以实际 SDK 为准)。
# parameter.txt(示例,具体以 SDK 为准)
FIRMWARE_VER: 14.0
MACHINE_MODEL: rk3576_shimetapi
MACHINE_ID: 007
MANUFACTURER: rockchip
CMDLINE: mtdparts=rk29xxnand:
0x00002000@0x00002000(uboot),
0x00002000@0x00004000(misc),
0x00010000@0x00006000(boot),
0x00002000@0x00016000(init_boot),
0x00002000@0x00018000(vendor_boot),
0x00001000@0x0001A000(dtbo),
0x00001000@0x0001B000(vbmeta),
0x00400000@0x0001C000(super),
0x00080000@0x0041C000(userdata)3.2 修改分区大小
- 修改
parameter.txt中各分区大小(以 sector 为单位) - 修改
BoardConfig.mk中对应的BOARD_*_PARTITION_SIZE - super 分区大小需与
BOARD_SUPER_PARTITION_SIZE一致
待板上验证:M4-R2 实际分区布局以 SDK 提供的 parameter 文件为准。
4. DTBO 设备树 overlay
参考说明:RK Android 通过 DTBO 设备树 overlay 实现板级差异配置(以实际 SDK 为准)。
4.1 DTBO 文件结构
dt-overlay.in/
├── rk3576-evb1.dtsi # 通用板级配置
├── rk3576_shimetapi.dts # 自定义板型配置(新建)
└── Makefile # 编译配置4.2 编译 DTBO
# 编译设备树及相关 overlay
./build.sh -K
# 产物:rockdev/Image-rk3576_u/dtbo.img5. 特性开关
参考说明:RK3576 平台特性通过
BoardConfig.mk/device.mk中的开关控制,具体开关名以实际 SDK 为准。
| 开关 | 说明 |
|---|---|
BOARD_BUILD_GKI | 是否启用 GKI(Generic Kernel Image) |
DEVICE_IS_64BIT_ONLY | 64 位仅系统 |
BOARD_HS_ETHERNET | 高速以太网(千兆 GMAC) |
BOARD_SELINUX_ENFORCING | SELinux 强制模式 |
BOARD_HDMI_IN_SUPPORT | HDMI 输入支持 |
PRODUCT_BOOT_ANIMATION | 开机动画 |
注意:M4-R2 支持双千兆 GMAC、HDMI 输出/输入等,具体开关配置以 SDK 中对应平台配置为准。
6. 开机动画与 logo
6.1 开机动画替换
参考说明:开机动画为
bootanimation.zip,包含desc.txt与逐帧图片(以实际 SDK 为准)。
# 替换系统开机动画
adb push bootanimation.zip /system/media/bootanimation.zip
adb reboot6.2 开机 logo 替换
# 编译前替换 SDK 中 logo 图片(路径以 SDK 为准)
# 重新打包 resource/boot 分区
./build.sh -K -A -p6.3 桌面壁纸替换
参考说明:通过编译配置或 adb 设置替换(以实际 SDK 为准)。
# 临时替换壁纸
adb shell settings put system wallpaper 设置资源路径7. 预装应用
7.1 使用 PRODUCT_PACKAGES
参考说明:通过
PRODUCT_PACKAGES预装系统应用(以实际 SDK 为准)。
# device.mk 中
PRODUCT_PACKAGES += \
MyPreinstallApp \
HelloWorld7.2 放入系统 apk 目录
对于不参与编译的 APK,可直接放入系统目录:
vendor/rockchip/common/apps/MyApp/MyApp.apk重新编译或直接 push:
adb push MyApp.apk /system/app/MyApp.apk
adb shell chmod 644 /system/app/MyApp.apk
adb reboot8. 系统属性配置
8.1 build.prop 属性
参考说明:通过
PRODUCT_PROPERTY_OVERRIDES添加系统属性(以实际 SDK 为准)。
PRODUCT_PROPERTY_OVERRIDES += \
ro.product.model=M4-R2 \
ro.product.brand=ShimetaPi \
ro.sf.lcd_density=1608.2 运行时设置属性
# 临时属性(重启失效)
adb shell setprop debug.hwui.renderer opengl
# 持久属性
adb shell setprop persist.sys.xxx 19. 常见问题
9.1 新增 lunch 目标不显示
解决方案:
- 确认
AndroidProducts.mk路径与内容正确 - 重新执行
source build/envsetup.sh && lunch - 确认产品目录在
device/rockchip/下
9.2 分区大小修改后烧录失败
解决方案:
- 确认 parameter.txt 与 BoardConfig.mk 分区大小一致
- 修改后需重新打包并全量烧录
- 确认 super 分区包含所有动态分区
9.3 预装应用开机后消失
解决方案:
- 确认设备树/产品配置正确加载
- 使用
adb shell dumpsys package检查应用安装状态 - 确认 APK 已签名且与系统兼容
10. 相关文档
- Android_SDK编译 — 编译流程
- Android构建系统与增量编译 — 构建系统
- Android HAL开发 — HAL 与驱动
- 核心板参数 — 硬件事实基线
