如何寫 Android.bp

本篇記錄一下如何寫 Android.bp,並附上基本範例與原本的 Android.mk 對照。

基本範例

以下就以AOSP上的sdcard模組來做作為範例,完整路徑在system/core/sdcard/Android.bp下。

system/core/sdcard/Android.bplink
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cc_binary {
srcs: ["sdcard.cpp"],
name: "sdcard",
cflags: [
"-Wall",
"-Wno-unused-parameter",
"-Werror",
],
shared_libs: [
"libbase",
"libcutils",
"libminijail",
],
sanitize: {
misc_undefined: ["integer"],
},
}

cc_binary:表示編譯成執行檔
srcs:原始檔
name:模組名稱,也是執行檔名稱
cflags:編譯參數
shared_libs:連結的動態函式庫

可以跟原先的 Android.mk 對照看就大概了解了,原本的 Android.mk 如下:

system/core/sdcard/Android.mklink
1
2
3
4
5
6
7
8
9
10
11
12
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := sdcard.cpp fuse.cpp
LOCAL_MODULE := sdcard
LOCAL_CFLAGS := -Wall -Wno-unused-parameter -Werror
LOCAL_SHARED_LIBRARIES := libbase libcutils libminijail libpackagelistparser

LOCAL_SANITIZE := integer

include $(BUILD_EXECUTABLE)

LOCAL_SRC_FILES 對應到 srcs
LOCAL_MODULE 對應到 cc_binary
LOCAL_CFLAGS 對應到 cflags
LOCAL_SHARED_LIBRARIES 對應到 shared_libs
BUILD_EXECUTABLE 對應到 cc_binary

參考
[1] Android编译系统中的Android.bp、Blueprint与Soong · 零壹軒·笔记
https://note.qidong.name/2017/08/android-blueprint/