Android.mk 转换为 Android.bp

Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译。因为所有的编译文件都在同一个 GNU MAKE 执行环境中进行执行,而Android.mk中所有的变量都是全局的。

Soong是 Android 的构建系统,旨在替代旧的 make-based build system ,Soong读Android.bp文件,它们以类似 Bazel 的语法定义模块。Soong 本身是在 Blueprint 之上用 Go 编写的框架,反过来使用 Ninja作为后端。 Ninja 旨在提高效率,尤其是对于增量构建。

因为Android是个大项目,搬家到Soong/Android.bp需要一些时间。在过渡期间,两种格式都支持,Soong为Android.bp , 和 Kati为 Android.mk .标准构建将同时运行两者。 Android.mk 中的模块文件可以依赖于 Android.bp 中的模块文件,但不是其他方式。

Android.bp的重要区别是缺乏显式的 if 语句来提高性能。而Android.mk文件可以包含 ifeq检查任意环境变量,Android.bp格式只允许区分预定义的情况,例如处理器架构或调试/发布版本 ( reference )。自定义大小写区别必须在 Go ( reference ) 中单独定义。

因设计差异,Android.mk自动转换至 Android.bp不可行,尽管有一个名为 androidmk 的工具可以简单翻译Android.mk文件(例如没有 if 语句)到 Android.bp ,有一些androidmk 工具无法转换的语句,可以学习bp的命令。

androidmk工具使用方法

1. cd out/soong/host/linux-x86/bin/androidmk
2. androidmk [flags] <inputFile>

注:androidmk parses <inputFile> as an Android.mk file and attempts to output an analogous Android.bp file (to standard out)

android.mk与android.bp变量对应关系

build/soong/androidmk/androidmk/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_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_NOTICE_FILE":             "notice",
			"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",
		})
	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_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",
		})

	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_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",
		})
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手动将Android.bp转换Android.mk可能会比较繁琐,因为它们的格式和结构有所不同。但是,你可以按照以下步骤进行转换: 1. 创建一个新的Android.mk文件,并在文件开头添加以下内容: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ``` 2. 找到Android.bp文件中的每个模块定义。每个模块定义通常以`cc_library`、`cc_binary`、`java_library`等关键字开始。将每个模块定义转换Android.mk规则。 例如,将以下Android.bp示例转换Android.mk: ```bp cc_library { name: "my_library", srcs: ["file1.cpp", "file2.cpp"], include_dirs: ["include"], shared_libs: ["lib1", "lib2"], cflags: ["-Wall", "-Werror"], cppflags: ["-std=c++11"], target: { android: { cflags: ["-fno-exceptions"], }, }, } ``` 可以转换为以下Android.mk规则: ```mk LOCAL_MODULE := my_library LOCAL_SRC_FILES := file1.cpp file2.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_SHARED_LIBRARIES := lib1 lib2 LOCAL_CFLAGS := -Wall -Werror LOCAL_CPPFLAGS := -std=c++11 ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -fno-exceptions endif include $(BUILD_STATIC_LIBRARY) ``` 根据你的模块类型和属性,转换规则的具体细节可能会有所不同。 3. 对于每个模块定义,将转换后的规则添加到Android.mk文件中。 4. 根据你的项目结构和依赖关系,可以按照需要添加其他规则和变量。 5. 最后,在Android.mk文件的末尾,添加以下内容来完成文件的闭合和构建规则的设置: ``` include $(BUILD_PACKAGE) ``` 请注意,手动转换可能会比较繁琐,并且需要根据你的具体情况进行调整。在进行手动转换之前,最好先了解Android.mk文件的结构和语法规则,以及你要转换的每个模块类型的规则和属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值