在物聯網、智慧硬體和行業專用裝置領域,標準 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描述檔案。
線上諮詢
電話諮詢
微信諮詢
回到頂部