Android.mk 转换为 Android.bp简介

 

There is a tool called androidmk to generate Android.bp file out of Android.mk file

androidmk工具在编译后生成所在目录out/soong/host/linux-x86/bin/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)
示例如下:

Write normal Android.mk file for prebuilt library like this

include $(CLEAR_VARS)
    LOCAL_MODULE := newlib
    LOCAL_SRC_FILES := newlib.so
    LOCAL_MODULE_SUFFIX := .so
    LOCAL_MODULE_CLASS := SHARED_LIBRARIES
    LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
    LOCAL_MODULE_TAGS := optional
    include $(BUILD_PREBUILT)

Now run below command
androidmk Android.mk

Android.bp file will be created as below

cc_prebuilt_library_shared {
        name: "newlib",
        srcs: ["newlib.so"],

        //ANDROIDMK TRANSLATION ERROR: unspported assignment to LOCAL_MODULE_PATH
        //LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARY)
    }

这里有一些androidmk 工具无法转换的语句,或者想在Andorid.bp中实现一些特定的目标,则可以参考源码中关于soong的两个资料,也可以用于学习Android.bp的命令

1.源码目录 /LINUX/android/build/soong/androidmk/cmd/androidmk/android.go:


174    addStandardProperties(bpparser.BoolType,
175        map[string]string{
176            // Bool properties
177            "LOCAL_IS_HOST_MODULE":             "host",
178            "LOCAL_CLANG":                      "clang",
179            "LOCAL_FORCE_STATIC_EXECUTABLE":    "static_executable",
180            "LOCAL_NATIVE_COVERAGE":            "native_coverage",
181            "LOCAL_NO_CRT":                     "nocrt",
182            "LOCAL_ALLOW_UNDEFINED_SYMBOLS":    "allow_undefined_symbols",
183            "LOCAL_RTTI_FLAG":                  "rtti",
184            "LOCAL_NO_STANDARD_LIBRARIES":      "no_standard_libs",
185            "LOCAL_PACK_MODULE_RELOCATIONS":    "pack_relocations",
186            "LOCAL_TIDY":                       "tidy",
187            "LOCAL_USE_CLANG_LLD":              "use_clang_lld",
188            "LOCAL_PROPRIETARY_MODULE":         "proprietary",
189            "LOCAL_VENDOR_MODULE":              "vendor",
190            "LOCAL_ODM_MODULE":                 "device_specific",
191            "LOCAL_PRODUCT_MODULE":             "product_specific",
192            "LOCAL_PRODUCT_SERVICES_MODULE":    "product_services_specific",
193            "LOCAL_EXPORT_PACKAGE_RESOURCES":   "export_package_resources",
194            "LOCAL_PRIVILEGED_MODULE":          "privileged",
195            "LOCAL_AAPT_INCLUDE_ALL_RESOURCES": "aapt_include_all_resources",
196            "LOCAL_USE_EMBEDDED_NATIVE_LIBS":   "use_embedded_native_libs",
197            "LOCAL_USE_EMBEDDED_DEX":           "use_embedded_dex",

2.文档资料目录/LINUX/android/out/soong/docs/soong_build.html

该文件描述了Android.bp所有的可用的命令以及命令的各个属性的意义

手动将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文件的结构和语法规则,以及你要转换的每个模块类型的规则和属性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值