知識中心

Android 系統定製開發:AOSP 原始碼編譯、裁剪與預裝全流程解析

本文詳解 AOSP 原始碼下載、編譯加速技巧,系統裁剪方法(移除無用元件、停用服務),以及預裝應用整合與品牌定製流程。透過實戰案例與程式碼示例,助力開發者構建高效能、差異化的 Android 系統,適用於智慧硬體、行業專用裝置等領域。

知識中心 2026-04-17 穩格科技
文章正文知識中心

在物聯網、智慧硬體和行業專用裝置領域,標準 Android 系統往往無法滿足特定需求。透過 AOSP(Android Open Source Project)原始碼定製開發,企業可以打造高度差異化的系統,實現效能最佳化、功能精簡和品牌預裝。本文將詳細介紹從原始碼下載、編譯到裁剪、預裝的完整流程,幫助開發者掌握系統級定製的核心技術。


一、AOSP 原始碼下載與環境搭建

1. 原始碼下載方式

  • 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/)規避網路限制。

2. 編譯環境配置

  • 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 安裝。

3. 編譯命令與最佳化

  • 基礎編譯:

    bashsource build/envsetup.shlunch aosp_arm64-eng  # 選擇目標裝置(如 arm64 架構的工程機)make -j$(nproc)  # 使用全部 CPU 核心加速編譯
  • 增量編譯:修改程式碼後僅重新編譯受影響模組,使用 mma 或 mmm 命令(需先進入模組目錄)。

  • CCache 加速:在 ~/.bashrc 中新增 export USE_CCACHE=1,並設定快取大小(如 export CCACHE_SIZE=50G)。


二、系統裁剪:精簡無用元件

1. 移除預裝 APK

  • 路徑定位:系統應用位於 packages/apps/ 目錄,第三方應用在 vendor/ 或 device/ 目錄。

  • 刪除方式:

    • 直接刪除資料夾(如 rm -rf packages/apps/Email)。

    • 在 device/<vendor>/<device>/device.mk 中移除對應模組:

      makefilePRODUCT_PACKAGES -= Email

2. 停用非必要服務

  • ServiceManager 過濾:修改 system/core/rootdir/init.rc,註釋掉不需要的 service 宣告(如 bluetooth.default)。

  • SELinux 策略調整:在 device/<vendor>/<device>/sepolicy/ 中修改 .te 檔案,允許或禁止服務訪問特定資源。

3. 核心模組裁剪

  • 配置最佳化:透過 make menuconfig 停用未使用的驅動(如 CONFIG_USB_STORAGE=n)。

  • 自動精簡工具:使用 mkconfig 或 defconfig 生成較小化核心配置,減少啟動時間。

4. 裁剪案例:打造輕量級 IoT 系統

  • 移除元件:刪除 SystemUI、Launcher3、Settings 等 GUI 相關模組,保留 adbd、vold 等核心服務。

  • 成果:系統映象從 1.2GB 縮減至 300MB,啟動時間從 15 秒降至 5 秒。


三、預裝應用與定製功能開發

1. 預裝應用整合

  • 系統分割槽預裝:將 APK 放入 vendor/apps/ 目錄,並在 vendor.mk 中宣告:

    makefilePRODUCT_PACKAGES += MyCustomApp
  • 資料分割槽預裝:透過 rootdir/etc/init.rc 在首次啟動時複製 APK 至 /data/app/(需 ro.data.install.enabled=1 支援)。

2. 系統級功能擴充套件

  • 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/ 中的狀態列、通知中心佈局,或新增自定義快捷開關。

3. 品牌元素植入

  • Boot Animation 替換:將 bootanimation.zip 放入 vendor/etc/ 目錄,覆蓋預設動畫。

  • 預設桌布設定:在 frameworks/base/core/res/res/drawable/ 中替換 default_wallpaper.jpg。


四、系統簽名與 OTA 更新

1. 平臺簽名金鑰生成

  • 生成金鑰:

    bashkeytool -genkey -v -keystore platform.keystore -alias platform -keyalg RSA -keysize 2048 -validity 10000
  • 配置簽名:在 build/target/product/security/ 中替換預設金鑰,或透過 PRODUCT_DEFAULT_DEV_CERTIFICATE 指定。

2. OTA 包製作

  • 增量更新:使用 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 描述檔案。

提交專案需求

留下聯絡方式和需求簡述,便於我們判斷技術方向、交付範圍和溝通方式。

線上諮詢
電話諮詢
13910119357
微信諮詢
WhatsApp
穩格科技 WhatsApp 二維碼 掃碼或點選聯絡
回到頂部