cocos2d-x在Android上的编译过程(2):编译动态库

来源:互联网 发布:iphone gsx查询软件 编辑:程序博客网 时间:2024/05/16 08:02

在上篇文章中,配置好环境后就可以开始编译

而其中的关键便是编写jni文件夹下的Android.mk文件,这个文件想编译系统描述了你的项目的源代码

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := cocos2dcpp_sharedLOCAL_MODULE_FILENAME := libcocos2dcppLOCAL_SRC_FILES := hellocpp/main.cpp \                   ../../Classes/AppDelegate.cpp \                   ../../Classes/HelloWorldScene.cppLOCAL_C_INCLUDES := $(LOCAL_PATH)/../../ClassesLOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_staticLOCAL_WHOLE_STATIC_LIBRARIES += box2d_staticLOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_staticinclude $(BUILD_SHARED_LIBRARY)$(call import-module,cocos2dx)$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)$(call import-module,CocosDenshion/android)$(call import-module,extensions)$(call import-module,external/Box2D)$(call import-module,external/chipmunk)
LOCAL_PATH := $(call my-dir): 定义一个LOCAL_PATH变量,其值为编译器提供的my-dir,即当前目录的路径

include $(CLEAR_VARS):清除带有LOCAL_XXX的变量(如下面的LOCAL_MODULE等),除了LOCAL_PATH,即在编译之前先清除,然后再定义的意思。

LOCAL_MODULE:定义模块名,如果其他模块想引入此模块时,可用LOCAL_WHOLE_STATIC_LIBRARIES加次模块名来引用此模块

LOCAL_MODULE_FILENAME:生成的库的文件,如xxx.so

LOCAL_SRC_FILES:包含将要编译并打包到该模块中的C或C++源代码文件

LOCAL_C_INCLUDES:包含的头文件目录

LOCAL_WHOLE_STATIC_LIBRARIES:引入静态库

这里以cocos2dx_static为例:

打开到cocos2d-x引擎的根目录\cocos2dx\Android.mk找到看到以下信息

include $(BUILD_STATIC_LIBRARY)
说明编译器会将其编译成为一个可以被其他动态库所引用的静态库。

在找到以下信息

LOCAL_MODULE := cocos2dx_staticLOCAL_MODULE_FILENAME := libcocos2d

上面也提到过LOCAL_MODULE就是我们需要的引入其他静态库的名字

而LOCAL_MODULE_FILENAME是生成该静态库的文件名。在编译完后在Eclipse中可以看到该静态库文件



include $(BUILD_SHARED_LIBRARY):向编译器描述,将上面的源文件编译成一个共享库,供Android应用程序调用该共享库,而且只有共享库才会被打包到应用程序中,最后生成一个.so文件


$(call import-module, xxx):根据配置的环境变量中的NDK_MODULE_PATH中的值(本机的目录:D:\cocos2d\cocos2d-x-2.2.2\cocos2d-x-2.2.2;D:\cocos2d\cocos2d-x-2.2.2\cocos2d-x-2.2.2\cocos2dx\platform\third_party\android\prebuilt)和xxx将被引入模块的目录包含进来。如cocos2dx_static模块的mk文件就在D:\cocos2d\cocos2d-x-2.2.2\cocos2d-x-2.2.2\cocos2dx中,以此类推。


编写该文件后就可以用NDK进行编译了。编译成功后便会生成一个so文件(LOCAL_MODULE_FILENAME := libcocos2dcpp)


最后就能在Android的程序中加载该动态库。

System.loadLibrary("cocos2dcpp");

最后看下编译完后的bin目录


存放了编译后的文件以及中间文件,也存放着把这些文件打包后的apk文件。(由于是用ant打包编译所以就有了以上文件和目录)

其中的classes.dex是ant将class文件转换后的精简类文件,resources.ap_则是经过打包的资源文件,TestAndroid.apk是最终的打包文件。


0 0
原创粉丝点击