Android.bp の構文と使用法

1. Android.bp ファイルとは何ですか?

        Android.bp ファイルは、最初は Android システムのコンパイル構成ファイルであり、元の Android.mk
ファイルを置き換えるために使用されます。Android 7.0 より前の Android では、make を使用して各モジュールのコンパイルを整理しており、対応するコンパイル
構成ファイルは Android.mk でした。

        Android7.0から、Googleはコンパイルにninjaとkatiを導入しましたが、なぜninjaを導入したのでしょうか? Android が大きくなるにつれ、モジュールが増え、コンパイル時間がますます長くなるため、ninja を使用すると、make と比較してコンパイルの並行処理が大幅に改善されます。Ninja の構成ファイルは Android.bp であり、Android システムは Blueprint および Soong ツールを使用して Android.bp を分析し、ninja ファイルに変換します。古い mk 構成ファイルと互換性を持たせるために、Android は mk ファイルを変換して ninja を生成する Kati ツールも開発しました.現在、Android Q はまだ Android.mk メソッドをサポートしています. 将来のバージョンでは、mk ファイルは完全に破棄され、同時に Kati は削除され、bp の構成方法のみが保持されると思われるため、事前に bp を学習する必要があります

        これには、Ninja、kati、Soong、および bp の概念が含まれており、次に簡単に紹介します。

1.1 忍者

Ninja はコンパイル フレームワークであり、ninja 形式の対応する構成ファイルに従ってコンパイルされますが、ninja ファイルは通常、手動で変更するのではなく、Android.bp ファイルを ninja 形式のファイルに変換することによってコンパイルされます。

1.2 Android.bp

Android.bp の出現は、Android.mk ファイルを置き換えることです。mk ファイルとは異なり、bp は純粋な構成であり、分岐やループなどのフロー制御がなく、算術演算や論理演算を実行できません。制御ロジックが必要な場合は、Go 言語でしか記述できません。

1.3 スン

Soong は以前の Makefile コンパイル システムのコアに似ており、Android.bp セマンティック分析を提供し、それを Ninja ファイルに変換します。また、Soong は androidmk コマンドをコンパイルして生成し、Android.mk ファイルを Android.bp ファイルに変換しますが、この変換関数は、分岐、ループ、およびその他のフロー制御のない Android.mk に対してのみ有効です。

1.4 青写真

Blueprint は、Soong の一部である Android.bp を生成および解析するためのツールです。Soong は Android のコンパイル用に設計されたツールを担当していますが、Blueprint はファイル形式のみを解析し、S​​oong はコンテンツの特定の意味を解析します。Blueprint も Soong も Golang で書かれたプロジェクトですが、Android 7.0 からコンパイル時に使用される prebuilts/go/ ディレクトリ配下に Golang が必要とする実行環境が追加されます。

1.5 ミディアム

kati は Android 用に特別に開発された Golang および C++ ベースのツールで、主な機能は Android の Android.mk ファイルを Ninja ファイルに変換することです。コード パスは build/kati/ で、コンパイルされた製品は ckati です。

       

2. 文法上の対応規則

        Android.mk の文法に慣れてきたので、今度は Android.bp に変更する必要があります. 簡単に理解できるように、ソース コードを見つけて、Android.mk と Android.bp の間の文法の対応規則を確認してください。

ソース コードの場所: /build/soong/androidmk/cmd/androidmk/android.go、ここでは一部のみを貼り付けます。完全なコードについてはソース ファイルを確認してください。

var moduleTypes = map[string]string{
	"BUILD_SHARED_LIBRARY":        "cc_library_shared",
	"BUILD_STATIC_LIBRARY":        "cc_library_static",
	"BUILD_HOST_SHARED_LIBRARY":   "cc_library_host_shared",
	"BUILD_HOST_STATIC_LIBRARY":   "cc_library_host_static",
	"BUILD_HEADER_LIBRARY":        "cc_library_headers",
	"BUILD_EXECUTABLE":            "cc_binary",
	"BUILD_HOST_EXECUTABLE":       "cc_binary_host",
	"BUILD_NATIVE_TEST":           "cc_test",
	"BUILD_HOST_NATIVE_TEST":      "cc_test_host",
	"BUILD_NATIVE_BENCHMARK":      "cc_benchmark",
	"BUILD_HOST_NATIVE_BENCHMARK": "cc_benchmark_host",

	"BUILD_JAVA_LIBRARY":             "java_library_installable", // will be rewritten to java_library by bpfix
	"BUILD_STATIC_JAVA_LIBRARY":      "java_library",
	"BUILD_HOST_JAVA_LIBRARY":        "java_library_host",
	"BUILD_HOST_DALVIK_JAVA_LIBRARY": "java_library_host_dalvik",
	"BUILD_PACKAGE":                  "android_app",

	"BUILD_CTS_EXECUTABLE":          "cc_binary",               // will be further massaged by bpfix depending on the output path
	"BUILD_CTS_SUPPORT_PACKAGE":     "cts_support_package",     // will be rewritten to android_test by bpfix
	"BUILD_CTS_PACKAGE":             "cts_package",             // will be rewritten to android_test by bpfix
	"BUILD_CTS_TARGET_JAVA_LIBRARY": "cts_target_java_library", // will be rewritten to java_library by bpfix
	"BUILD_CTS_HOST_JAVA_LIBRARY":   "cts_host_java_library",   // will be rewritten to java_library_host by bpfix
}

var prebuiltTypes = map[string]string{
	"SHARED_LIBRARIES": "cc_prebuilt_library_shared",
	"STATIC_LIBRARIES": "cc_prebuilt_library_static",
	"EXECUTABLES":      "cc_prebuilt_binary",
	"JAVA_LIBRARIES":   "java_import",
	"ETC":              "prebuilt_etc",
}

3. Android.mk ファイルを Android.bp に変換する方法

         1. プロジェクト ソース コード内:

         1.ソースビルド/envsetup.sh

         2. ランチ xxx 

         3.androidmkを作る 

         androidmk 変換ツールを生成します。パスは次のとおりです: /out/soong/host/linux-x86/bin/androidmk
 

        2. 変換する Android.mk ファイルをこのディレクトリに直接配置し、次のコマンドを実行します。

              androidmk Android.mk > Android.bp

4. 文法解説

        理解を容易にするために、Android.mk と Android.bp の構文を一緒に理解する方が簡単です。

4.1 さまざまなタイプのモジュールのコンパイル

        4.1.1 Java ライブラリにコンパイルする

Android.mk
include $(BUILD_JAVA_LIBRARY)


Android.bp
java_library {
......
}

        4.1.2 Java スタティック ライブラリにコンパイルする

Android.mk
include $(BUILD_STATIC_JAVA_LIBRARY)


Android.bp
java_library_static {
......
}

        4.1.3 App アプリケーションへのコンパイル

Android.mk
include $(BUILD_PACKAGE)


Android.bp
android_app {
......
}

4.1.4ネイティブ 動的ライブラリ        へのコンパイル 

Android.mk
include $(BUILD_SHARED_LIBRARY)



Android.bp
cc_library_shared {
......
}

        4.1.5 ネイティブ スタティック ライブラリへのコンパイル

Android.mk
include $(BUILD_STATIC_LIBRARY)


Android.bp
cc_library_static {
......
}

          4.1.6 ネイティブ実行プログラムへのコンパイル

Android.mk
include $(BUILD_EXECUTABLE)



Android.bp
cc_binary {
......
}

        4.1.7 ヘッダファイルライブラリへのコンパイル

Android.mk
include $(BUILD_HEADER_LIBRARY)


Android.bp
cc_library_headers {
......
}

  4.2 ファイルパス

        4.2.1 ローカルヘッダーファイルのパス

Android.mk
LOCAL_C_INCLUDES := 


Android.bp
local_include_dirs: ["xxx", ...]

        4.2.2 エクスポートされたヘッダー ファイルのパス

Android.mk
LOCAL_EXPORT_C_INCLUDE_DIRS := 


Android.bp
export_include_dirs: ["xxx", ...]

        4.2.3 リソースファイルのパス

Android.mk
LOCAL_RESOURCE_DIR := 


Android.bp
resource_dirs: ["xxx", ...]

4.3 ライブラリの依存関係

        4.3.1 依存静的ライブラリ

Android.mk
LOCAL_STATIC_LIBRARIES := 



Android.bp
static_libs: ["xxx", "xxx", ...]

        4.3.2 依存動的ライブラリ

Android.mk
LOCAL_SHARED_LIBRARIES := 


Android.bp
shared_libs: ["xxx", "xxx", ...]

        4.3.3 依存ヘッダー ファイル ライブラリ

Android.mk
LOCAL_JAVA_LIBRARIES := 


Android.bp
header_libs: ["xxx", "xxx", ...]

        4.3.4 依存 Java ライブラリ

Android.mk
LOCAL_STATIC_JAVA_LIBRARIES := 



Android.bp
static_libs: ["xxx", "xxx", ...]

        

4.4 異なるパーティションへのインストール

        4.4.1 ベンダーへのインストール

Android.mk
LOCAL_VENDOR_MODULE := true
        or
LOCAL_PROPRIETARY_MODULE := true



Android.bp
proprietary: true
    or
vendor: true

        4.4.2 製品へのインストール

Android.mk
LOCAL_PRODUCT_MODULE := true


Android.bp
product_specific: true

        4.4.3 odm へのインストール

Android.mk
LOCAL_ODM_MODULE := true


Android.bp
device_specific: true

4.5 コンパイルパラメータ

        4.5.1 C フラグ

Android.mk
LOCAL_CFLAGS := 


Android.bp
cflags: ["xxx", "xxx", ...]

        4.5.2 Cpp フラグ

Android.mk
LOCAL_CPPFLAGS := 


Android.bp
cppflags: ["xxx", "xxx", ...]

        4.5.3 Java フラグ

Android.mk
LOCAL_JAVACFLAGS := 


Android.bp
javacflags: ["xxx", "xxx", ...]

        

4.6 フォローアップしてから要約し、更新を続ける

おすすめ

転載: blog.csdn.net/u012514113/article/details/125443131