cocos2d-x在Android上的编译过程(3):简化Android.mk文件的编写
2023-09-27 14:27:21 时间
在编译动态库时。要求我们要去编写jni/Android.mk文件。告诉编译器编译出来的库时应包括包括编译文件和其它引用库。但对于一个大项目来说,维护这个文件肯定是一件比較繁琐的事情。由于每加一个文件或减一个文件等就要改下Android.mk来又一次生成打包文件。所以非常有必要对这个文件进行自己主动化处理,就是在绝大部分的情况下都不须要改动此文件。
由于我没有从cocos2d-x引擎中自带的那些Android.mk找到好的样例,就在网上搜索makefile的编写技巧。最终找到了较好的解决方式。
在本利中的Classes的文件结构例如以下
1. 首先在Android.mk中增加下面代码
#遍历出Classes下全部的cpp和c文件,也遍历出jni/hellocpp下全部的cpp文件
define walk
$(subst jni/, ,$(wildcard $(2)/*.cpp) $(filter %.cpp %.c, $(wildcard $(1)) $(foreach v, $(wildcard $(1)/*), $(call walk, $(v)))))
endef
#将上面遍历出的文件列表赋给CPP_FILES
CPP_FILES := $(call walk, $(LOCAL_PATH)/../../Classes, $(LOCAL_PATH)/hellocpp)
LOCAL_SRC_FILES := $(CPP_FILES)
#打印測试
$(warning $(LOCAL_SRC_FILES))
打印出来的内容例如以下
可见LOCAL_SRC_FILES的值是我们所须要的
假设项目中的头文件不是以相对目录引入的话还要对LOCAL_C_INCLUDES进行改动
继续在Android.mk中增加下面代码
ALL_DIR :=
#获取Classes下的全部目录(假设一个目录下有两个文件的话则FILES_DIR出现两个反复的目录名)
FILES_DIR := $(dir $(filter ../../%, $(LOCAL_SRC_FILES)))
#去掉FILES_DIR中的反复目录名,此时的FILES_DIR的每一个目录名的最后面会多出一个/
$(foreach n, $(FILES_DIR), $(if $(filter $(n), $(ALL_DIR)), , $(eval ALL_DIR += $(n))))
#给FILES_DIR的每一个目录名的后面加上一/
C_INCLUDES := $(foreach m, $(ALL_DIR), $(LOCAL_PATH)/$(m)/)
#去掉FILES_DIR的每隔目录名的//( 由于上面在每一个目录名的最后面多加了一个/ 所以要去掉//)
C_INCLUDES := $(subst //,,$(C_INCLUDES))
LOCAL_C_INCLUDES := $(C_INCLUDES)
#打印測试
$(warning $(LOCAL_C_INCLUDES))
打印出来的内容例如以下
可见LOCAL_C_INCLUDES的值是我们所须要的
这样就不用怎么每次编译就要去改动Android.mk文件了
(ps: 之前也写过一篇关于自己主动生成LOCAL_SRC_FILES的python脚本,尽管这个会带来一点点方便,但远没有达到理想的效果。故删之)
相关文章
- QT 应用部署到Android的终端步骤
- [ Android 五种数据存储方式之二 ] —— 文件存储数据
- Android.mk文件LOCAL_MODULE_TAGS 说明
- Android解决button反复点击问题
- 分享50款 Android 移动应用程序图标【下篇】
- Android 禁止系统进入深度休眠
- cocos2dx 自己主动加入cpp文件到android.mk
- Android dump .so 文件crash log
- android文件的写入与读取---简单的文本读写context.openFileInput() context.openFileOutput()
- Android 属性动画(Property Animation) 完全解析 (上)
- Android Jetpack组件之WorkManager后台任务管理的介绍与使用(一)
- android studio调用c文件-小白版本
- Android Studio 指定签名证书文件
- Android 动态修改 html 文件的字符串
- 【ijkplayer】编译 Android 版本的 ijkplayer ① ( Ubuntu 安装 Git 软件 | 下载 ijkplayer 代码 )
- Android、iOS历史版本对比
- 【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
- Android 通讯录搜索(中文和拼音检索通讯录)
- Android ListView Animation 4种动画效果(贴上了GIF图)
- android实现带进度条的文件上传
- Android开发之TableLayout
- 【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★
- ReactNative实战系列 组件封装之Dialog(iOS和Android通用)
- 深入理解Android系统资源异常之文件描述符异常篇
- 我的Android进阶之旅------>android之向Gallery中添加倒影3D效果