cocos2d-x jni相关目录分析

Game_______src(游戏逻辑c/c++代码)
              |
              |___proj.android(java工程文件夹)________jni(mk文件,java中使用的接口c/c++文件)
                                                                      |
                                                                      |___src(java代码,入口函数,Activity类等等)
                                                                      |
                                                                      |___....一系列java工程目录文件
 
Engine______*.cpp
              |
              |__Android.mk
              |
              |__platform____android_____jni(java调用c/c+ +的函数定义及实现;c/c++调用java的实现)
                                               |
                                               |_____java(java工程目录,生成一个java包,定制java层的实现机制)
                                               |
                                               |_____*.cpp(不知道啥含义,可能是需要调用jni中,c/c++调用java的实现吧,不同平台调用各自的接口文件,所以不同目录)
 
 
LOCAL_STATIC_LIBRARIES
is only makes sense in shared library modules
这是官方文档中的一句话,本来很疑惑,因为cocos2d-x中的cocos2d_static依然在其Android.mk文件中使用了该LOCAL_STATIC_LIBRARIES标签,将extension等一些拓展库引用了进来,最后sh cocos2d-x提供的一个native-build脚本成功把helloworld编译成功,并且可运行.所以就怀疑文档的正确性了.
接着自己试验,在一个BUILD静态库的mk中LOCAL_STATIC_LIBRARIES,(小插曲:NDK_MODULE_PATH需要提供,因为$(call import-module,importlib)的时候,importlib是NDK_MODULE_PATH中提供的路径下的一个文件夹在其中搜索Android.mk文件,然后LOCAL_STATIC_LIBRARIES的时候,在这些Android.mk文件中搜索有无BUILD的该lib然后编译.NDK_MODULE_PATH可以填写多个,以分号隔开,一般是在ndk-build NDK_MODULE_PATH=***:***:**)
然后ndk-build,无果...如果不设置一些选项,只会去搜索jni文件下的Android.mk,按这种目录存放,编译还是没有.o和.a文件生成,最后还是Google帮了忙,虽然方法很明确但是没有把为什么说清楚,方法就是在Application.mk文件中指定APP_MODULES:=1*** 2***, 而文档中是说,不指定该值,会去build所有的module..看来,static不再这个范围中.
cocos2d-x中,cocos2d-static最终是被game.so这个动态库包含,那么是不是意味着,静态库中的LOCAL_STATIC_LIBRARIES会在最中的so的mk中被展开,解析.其实这个时候cocos2d-x的mk文件依赖关系已经说明了这个现象,但是还是自己写一遍,然后生成了一个so文件,使用nm -D查看生成的so库中的符号,已经包含了直接依赖的static library中的函数以及static library中依赖的另一个static library中的函数.

posted on 2013-04-09 13:55  莫铭  阅读(402)  评论(0)    收藏  举报

导航