Android系統固件定製方式

Android系統固件定製方式

一般情況下,一款基於Android的設備,會根據需求定製系統APP,定製的規格往往需要依據設備的具體應用場景。比如,面向通信的設備,那麼需要預裝phone、tablets、browser、TeleCom等APP或者服務;而面向可穿戴的設備,那麼一般需要bluetooth等APP;
那麼,如何根據系統的要求對於系統APP或者系統服務進行定製呢?其實,Android的構建系統已經對相關的需求進行了相應的配置。其對於不同需求的設備提供了相應的基礎配置文件,廠商可以自行定製這些基礎配置文件,然後,通過這些配置文件,構建系統就可以生成適應於該設備的Android固件了。

產品構建框架

Android系統構建框架基於特定的make構建系統,該系統的配置文件一般後綴爲.mk。Android系統擴展了Makefile的功能,增加很多構建過程中使用的函數、變量等。所以,如果想要增加新的產品,那麼就需要提供一些.mk文件,用於控制具體的產品構建過程。下面具體瞭解一下幾個比較重要的配置文件。

target_product.mk

Android系統在構建關於某種產品的固件時,一般會根據特定於該產品的具體target_product.mk來配置生成整個Android系統。
/target_product.mk配置文件位於:/path_to_android/device/vendor/目錄下,其中path_to_android表示Android系統的根目錄;vendor爲具體的廠商名稱,例如,htc、moto、softwinner等。

target_product.mk的基本結構如下:

  • 基本配置信息:

      Android系統基本產品配置信息
      特定廠商平臺公共的配置信息
    
  • 特定產品配置信息:

      包括特定於某一個產品的配置信息
    

target_product.mk提供的能力

target_product.mk通過一系列的函數、變量來控制系統的構建過程,主要的變量和函數如下:

  • PRODUCT_PACKAGES:產品中包括的系統級APP,比如Launcher。

  • PRODUCT_COPY_FILES:需要拷貝到產品中的文件,格式:src_file:dst_file,其中,src_file、dst_file都爲相對路徑,例如:

    device/softwinner/t3-p1/etc/apns-conf.xml:system/etc/apns-conf.xml,表示將apns-conf.xml拷貝到目標系統system/etc目錄下。

  • PRODUCT_PROPERTY_OVERRIDES:覆蓋build.prop中的系統屬性信息。例如:

    persist.sys.timezone=Asia/Shanghai配置系統的時區信息。

  • inherit-product:用於調用上級.mk配置信息,例如:

    $(call inherit-product, build/target/product/full_base.mk),通過inherit-product,解析full_base.mk中的配置信息。

vendorsetup.sh

特定於某款具體的產品,一般會編寫一個target_product.mk文件用於控制Android系統的具體構成,然後,編寫vendorsetup.sh用於定義產品的型號。 一般會編寫兩條型號信息:eng、user。eng用於編譯出debug版本的系統,user用於編譯release版本的系統。例如:

add_lunch_combo t3_p1-eng
add_lunch_combo t3_p1-user

系統構建過程

Android系統的構建過程一般分爲以下幾個:
(1)配置環境變量->(2)選定產品型號->(3)編譯->(4)打包。

  • 配置環境變量: 通過如下命令:source build/envsetup.sh設置Android編譯時所需要的環境信息。其中,該腳本會掃描device目錄下的所有文件,並執行執行所有的vendorsetup.sh腳本。這樣,第2步,就可以看到所有的產品型號信息了。

  • 選定產品型號:選定符合需求的產品型號,一般產品型號都是自定義的。

  • 編譯:Android系統編譯:包括,BootLoader、kernel、rootfs、system.img等。

  • 打包:將編譯階段生成的各個編譯產物打包成一個鏡像文件,以備系統燒錄。

產品定製

對於具體的產品,我們可以進行哪些定製工作?具體定製該如何開展呢?下面以基於全志T3平臺的Android 6.0固件定製操作爲例。
T3平臺使用的Android6.0系統,該平臺相關的產品配置信息位於:device/sofewinner/下:

common  t3-common  t3-p1  t3-p1_v1

其中,common包括了全志平臺下一些通用的工具,例如pack、extract-bsp等;t3-common包括了t3處理器平臺下的一些通用配置。
t3-p1、t3-p1_v1表示兩種產品型號。

下面舉一個替換系統默認輸入法的示例。

Android系統提供的默認輸入法不是很好用,所以需要將系統默認輸入法替換爲Sogou輸入法。替換步驟如下:

  1. 找到系統輸入法對應的安裝位置:系統輸入法屬於Android系統級服務,其安裝位置一般位於:build/target/product中,系統輸入法的APP名稱爲:LatinIME。通過grep -nr LatinIME,可以找到關於LatinIME相關的配置信息,把這些配置信息註釋掉。

  2. 將Sogou.apk放到t3-p1的apk目錄下,然後再t3-p1.mk中增加一條配置信息:

    PRODUCT_COPY_FILES +=
    device/softwinner/t3-p1/apk/sogou.apk:system/preinstall/sogou.apk

  3. 配置硬件鍵盤、Settings中關於輸入法的配置信息:

    settings put secure show_ime_with_hard_keyboard 1
    settings put secure enabled_input_methods com.sohu.inputmethod.sogou/.SogouIME

可以將上述信息編寫成一個腳本,保證系統啓動時,執行就可以了。至此,系統的默認輸入法就替換爲了Sogou輸入法。

類似的,可以將系統中不需要的APP,例如Music、Camera、Browser、Recorder進行裁剪。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章