天天看點

android bp檔案_了解Android.bp

介紹Android最新的編譯系統

一、簡介

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

再來說一說跟着Android版本相應的發展演變過程:

Android 7.0引入ninja和kati

Android 8.0使用Android.bp來替換Android.mk,引入Soong

Android 9.0強制使用Android.bp

轉換關系圖如下:

android bp檔案_了解Android.bp

;

通過Kati将Android.mk轉換成ninja格式的檔案,通過Blueprint+ Soong将Android.bp轉換成ninja格式的檔案,通過androidmk将将Android.mk轉換成Android.bp,但針對沒有分支、循環等流程控制的Android.mk才有效。

這裡涉及到Ninja, kati, Soong, bp概念,接下來分别簡單介紹一下。

1. Ninja

ninja是一個編譯架構,會根據相應的ninja格式的配置檔案進行編譯,但是ninja檔案一般不會手動修改,而是通過将Android.bp檔案轉換成ninja格檔案來編譯。

2. Android.bp

Android.bp的出現就是為了替換Android.mk檔案。bp跟mk檔案不同,它是純粹的配置,沒有分支、循環等流程控制,不能做算數邏輯運算。如果需要控制邏輯,那麼隻能通過Go語言編寫。

3. Soong

Soong類似于之前的Makefile編譯系統的核心,負責提供Android.bp語義解析,并将之轉換成Ninja檔案。Soong還會編譯生成一個androidmk指令,用于将Android.mk檔案轉換為Android.bp檔案,不過這個轉換功能僅限于沒有分支、循環等流程控制的Android.mk才有效。

4. Blueprint

Blueprint是生成、解析Android.bp的工具,是Soong的一部分。Soong負責Android編譯而設計的工具,而Blueprint隻是解析檔案格式,Soong解析内容的具體含義。Blueprint和Soong都是由Golang寫的項目,從Android 7.0,prebuilts/go/目錄下新增Golang所需的運作環境,在編譯時使用。

5. Kati

kati是專為Android開發的一個基于Golang和C++的工具,主要功能是把Android中的Android.mk檔案轉換成Ninja檔案。代碼路徑是build/kati/,編譯後的産物是ckati。

二、Android.bp文法

Android.bp是一種純粹的配置檔案,設計簡單,沒有條件判斷或控制流語句,采用在Go語言編寫控制邏輯。

Android.bp檔案記錄着子產品資訊,每一個子產品以子產品類型開始,後面跟着一組子產品的屬性,以名值對(name: value)表示,每個子產品都必須有一個 name屬性。基本格式,以frameworks/base/services/Android.bp檔案為例

java_library {

name: "services",

dex_preopt: {

app_image: true,

profile: "art-profile",

},

srcs: [

"java*.java",

],

static_libs: [

"services.core",

"services.accessibility",

"services.appwidget",

"services.autofill",

"services.backup",

"services.companion",

"services.coverage",

"services.devicepolicy",

"services.midi",

"services.net",

"services.print",

"services.restrictions",

"services.usage",

"services.usb",

"services.voiceinteraction",

"android.hidl.base-V1.0-java",

],

libs: [

"android.hidl.manager-V1.0-java",

"miuisdk",

"miuisystemsdk"

],

}

cc_library_shared {

name: "libandroid_servers",

defaults: ["libservices.core-libs"],

whole_static_libs: ["libservices.core"],

}

微信公衆号

Gityuan

| 微網誌

weibo.com/gityuan

| 部落格

留言區交流