03 Android系統之添加自定義模塊

背景介紹

早期的Android系統都是採用Android.mk的配置來編譯源碼,從Android 7.0開始引入Android.bp。很明顯Android.bp的出現就是爲了替換掉Android.mk。html

  • Android 7.0引入ninja和kati
  • Android 8.0使用Android.bp來替換Android.mk,引入Soong
  • Android 9.0強制使用Android.bp

添加模塊

而後開始介紹如何經過Android.bp來引入一個hello world模塊。
一、目錄結構android

./device/mi/pure/hello/
├── Android.bp
└── hello.cpp

0 directories, 2 files

2.hello.cpp文件c++

#include <cstdio>
#include <android/log.h>

#define LOG_TAG "qiushao"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG ,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG ,__VA_ARGS__)

int main() {
    printf("hello qiushao\n");
    LOGD("hello qiushao");
    return 0;
}

三、Android.bp文件git

cc_binary {              //模塊類型爲可執行文件
    name: "hello",       //模塊名hello
    srcs: ["hello.cpp"], //源文件列表
    vendor: true,        //編譯出來放在/vendor目錄下(默認是放在/system目錄下)
    shared_libs: [       //編譯依賴的動態庫
        "liblog",
    ],
}

四、編譯hello模塊shell

hinzer@ubuntu:hello$ mma

五、添加product配置ubuntu

hinzer@ubuntu:pure$ pwd
/home/hinzer/source/android-10/device/mi/pure
hinzer@ubuntu:pure$ echo "PRODUCT_PACKAGES += hello" >> product01.mk

六、整編android系統bash

hinzer@ubuntu:android-10$ source ./build/envsetup.sh
hinzer@ubuntu:android-10$ lunch product01-eng
hinzer@ubuntu:android-10$ make -j4

這是其中一個常見的模塊實例,須要定義其餘類型的模塊時,能夠參考如下文檔soong。或者參考系統已有的 Android.bp 模塊。框架

驗證

hinzer@ubuntu:android-10$ emulator
...
hinzer@ubuntu:~$ adb devices
List of devices attached
emulator-5554	device

hinzer@ubuntu:~$ adb shell hello          # 運行可執行文件hello                                                                                                              
hello qiushao

理論補充

一、模塊編譯輸出分區ide

  • system :主要包含 Android 框架, google 官方實現
    • Android.mk 默認就是輸出到 system 分區,不用指定
    • Android.bp 默認就是輸出到 system 分區,不用指定
  • vendor :SoC芯片商分區(系統級核心廠商,如高通), 爲他們提供一些核心功能和服務,由 soc 實現
    • Android.mk LOCAL_VENDOR_MODULE := true
    • Android.bp vendor: true
  • odm :設備製造商分區(如華爲、小米),爲他們的傳感器或外圍設備提供一些核心功能和服務
    • Android.mk LOCAL_ODM_MODULE := true
    • Android.bp device_specific: true
  • product :產品機型分區
    • Android.mk LOCAL_PRODUCT_MODULE := true
    • Android.bp product_specific

參考資料

相關文章
相關標籤/搜索