簡介: CSDN博客專家,專注Android/Linux系統(tǒng),分享多mic語音方案、音視頻、編解碼等技術(shù),與大家一起成長!
優(yōu)質(zhì)專欄:Audio工程師進階系列【原創(chuàng)干貨持續(xù)更新中……】??
優(yōu)質(zhì)專欄:多媒體系統(tǒng)工程師系列【原創(chuàng)干貨持續(xù)更新中……】??
人生格言: 人生從來沒有捷徑,只有行動才是治療恐懼和懶惰的唯一良藥.
1.前言
本篇目的:Android之Android.bp文件格語法。
2.Android.bp介紹
- Android.bp(Build Configuration File)是Android編譯系統(tǒng)中的一種配置文件格式,用于定義模塊(Module)及其依賴關(guān)系,以及模塊的構(gòu)建配置選項。Android.bp文件是Android編譯系統(tǒng)中的核心部分,它替代了之前的Android.mk文件,提供了更加靈活和高效的模塊管理方式。
- Android.bp文件的基本結(jié)構(gòu)如下:
- 注釋:以“//”開頭的單行注釋,用于說明和描述模塊的屬性和配置。
- 包名(Package):模塊所屬的包名,用于唯一標(biāo)識一個模塊。包名通常包含公司或組織域名的反向拼寫,例如:com.example.module。
- 模塊名(Module):模塊的名稱,用于在包內(nèi)唯一標(biāo)識一個模塊。模塊名通常為小寫字母和下劃線的組合,例如:my_module。
- 依賴(Dependencies):模塊依賴的其他模塊,用于指定模塊間的依賴關(guān)系。依賴可以分為兩種類型:硬件依賴(hard)和軟件依賴(soft)。硬件依賴表示模塊需要特定硬件才能正常運行,而軟件依賴表示模塊可以運行在任意硬件上。
- 特性(Features):模塊提供的特性,用于描述模塊的功能和特性。特性可以包含多個鍵值對,例如:features { hardware = “x86”; system-image = “api-level-29”; }上述代碼表示該模塊支持x86架構(gòu),并使用api-level-29的系統(tǒng)鏡像。
- 編譯配置(Compile Configuration):模塊的編譯配置選項,用于指定編譯時使用的工具鏈、編譯器選項等。編譯配置可以包含多個鍵值對,例如:cflags += “-Wall -Wextra”; include-dirs += “src/main/cpp”;上述代碼表示在編譯模塊時添加了額外的編譯警告,并包含了src/main/cpp目錄下的頭文件。
- 源文件(Srcs and Headers):模塊的源文件和頭文件列表,用于指定模塊的編譯輸入。可以指定單個文件或使用通配符匹配多個文件,例如:srcs = [“main.cpp”, “src/main/cpp/my_file.cpp”]; headers = [“include/my_module.h”];上述代碼表示模塊的主要源文件為main.cpp和src/main/cpp/my_file.cpp,頭文件為include/my_module.h。
- 編譯規(guī)則(Compilation Rules):模塊的編譯規(guī)則,用于指定如何編譯模塊的源文件。編譯規(guī)則可以包含多個鍵值對,例如:clang++ { target-os = [“android”, “l(fā)inux”]; target-arch = [“x86”, “arm64-v8a”]; }上述代碼表示模塊支持Android和Linux操作系統(tǒng),以及x86和arm64-v8a架構(gòu)。
- 生成文件(Generated Files):模塊編譯過程中生成的文件,用于指定編譯輸出??梢灾付▎蝹€文件或使用通配符匹配多個文件,例如:generated-sources = “src/main/cpp/MyGenerator.java”;上述代碼表示編譯過程中生成的Java源文件為src/main/cpp/MyGenerator.java。
- Android.bp文件通過描述模塊的依賴關(guān)系、特性、編譯配置等信息,為Android編譯系統(tǒng)提供了更加靈活和高效的模塊管理方式。使用Android.bp文件可以簡化模塊的編譯過程,提高編譯速度,并減少出錯率。隨著Android編譯系統(tǒng)的不斷演進,Android.bp文件格式也將不斷完善和優(yōu)化,以滿足日益復(fù)雜的Android應(yīng)用和系統(tǒng)構(gòu)建需求。
3.Android.bp文件格式模塊
Android.bp 文件很簡單。它們不包含任何條件語句,也不包含控制流語句;
所有復(fù)雜問題都由用 Go 編寫的構(gòu)建邏輯處理。
Android.bp 文件的語法和語義都盡可能與 Bazel BUILD 文件類似。
<1>.模塊
Android.bp 文件中的模塊以模塊類型開頭,后跟一組 name: “value”, 格式的屬性:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
每個模塊都必須具有 name 屬性,并且相應(yīng)值在所有 name 文件中必須是唯一的,僅有兩個例外情況是命名空間和預(yù)構(gòu)建模塊中的 Android.bp 屬性值,這兩個值可能會重復(fù)。
srcs 屬性以字符串列表的形式指定用于構(gòu)建模塊的源文件。您可以使用模塊引用語法 “:” 來引用生成源文件的其他模塊的輸出,如 genrule 或 filegroup。
<2>.類型
變量和屬性是強類型,變量根據(jù)第一項賦值動態(tài)變化,屬性由模塊類型靜態(tài)設(shè)置。支持的類型為:
布爾值(true 或 false)
整數(shù) (int)
字符串 ("string")
字符串列表 (["string1", "string2"])
映射 ({key1: "value1", key2: ["value2"]})
映射可以包含任何類型的值,包括嵌套映射。列表和映射可能在最后一個值后面有終止逗號。
<3>.Glob
接受文件列表的屬性(例如 srcs)也可以采用 glob 模式。
glob 模式可以包含普通的 UNIX 通配符 *,例如 *.java。glob 模式還可以包含單個 ** 通配符作為路徑元素,與零個或多個路徑元素匹配。
例如,java/**/*.java 同時匹配 java/Main.java 和 java/com/android/Main.java 模式。
<4>.變量
Android.bp 文件可能包含頂級變量賦值:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
變量的作用域限定在聲明它們的文件的其余部分,以及所有子 Blueprint 文件。變量是不可變的,但有一個例外情況:可以使用 += 賦值將變量附加到別處,但只能在引用它們之前附加。
<5>.注釋
Android.bp 文件可以包含 C 樣式的多行 /* */ 注釋以及 C++ 樣式的單行 // 注釋。
<6>.運算符
可以使用 + 運算符附加字符串、字符串列表和映射。
可以使用 + 運算符對整數(shù)求和。附加映射會生成兩個映射中鍵的并集,并附加在兩個映射中都存在的所有鍵的值。
<7>.條件語句
Soong 不支持 Android.bp 文件中的條件語句。但是,編譯規(guī)則中需要條件語句的復(fù)雜問題將在 Go(在這種語言中,您可以使用高級語言功能,并且可以跟蹤條件語句引入的隱式依賴項)中處理。大多數(shù)條件語句都會轉(zhuǎn)換為映射屬性,其中選擇了映射中的某個值并將其附加到頂級屬性。
要支持特定于架構(gòu)的文件,請使用以下命令:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
<8>.格式設(shè)置工具
Soong 包含一個針對 Blueprint 文件的規(guī)范格式設(shè)置工具,類似于 gofmt。如需以遞歸方式重新設(shè)置當(dāng)前目錄中所有 Android.bp 文件的格式,運行以下命令:文章來源:http://www.zghlxwxcb.cn/news/detail-837067.html
# bpfmt -w .
規(guī)范格式包括縮進四個空格、多元素列表的每個元素后面有換行符,以及列表和映射末尾有英文逗號。文章來源地址http://www.zghlxwxcb.cn/news/detail-837067.html
到了這里,關(guān)于Android之Android.bp文件格式語法(一百八十六)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!