普法Android.mk中的一些宏和Android.bp对应关系
普法Android.mk和Android.bp相关转换
Android源码编译系列博客:
Android.bp你真的了解吗
Android.bp入门指南之Android.mk转换成Android.bp
Android.bp入门指南之浅析Android.bp语法
Android.bp正确姿势添加宏控制编译指南
Android高版本P/Q/R源码编译指南
如何在线查看Android源码自带学习文档docs
普法Android.mk中的一些宏和Android.bp对应关系
引言
博客断更很久了,是时候动动我勤劳的双手,继续耕耘了!陆陆续续有不少小伙伴在后台咨询关于Android.mk怎么转换成Androdi.bp的问题,虽然也解答了不少,但是也有一些当时我没有能够给出及时的答复(不是我不想答复,而是确实有些我当时也没有一个具体的答案)。其中小伙们询问的最最多多的就是Android.mk中的一些预先定义的宏怎么在Android.bp中找到相对应的。这不我就抽空,来给大伙福利一波,来捯饬捯饬这个问题。
在开始本博客前,有两个非常重要的知识点我必须提前给出来,就是:
1.Android.mk可以引用Android.bp中的相关模块,但是不能反过来!这点非常重要。
2.Android.bp不直接支持条件宏控制语法编译,如果一定要条件宏控制可以借助go,参见博客Android.bp正确姿势添加宏控制编译指南
一.引出问题
我们知道google为Android.mk到Android.bp的转换提供了一个工具androidmk(如果读者对该工具不是很熟悉,可以参见博客Android.bp入门指南之Android.mk转换成Android.bp)但是该工具非常鸡肋,转换效率不是非常好,对一些Android.mk中的宏基本不能正常转换,我这里简单举出一个例子,测试Android.mk如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \a.c
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)LOCAL_CFLAGS += -DXXXLOCAL_SRC_FILES += \b.c
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)LOCAL_CFLAGS += -DXXXLOCAL_SRC_FILES += \c.c
endifLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
LOCAL_MODULE := libyuv_static
LOCAL_MODULE_TAGS := optional
include $(BUILD_STATIC_LIBRARY)
有一定Android.mk语法的小伙们一定对上述的,一看就一目了然了,可是当我们需要使用androidmk转换成Android.bp的时候,却会有如下的尴尬一幕:
cc_library_static {name: "libyuv_static",srcs: ["a.c"] + ["b.c"] + ["c.c"], // ANDROIDMK TRANSLATION ERROR: unsupported conditional// ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)// ANDROIDMK TRANSLATION ERROR: else from unsupported conditional// else// ANDROIDMK TRANSLATION ERROR: unsupported conditional// ifeq ($(TARGET_ARCH_ABI),arm64-v8a)cflags: ["-DXXX"] + ["-DXXX"],// ANDROIDMK TRANSLATION ERROR: endif from unsupported conditional// endif// ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_EXPORT_C_INCLUDES// LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includelocal_include_dirs: ["include"],
可以看到,我们的androidmk转换工具,无能为力了。那么要怎么解决上述出现的问题呢,这就需要我们了解Android.mk的一些宏和Android.bp的对应关系了。这也是我本篇博客的重点要说的了。
如果读者又对Android.mk中各种宏不是很熟悉的,可以参见博客Android.mk详解。有比较详细的分析!
二.解决问题
对于上述Android.mk中的宏,我们要怎么正确的在Android.bp中找到替代关系呢。我这里个人提供两个解决思路:
2.1 参阅Android Aosp中的Androdi.bp
这个方法虽然比较笨,但是也是最行之有效的,多看几个Android Aosp源码中的Android.bp,看多了自然就会了。
2.2 参阅Android Aosp的文档
也许读者朋友会说,上面的方法说了等于白说,看来我不亮出点真本事,是不行了啊。好吗,上真家伙,我们可以到Android aosp的build/soong/androidmk/androidmk目录下面,查看android.go文件,里面有详细的Android.mk相关宏和Android.bp的对应关系,如下:
//android.go"LOCAL_32_BIT_ONLY": local32BitOnly,"LOCAL_AIDL_INCLUDES": localAidlIncludes,"LOCAL_ASSET_DIR": localizePathList("asset_dirs"),"LOCAL_C_INCLUDES": localIncludeDirs,"LOCAL_EXPORT_C_INCLUDE_DIRS": exportIncludeDirs,"LOCAL_JARJAR_RULES": localizePath("jarjar_rules"),"LOCAL_LDFLAGS": ldflags,"LOCAL_MODULE_CLASS": prebuiltClass,"LOCAL_MODULE_STEM": stem,"LOCAL_MODULE_HOST_OS": hostOs,"LOCAL_RESOURCE_DIR": localizePathList("resource_dirs"),"LOCAL_SANITIZE": sanitize(""),"LOCAL_SANITIZE_DIAG": sanitize("diag."),"LOCAL_STRIP_MODULE": strip(),"LOCAL_CFLAGS": cflags,"LOCAL_UNINSTALLABLE_MODULE": invert("installable"),"LOCAL_PROGUARD_ENABLED": proguardEnabled,"LOCAL_MODULE_PATH": prebuiltModulePath,
上述我只截取了一部分,更多的请使用时候具体参阅文档。
同时在同一个目录下面的androidmk_test.go,为我们提供了许多Android.mk转换为Android.bp的实例,这个非常值得我们借鉴。如下:
# Module Comment
include $(CLEAR_VARS)
# Name Comment
LOCAL_MODULE := test
# Source comment
LOCAL_SRC_FILES_EXCLUDE := a.c
# Second source comment
LOCAL_SRC_FILES_EXCLUDE += b.c
include $(BUILD_SHARED_LIBRARY)`,expected: `
//
// Copyright
//// Module Comment
cc_library_shared {// Name Commentname: "test",// Source commentexclude_srcs: ["a.c"] + ["b.c"], // Second source comment}`,},{desc: "split local/global include_dirs (1)",in: `
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)
include $(BUILD_SHARED_LIBRARY)`,expected: `
cc_library_shared {local_include_dirs: ["."],
}`,},{desc: "split local/global include_dirs (2)",in: `
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)`,expected: `
cc_library_shared {local_include_dirs: ["include"],
}`,},{desc: "split local/global include_dirs (3)",in: `
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := system/core/include
include $(BUILD_SHARED_LIBRARY)`,expected: `
cc_library_shared {include_dirs: ["system/core/include"],
}`,},{desc: "split local/global include_dirs (4)",in: `
input := testing/include
include $(CLEAR_VARS)
# Comment 1
LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/include system/core/include $(input)
# Comment 2
LOCAL_C_INCLUDES += $(TOP)/system/core/include $(LOCAL_PATH)/test/include
# Comment 3
include $(BUILD_SHARED_LIBRARY)`,expected: `
input = ["testing/include"]
cc_library_shared {// Comment 1include_dirs: ["system/core/include"] + input + ["system/core/include"], // Comment 2local_include_dirs: ["."] + ["include"] + ["test/include"],// Comment 3
}`,},{desc: "Convert to local path",in: `
include $(CLEAR_VARS)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res $(LOCAL_PATH)/res2
LOCAL_ASSET_DIR := $(LOCAL_PATH)/asset
LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
include $(BUILD_PACKAGE)
写在最后
好了,打卡收工!今天的博客普法Android.mk中的一些宏和Android.bp对应关系就到这里了。总之,青山不改绿水长流先到这里了。如果本博客对你有所帮助,麻烦关注或者点个赞,如果觉得很烂也可以踩一脚!谢谢各位了!!这里最后留下一个小彩蛋,对于上述的Android.mk读者朋友看看能否正确的转换为Android.bp,当然也希望读者能我一起探讨是最好的了。
普法Android.mk中的一些宏和Android.bp对应关系相关推荐
- Android.mk中添加宏定义
在Boardconfig.mk 中添加一个 IMAGE_FOR_FACTORY_TEST:= true 由于Boardconfig.mk和各目录的Android.mk是相互关联的 所以我们可以在And ...
- android.mk local_cppflags,android.mk中LOCAL_CFLAGS 介绍
模块描述变量: 下面的变量用于向编译系统描述你的模块.你应该定义在'include $(CLEAR_VARS)'和'include $(BUILD_XXXXX)'之间定义.正如前面描写的那样,$(CL ...
- android.mk多个module,Android.mk中的变量的使用介绍(二)
废话不多说,直接分享,欢迎斧正. Android.mk中的变量(二) 1.LOCAL_PATH 这个变量用于给出当前文件的路径.你必须在Android.mk的开头定义.例如: LOCAL_PATH : ...
- Android 系统(140)---android.mk中几个常见配置
android.mk中几个常见配置 1.LOCAL_JACK_ENABLED 这个变量可以禁止使用Jack编译工具链编译该模块.在工作中,个人感觉目前jack工具链不是很稳定,经常会出现一些错误,比如 ...
- 编写Android.mk中的LOCAL_SRC_FILES,使其自动查找源文件,不需要手动添加
在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的就是android.mk源文件列表. cpp文件位于android项目下的的不同文件夹和子文件夹下 按照通常的 ...
- 【转】Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES
看原文请移步:Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES 我在先前的两篇post 编写Android.mk中的LOCAL_SRC_F ...
- Android.mk中的LOCAL_OVERRIDES_PACKAGES
关于Android.mk中的LOCAL_OVERRIDES_PACKAGES需要说明一下,此变量可以使其他的模块不加入编译, 如: 源码中DeskClock的android.mk有 LOCAL_OVE ...
- Android.mk中call all-subdir-makefiles和call all-makefiles-under,$(LOCAL_PATH)的区别
Android.mk中call all-subdir-makefiles和call all-makefiles-under,$(LOCAL_PATH)的区别 在写Android.mk文件时,call ...
- Android.mk 编译c语言,编写 android.mk 中 LOCAL_C_INCLUDES 的技巧
编写 android.mk 中 LOCAL_C_INCLUDES 的技巧 在编写android.mk的过程中,免不了要修改LOCAL_C_INCLUDES来设置头文件的include目录, 一般写成这 ...
- android.mk中几个常见配置
1.LOCAL_JACK_ENABLED 这个变量可以禁止使用Jack编译工具链编译该模块.在工作中,个人感觉目前jack工具链不是很稳定,经常会出现一些错误,比如: ERROR: Security ...
最新文章
- el表达式 java_java基础学习:JavaWeb之EL表达式
- UNIX网络编程之旅-配置unp.h头文件环境
- 性能优化指南(5000 字小结)
- 腾讯下载视频转换MP4
- 性能优化之MySQL调优篇
- Java线程--BlockingQueue使用
- 西门子智能门锁设计_如何过度设计门锁
- 语言阿克曼函数_函数式的动态规划
- JAVA中整型常量的长度,Java基础入门篇(三)——Java常量、变量,
- Spring.Net学习笔记十(打造简易的依赖注入框架)
- umijs有什么好处_umijs核心代码解读
- VMware windows xp虚拟机设置静态ip
- vnr光学识别怎么打开_【教程】使用VNR后没有翻译,或文本设定无法提取完整文本解决方案...
- 5g理论速度_5G的速度到底能有多快?
- An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
- 对接支付宝App支付和网页支付接口详解
- Go 实现 json 格式定义 http 协议压测脚本
- [nssl132][jzoj cz 2106] 买门票 {dfs}
- TYVJ 1288 飘飘乎居士取能量块
- Django 模板引擎以及模板