码迷,mamicode.com
首页 > 编程语言 > 详细

cocos2dx通过ndk编译c++库

时间:2016-08-22 02:07:40      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

 

 

ndk编译c++库,然后通过jni调用实现重要代码封装,是安卓应用中最常用的技术,一方面可以将重要的代码实现隐藏,防止泄漏,也可以提高打包速度。

 

ndk里面的sample文件夹中有很多实用的例子,其中hello-jni有一个编译c++的例子。

 

首先,创建一个jn文件夹,文件夹内放置Android.mk和Application.mk两个文件,Android.mk文件主要是

写入编译的c++代码,打包的库名,打包的库类型(静态库or动态库),引用的模块等等。Application.mk

是主要表示打包的库所属的指令类型,使用的ndk版本,使用gnu版本,还有引用其他库 等等。

 

将要编译的c++代码拷贝到jni文件夹下,以下是Android.mk和Application.mk两个文件的例子。

 

Application.mk:

#只导出arm版本的库

APP_ABI := armeabi

#使用ndk4.8的库版本
NDK_TOOLCHAIN_VERSION := 4.8

#使用stl的库类型
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1 -std=c++11 -fsigned-char

 

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_CPP_FEATURES += exceptions

#这里是导出模块的名字
LOCAL_MODULE := mirage

#这里是导出模块的文件名
LOCAL_MODULE_FILENAME := libmirage

 

#要编译jni目录下的代码文件夹
LOCAL_C_INCLUDES := $(LOCAL_PATH)/lua\
$(LOCAL_PATH)/include


#traverse all the directory and subdirectory
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef

#traverse Classes Directory

#过滤文件,只编译c++和c文件
ALL_FILES := $(call walk, $(LOCAL_PATH)/src)

CPP_FILE_LIST := $(filter %.cpp, $(ALL_FILES))
CPP_FILE_LIST += $(filter %.c, $(ALL_FILES))
CPP_FILE_LIST += $(filter %.cc, $(ALL_FILES))


LOCAL_SRC_FILES := $(CPP_FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../include

 

LOCAL_CFLAGS += -Wno-psabi
LOCAL_EXPORT_CFLAGS += -Wno-psabi

LOCAL_WHOLE_STATIC_LIBRARIES := cocos_lua_static

 

#指明导出的库是.so静态库
include $(BUILD_STATIC_LIBRARY)

#这里是导入要引用的外部c代码的路径

$(call import-add-path, /Users/HemJohn/Desktop/onePiece_client/frameworks/cocos2d-x)

#这里是导入要引用的外部库模块

$(call import-module,scripting/lua-bindings/proj.android)

 

有了上面的步骤后,

在控制台,cd到jni文件夹的目录

执行ndk文件夹里面的ndk-build执行文件(windows系统执行ndk-build.cmd),也可以在环境变量中,添加

ndk的目录.

 

以下是执行结果:

技术分享

在jni同一目录下,会产生一个obj文件夹,里面存放编译好的.a库

技术分享

 

转载请注明出处,from博客园HemJohn

cocos2dx通过ndk编译c++库

标签:

原文地址:http://www.cnblogs.com/HemJohn/p/5794101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!