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是最终的打包文件。
- cocos2d-x在Android上的编译过程(2):编译动态库
- cocos2d-x在Android上的编译过程(3):简化Android.mk文件的编写
- 分析cocos2d-x在Android上的编译过程(1):cocco2d-x是如何生成的Android的目录结构
- cocos2d-x在Cygwin上编译Android用库文件时遇到的Box2D问题
- Cocos2d-x在win7下的android交叉编译环境
- cocos2d-x在win7下的android交叉编译环境
- android cocos2d-x 编译
- cocos2d-x在新笔记本上编译运行报一些动态库的错,试了很多版本都运行不起来
- 在mac上编译cocos2d-x-3.0rc0
- Cocos2d-x 3.4在AndroidStudio上编译配置
- Cocos2d-x 3.4在AndroidStudio上编译配置
- cocos2d-x在安卓下编译
- cocos2d-x android 编译 iconv库
- Mac 上编译cocos2d-x 2.14 android项目个人记录
- cocos2d-x编译android心得
- android下Cocos2d-x 编译
- elcipse 编译cocos2d-x android
- cocos2d-x-3.5 android 编译
- SQL详解
- JavaScript基础_变量、数据类型、函数
- django 数据库访问性能优化
- 黑马程序员_泛型小结
- Big Endian 和 Little Endian
- cocos2d-x在Android上的编译过程(2):编译动态库
- 鼠标之父
- Java基础_多线程
- TCP与UDP的区别
- java线程阻塞(sleep,suspend,resume,yield,wait,notify)
- KVM 一些信息
- vijos 1493 双线程DP
- TCP的流量控制
- JavaScript中的BOM和DOM和常用对象