Android.bp探究

有时不知道Android.bp要咋写,特意看了下源码:

./build/soong/androidmk/androidmk/android.go

简单的Android.bp的模板是下面这个样子:

[module type] {

    name: "[name value]",

    [property1 name]:"[property1 value]",

    [property2 name]:"[property2 value]",

}

关键是这些内容我们要咋填写,来讲一讲吧。

module type对应android.go文件中的moduleTypes和prebuiltTypes.

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_RRO_PACKAGE":              "runtime_resource_overlay",

        "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",
        "APPS":             "android_app_import",
        "ETC":              "prebuilt_etc",
}

像android_app_import(预编译无源码apk),prebuilt_etc(预编译配置文件),android_app(编译含源码的apk),java_library(编译java静态库),cc_binary(编译可执行文件),这些属性都是我们经常用到的。

name属性不用多说,编译目标的名字。来看下property属性。

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",
                })
        addStandardProperties(bpparser.ListType,
                map[string]string{
                        "LOCAL_SRC_FILES":                     "srcs",
                        "LOCAL_SRC_FILES_EXCLUDE":             "exclude_srcs",
                        "LOCAL_HEADER_LIBRARIES":              "header_libs",
                        "LOCAL_SHARED_LIBRARIES":              "shared_libs",
                        "LOCAL_STATIC_LIBRARIES":              "static_libs",
                        "LOCAL_WHOLE_STATIC_LIBRARIES":        "whole_static_libs",
                        "LOCAL_SYSTEM_SHARED_LIBRARIES":       "system_shared_libs",
                        "LOCAL_USES_LIBRARIES":                "uses_libs",
                        "LOCAL_OPTIONAL_USES_LIBRARIES":       "optional_uses_libs",
                        "LOCAL_ASFLAGS":                       "asflags",
                        "LOCAL_CLANG_ASFLAGS":                 "clang_asflags",
                        "LOCAL_COMPATIBILITY_SUPPORT_FILES":   "data",
                        "LOCAL_CONLYFLAGS":                    "conlyflags",
                        "LOCAL_CPPFLAGS":                      "cppflags",
                        "LOCAL_REQUIRED_MODULES":              "required",
                        "LOCAL_HOST_REQUIRED_MODULES":         "host_required",
                        "LOCAL_TARGET_REQUIRED_MODULES":       "target_required",
                        "LOCAL_OVERRIDES_MODULES":             "overrides",
                        "LOCAL_LDLIBS":                        "host_ldlibs",
                        "LOCAL_CLANG_CFLAGS":                  "clang_cflags",
                        "LOCAL_YACCFLAGS":                     "yacc.flags",
                        "LOCAL_SANITIZE_RECOVER":              "sanitize.recover",
                        "LOCAL_LOGTAGS_FILES":                 "logtags",
                        "LOCAL_EXPORT_HEADER_LIBRARY_HEADERS": "export_header_lib_headers",
                        "LOCAL_EXPORT_SHARED_LIBRARY_HEADERS": "export_shared_lib_headers",
                        "LOCAL_EXPORT_STATIC_LIBRARY_HEADERS": "export_static_lib_headers",
                        "LOCAL_INIT_RC":                       "init_rc",
                        "LOCAL_VINTF_FRAGMENTS":               "vintf_fragments",
                        "LOCAL_TIDY_FLAGS":                    "tidy_flags",
                        // TODO: This is comma-separated, not space-separated
                        "LOCAL_TIDY_CHECKS":           "tidy_checks",
                        "LOCAL_RENDERSCRIPT_INCLUDES": "renderscript.include_dirs",
                        "LOCAL_RENDERSCRIPT_FLAGS":    "renderscript.flags",

                        "LOCAL_JAVA_RESOURCE_DIRS":    "java_resource_dirs",
                        "LOCAL_JAVA_RESOURCE_FILES":   "java_resources",
                        "LOCAL_JAVACFLAGS":            "javacflags",
                        "LOCAL_ERROR_PRONE_FLAGS":     "errorprone.javacflags",
                        "LOCAL_DX_FLAGS":              "dxflags",
                        "LOCAL_JAVA_LIBRARIES":        "libs",
                        "LOCAL_STATIC_JAVA_LIBRARIES": "static_libs",
                        "LOCAL_JNI_SHARED_LIBRARIES":  "jni_libs",
                        "LOCAL_AAPT_FLAGS":            "aaptflags",
                        "LOCAL_PACKAGE_SPLITS":        "package_splits",
                        "LOCAL_COMPATIBILITY_SUITE":   "test_suites",
                        "LOCAL_OVERRIDES_PACKAGES":    "overrides",

                        "LOCAL_ANNOTATION_PROCESSORS": "plugins",

                        "LOCAL_PROGUARD_FLAGS":      "optimize.proguard_flags",
                        "LOCAL_PROGUARD_FLAG_FILES": "optimize.proguard_flags_files",

                        // These will be rewritten to libs/static_libs by bpfix, after their presence is used to convert
                        // java_library_static to android_library.
                        "LOCAL_SHARED_ANDROID_LIBRARIES": "android_libs",
                        "LOCAL_STATIC_ANDROID_LIBRARIES": "android_static_libs",
                        "LOCAL_ADDITIONAL_CERTIFICATES":  "additional_certificates",

                        // Jacoco filters:
                        "LOCAL_JACK_COVERAGE_INCLUDE_FILTER": "jacoco.include_filter",
                        "LOCAL_JACK_COVERAGE_EXCLUDE_FILTER": "jacoco.exclude_filter",

                        "LOCAL_FULL_LIBS_MANIFEST_FILES": "additional_manifests",

                        // will be rewrite later to "license_kinds:" by byfix
                        "LOCAL_LICENSE_KINDS": "android_license_kinds",
                        // will be removed later by byfix
                        // TODO: does this property matter in the license module?
                        "LOCAL_LICENSE_CONDITIONS": "android_license_conditions",
                        "LOCAL_GENERATED_SOURCES":  "generated_sources",
                })

        addStandardProperties(bpparser.BoolType,
                map[string]string{
                        // Bool properties
                        "LOCAL_IS_HOST_MODULE":             "host",
                        "LOCAL_CLANG":                      "clang",
                        "LOCAL_FORCE_STATIC_EXECUTABLE":    "static_executable",
                        "LOCAL_NATIVE_COVERAGE":            "native_coverage",
                        "LOCAL_NO_CRT":                     "nocrt",
                        "LOCAL_ALLOW_UNDEFINED_SYMBOLS":    "allow_undefined_symbols",
                        "LOCAL_RTTI_FLAG":                  "rtti",
                        "LOCAL_PACK_MODULE_RELOCATIONS":    "pack_relocations",
                        "LOCAL_TIDY":                       "tidy",
                        "LOCAL_USE_CLANG_LLD":              "use_clang_lld",
                        "LOCAL_PROPRIETARY_MODULE":         "proprietary",
                        "LOCAL_VENDOR_MODULE":              "vendor",
                        "LOCAL_ODM_MODULE":                 "device_specific",
                        "LOCAL_PRODUCT_MODULE":             "product_specific",
                        "LOCAL_PRODUCT_SERVICES_MODULE":    "product_specific",
                        "LOCAL_SYSTEM_EXT_MODULE":          "system_ext_specific",
                        "LOCAL_EXPORT_PACKAGE_RESOURCES":   "export_package_resources",
                        "LOCAL_PRIVILEGED_MODULE":          "privileged",
                        "LOCAL_AAPT_INCLUDE_ALL_RESOURCES": "aapt_include_all_resources",
                        "LOCAL_DONT_MERGE_MANIFESTS":       "dont_merge_manifests",
                        "LOCAL_USE_EMBEDDED_NATIVE_LIBS":   "use_embedded_native_libs",
                        "LOCAL_USE_EMBEDDED_DEX":           "use_embedded_dex",

                        "LOCAL_DEX_PREOPT":                  "dex_preopt.enabled",
                        "LOCAL_DEX_PREOPT_APP_IMAGE":        "dex_preopt.app_image",
                        "LOCAL_DEX_PREOPT_GENERATE_PROFILE": "dex_preopt.profile_guided",

                        "LOCAL_PRIVATE_PLATFORM_APIS": "platform_apis",
                        "LOCAL_JETIFIER_ENABLED":      "jetifier",

                        "LOCAL_IS_UNIT_TEST": "unit_test",

                        "LOCAL_ENFORCE_USES_LIBRARIES": "enforce_uses_libs",

                        "LOCAL_CHECK_ELF_FILES": "check_elf_files",
                })

addStandardProperties函数的第一个参数决定了这些属性的类型(String,List,Boolean),配置属性时可以对照看下自己写的值对不对。像privileged(是否编译到priv-app目录),
                product_specific(是否编译到product目录),system_ext_specific(是否编译到system_ext目录),dex_preopt.enabled(dex优化),certificate(使用何种签名)。

对于string属性具体可以设置啥值,还有待研究。

你可能感兴趣的:(Android系统功能开发,android,前端,javascript)