Android.bp语法

Android.bp是Android系统中用来替代Android.mk的新式构建配置文件,基于Blueprint框架。它简化了配置,不支持复杂的逻辑,主要由Soong解释并转换为Ninja文件进行构建。Android.bp的例子展示了如何定义Android应用程序模块,包括依赖、源代码和资源。转换Android.mk到Android.bp可以使用androidmk工具。文章还列举了不同类型的模块编译方式,如Java库、App应用和Native库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

  Android.bp是用来替换Android.mk的配置文件,它使用Blueprint框架来解析。Blueprint是生成、解析Android.bp的工具,是Soong的一部分。Soong则是专为Android编译而设计的工具,Blueprint只是解析文件的形式,而Soong则解释内容的含义,最终转换成Ninja文件。Android.bp文件用类似JSON的简洁声明来描述需要构建的模块。

Android.bp的出现就是为了替换Android.mk文件。bp跟mk文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过Go语言编写。

举个例子

android_app {
    name: "Camera2",

    static_libs: [
        "androidx.legacy_legacy-support-v13",
        "androidx.legacy_legacy-support-v4",
        "androidx.core_core",
        "android-ex-camera2-portability",
    ],
    optional_uses_libs: ["org.apache.http.legacy"],
    srcs: [
        "src/**/*.java",
        "src_pd/**/*.java",
        "src_pd_gcam/**/*.java",
    ],
    resource_dirs: [
        "res",
        "res_p",
    ],
    
    aaptflags: [
        "--auto-add-overlay",
        "--version-name",
        "2.0.002",
        "--version-code",
        "20002000",
    ],
    sdk_version: "current",
    product_specific: true,
    optimize: {
        proguard_flags_files: ["proguard.flags"],
    },
    libs: ["org.apache.http.legacy"],
    jni_libs: [
        "libjni_tinyplanet",
        "libjni_jpegutil",
    ],
}

为了便于理解,可以找到源码,查看Android.mk 与 Android.bp 语法对应规则;

build/soong/androidmk/cmd/androidmk/android.go Android.go

func init() {
    addStandardProperties(bpparser.StringType,
            map[string]string{
                    "LOCAL_MODULE":                  "name",
                    "LOCAL_CXX_STL":                 "stl",
                    "LOCAL_MULTILIB":                "compile_multilib",
                    "LOCAL_ARM_MODE_HACK":           "instruction_set",
                    "LOCAL_SDK_VERSION":             "sdk_version",
                    "LOCAL_MIN_SDK_VERSION":         "min_sdk_version",
                    "LOCAL_NDK_STL_VARIANT":         "stl",
                    "LOCAL_JAR_MANIFEST":            "manifest",
                    "LOCAL_CERTIFICATE":             "certificate",
                    "LOCAL_CERTIFICATE_LINEAGE":     "lineage",
                    "LOCAL_PACKAGE_NAME":            "name",
                    "LOCAL_MODULE_RELATIVE_PATH":    "relative_install_path",
                    "LOCAL_PROTOC_OPTIMIZE_TYPE":    "proto.type",
                    "LOCAL_MODULE_OWNER":            "owner",
                    "LOCAL_RENDERSCRIPT_TARGET_API": "renderscript.target_api",
                    "LOCAL_JAVA_LANGUAGE_VERSION":   "java_version",
                    "LOCAL_INSTRUMENTATION_FOR":     "instrumentation_for",
                    "LOCAL_MANIFEST_FILE":           "manifest",

                    "LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING": "dex_preopt.profile",
                    "LOCAL_TEST_CONFIG":                      "test_config",
                    "LOCAL_RRO_THEME":                        "theme",
            })

如何把Android.mk转化成Android.bp

out/soong/host/linux-x86/bin/androidmk 利用androidmk生成工具转化Android.mk androidmk

androidmk Android.mk > Android.bp

编译不同类型的模块

编译成 Java 库
Android.mk
include $(BUILD_JAVA_LIBRARY)
 
 
Android.bp
java_library {
......
}
编译成 Java 静态库
Android.mk
include $(BUILD_STATIC_JAVA_LIBRARY)
 
 
Android.bp
java_library_static {
......
}
编译成 App 应用
Android.mk
include $(BUILD_PACKAGE)
 
 
Android.bp
android_app {
......
}
编译成 Native 动态库
Android.mk
include $(BUILD_SHARED_LIBRARY)
 
 
 
Android.bp
cc_library_shared {
......
}
编译成 Native 静态库
Android.mk
include $(BUILD_STATIC_LIBRARY)
 
 
Android.bp
cc_library_static {
......
}
编译成 Native 执行程序
Android.mk
include $(BUILD_EXECUTABLE)
 
 
 
Android.bp
cc_binary {
......
}
编译成头文件库

Android.mk
include $(BUILD_HEADER_LIBRARY)
 
 
Android.bp
cc_library_headers {
......
}
注意:

Android.mk可以引用Android.bp中的模块,反之Android.bp不能引用Android.mk中的模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值