学习笔记 Android.mk 自动搜索

最近被Android.mk这东西折腾的一晚,这里记录一下。
ios就省心多了,不用管那么多,xcode自己解决了。

文本工具:MACVIM(文本编辑工具 非常好用 能清楚分清tab 和空格,以免编写.mk时出错)
这个文件是向编译器描述源代码文件,便于它去解析。

以下是cocos2dx-3.2新建项目时生成的Android.mk文件

基本语法:
“#” 注释
“:=”  赋值
“+=”  追加
“$”    引用某变量的值
#宏函数my-dir返回编译系统提供的当前路径,即Android.mk的目录
#如(HelloWorld/proj.android/jni/XX)
LOCAL_PATH := $(call my-dir)

#初始化模块  重置除LOCAL_PATH变量以外的所有变量
include $(CLEAR_VARS)

#导入库目录
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)

#模块名,唯一。
LOCAL_MODULE := cocos2dcpp_shared
#模块文件名,唯一(可选)
LOCAL_MODULE_FILENAME := libcocos2dcpp?
#把.cpp .c .cc等实现文件的路径赋值给LOCAL_SRC_FILES
我用的是C++版  所以后缀是.cpp 我们新建文件时,需要在这里添加路径。
LOCAL_SRC_FILES := hellocpp/main.cpp                    ../../Classes/AppDelegate.cpp                    ../../Classes/HelloWorldScene.cpp
#配置头文件的搜索范围
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
#获取静态库
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
#追加静态库
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static

# LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static
# LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static

#根据编译器提供的变量BUILD_SHARED_LIBRARY生成动态库
include $(BUILD_SHARED_LIBRARY)

#导入模块,以下是常用的几个模块

$(call import-module,.)
$(call import-module,audio/android)

# $(call import-module,Box2D)
# $(call import-module,editor-support/cocosbuilder)
# $(call import-module,editor-support/spine)
# $(call import-module,editor-support/cocostudio)
# $(call import-module,network)
# $(call import-module,extensions)

如果文件少  直接在LOCAL_SRC_FILES这个变量里添加文件的路径就好了

可惜我有几十个文件,一个个添加还不累死,而且难维护,难扩展,易出错,。。。

我是个懒人,参考子龙山人的mk改写了一下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp
#widcard为扩展通配符
#遍历目录和子目录
define walk
 $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef
#遍历路径Classes下得目录和子目录文件,并存入ALLFILES变量中
ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)
#从ALLFILES目录中提取文件,并存入FILE_LIST中
#.cc是Linux/Unix下为C++源文件的默认扩展名,与.cpp一个意思
#.c 因为我要用到sqlite3.c
FILE_LIST := hellocpp/main.cpp
FILE_LIST += $(filter %.cpp, $(ALLFILES))
FILE_LIST += $(filter %.c, $(ALLFILES))
FILE_LIST += $(filter %.cc, $(ALLFILES))

#搜索Classes下的子目录文件
FILE_INCLUDES += $(shell find $(LOCAL_PATH)/../../Classes -type d)
#根据搜索到的文件名 编译资源文件
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
#提供搜索文件的路径
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes 	$(FILE_INCLUDES) #静态库
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
#LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
#LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static
#LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static

#编译动态库
include $(BUILD_SHARED_LIBRARY)

#导入静态库对应的模块
$(call import-module,.)
$(call import-module,audio/android)

#$(call import-module,Box2D)
#$(call import-module,editor-support/cocosbuilder)
#$(call import-module,editor-support/spine)
$(call import-module,editor-support/cocostudio)
$(call import-module,network)
$(call import-module,extensions)

吐槽:这些零碎的东西应该是被引擎或者开发软件所解决的。

学习笔记 Android.mk 自动搜索

时间: 2024-10-14 04:01:11

学习笔记 Android.mk 自动搜索的相关文章

学习笔记 Android.mk 搜索自己主动

最近一直Android.mk这是什么一个令人沮丧的夜晚,点击此处记录. ios你担心更多.不管那么多.xcode自己解决. 文本工具:MACVIM(文本编辑工具 很有用 你可以清楚地分辨tab 和Spaces,为了不写.mk错误) 件是向编译器描写叙述源码文件.便于它去解析. 下面是cocos2dx-3.2新建项目时生成的Android.mk文件 基本的语法: "#" 凝视 ":="  赋值 "+="  追加 "$"    引

android学习笔记--android启动过程之init.rc文件浅析

1.  init.rc文件结构文件位置:init.c  : /system/core/initinit.rc  : /system/core/rootdir 首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on.service.import.我们可以看下init.rc文件是怎么写的:1.import import /init.usb.rc import /init.${ro.hardware}.rc import /init.trace.rc 上面的内容

Mina框架的学习笔记——Android客户端的实现

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn

[Android学习笔记]Android向下兼

Android向下兼容的思路:使用高版本的API,在运行时判断真实运行平台的API版本,根据不同版本做不同的处理 关键类:Build.class里面定义了API版本相关信息 内部类:VERSION定义当前系统的版本信息,其中包含SDK版本信息Build.VERSION.SDK_INT可以获取到当前运行的系统的SDK版本号 内部类:VERSION_CODES定义了各个版本的枚举信息 适配时: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONE

[Android学习笔记]Android中多线程开发的一些概念

线程安全: 在多线程的情况下,不会因为线程之间的操作而导致数据错误. 线程同步: 同一个资源,可能在同一时间被多个线程操作,这样会导致数据错误.这是一个现象,也是一个问题,而研究如何解决此类问题的相关工作就叫做线程同步. android中,处理线程同步的手段就是:锁 一般分为公平锁和非公平锁: synchronized(内部锁,互斥锁):synchronized是JVM提供的线程同步机制,如果出现问题,JVM能捕获异常,并释放资源,具体实现机制需要查看JVM源码 synchronized的使用特

学习笔记-----Android的View绘制过程

边看源码边参考别人的博客等,做一下学习笔记. 要了解View的绘制,首先得知道View树的结构:(可以参考http://blog.csdn.net/qinjuning/article/details/7226787) 整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,其绘制流程如下: 我们从最基本的思路来理解绘图流程:先确定所有View的大小,然后根据布局决定每个View的位置,然后开画! 这里着重关注具体绘图的Draw方法,其绘制流程为

Cocos2d-x 中Android.mk自动生成.cpp与.c类路径

今天,同事发现了一个可以自动生成Android.mk的脚本.这里贴上留着以后使用.之前在网上找的脚本只能识别以.cpp结尾的类,经过修改后也可以识别.c结尾的类. LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp #traverse all the directory and subdirectory

Cocos2d-x 关于Android.mk 自动读入CPP

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 制作过cocos2d-x游戏的开发这都知道, 当所有东东都做完后, 最后一步,生成APK, 以前是用NDK等等一系列,很复杂东东来做, 3.0以后,可以直接在命令行 cocos compile 来制作. 简单了很多很多. 但是,依旧有东东需要手动, 比如Andr

cocos2d Android.mk自动添加类

打开Android.mk修改以下代码: LOCAL_SRC_FILES := hellocpp/main.cpp ../../Classes/AppDelegate.cpp ../../Classes/HelloWorldScene.cpp 替换成: #------------------------------------------------------------------------------------- # 遍历目录及子目录的函数 define walk $(wildcard