在物联网、智能硬件和行业专用设备领域,标准 Android 系统往往无法满足特定需求。通过 AOSP(Android Open Source Project)源码定制开发,企业可以打造高度差异化的系统,实现性能优化、功能精简和品牌预装。本文将详细介绍从源码下载、编译到裁剪、预装的完整流程,帮助开发者掌握系统级定制的核心技术。
Repo 工具同步:通过 Google 官方 repo 工具初始化仓库,支持增量下载特定分支(如 android-14.0.0_r1)。
bashrepo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r1repo sync -c -j8 # -c 仅下载当前分支,-j8 启用 8 线程加速
镜像站加速:使用清华、中科大等开源镜像站(如 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/)规避网络限制。
Ubuntu 22.04 LTS:推荐系统版本,兼容性最佳。
依赖安装:
bashsudo apt update && sudo apt install -y git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
JDK 版本:AOSP 14 需 OpenJDK 17,通过 sudo apt install openjdk-17-jdk 安装。
基础编译:
bashsource build/envsetup.shlunch aosp_arm64-eng # 选择目标设备(如 arm64 架构的工程机)make -j$(nproc) # 使用全部 CPU 核心加速编译
增量编译:修改代码后仅重新编译受影响模块,使用 mma 或 mmm 命令(需先进入模块目录)。
CCache 加速:在 ~/.bashrc 中添加 export USE_CCACHE=1,并设置缓存大小(如 export CCACHE_SIZE=50G)。
路径定位:系统应用位于 packages/apps/ 目录,第三方应用在 vendor/ 或 device/ 目录。
删除方式:
直接删除文件夹(如 rm -rf packages/apps/Email)。
在 device/<vendor>/<device>/device.mk 中移除对应模块:
makefilePRODUCT_PACKAGES -= Email
ServiceManager 过滤:修改 system/core/rootdir/init.rc,注释掉不需要的 service 声明(如 bluetooth.default)。
SELinux 策略调整:在 device/<vendor>/<device>/sepolicy/ 中修改 .te 文件,允许或禁止服务访问特定资源。
配置优化:通过 make menuconfig 禁用未使用的驱动(如 CONFIG_USB_STORAGE=n)。
自动精简工具:使用 mkconfig 或 defconfig 生成最小化内核配置,减少启动时间。
移除组件:删除 SystemUI、Launcher3、Settings 等 GUI 相关模块,保留 adbd、vold 等核心服务。
成果:系统镜像从 1.2GB 缩减至 300MB,启动时间从 15 秒降至 5 秒。
系统分区预装:将 APK 放入 vendor/apps/ 目录,并在 vendor.mk 中声明:
makefilePRODUCT_PACKAGES += MyCustomApp
数据分区预装:通过 rootdir/etc/init.rc 在首次启动时复制 APK 至 /data/app/(需 ro.data.install.enabled=1 支持)。
JNI 开发:通过 native 代码实现硬件交互(如串口通信),示例:
java// Java 层调用public class SerialPort { static { System.loadLibrary("serial_port"); } public native int open(String path, int baudrate);}cpp// JNI 实现JNIEXPORT jint JNICALL Java_com_example_SerialPort_open(JNIEnv *env, jobject thiz, jstring path, jint baudrate) { // 打开串口逻辑}SystemUI 定制:修改 packages/SystemUI/ 中的状态栏、通知中心布局,或添加自定义快捷开关。
Boot Animation 替换:将 bootanimation.zip 放入 vendor/etc/ 目录,覆盖默认动画。
默认壁纸设置:在 frameworks/base/core/res/res/drawable/ 中替换 default_wallpaper.jpg。
生成密钥:
bashkeytool -genkey -v -keystore platform.keystore -alias platform -keyalg RSA -keysize 2048 -validity 10000
配置签名:在 build/target/product/security/ 中替换默认密钥,或通过 PRODUCT_DEFAULT_DEV_CERTIFICATE 指定。
增量更新:使用 otatools 生成差异包(需保留旧版本镜像):
bash./build/tools/releasetools/ota_from_target_files -i old_target_files.zip new_target_files.zip update.zip
完整更新:直接打包 system.img、boot.img 等至 ZIP 文件,并添加 META-INF/com/android/metadata 描述文件。