最近cocos2dx移植到android的项目需要使用第三方.so库,cocos2dx-android本身有 libgame.so ,网上查了资料,把实现方法写下来,方便以后回忆
在调用移动mm的时候,需要调用移动mm 的.so文件,就将方法记录下来吧。
我就将使用移动MM 的两个.so库来写例子,大家如果写一个或多个,以此类推。
在cocos2dx-android项目/jni 下新建一个文件夹,就取名为prebuilt,在该文件夹内,放入第三方.so
如图所示:
在 jni/Android.mk 原有的内容基础上, 在最上面
include $(CLEAR_VARS)
后写入一下代码:
include $(CLEAR_VARS)
LOCAL_MODULE := identifyapp
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libidentifyapp.so
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_SHARED_LIBRARIES := identifyapp
include $(CLEAR_VARS)
LOCAL_MODULE := casdkjni
LOCAL_SRC_FILES := PREBUILT/$(TARGET_ARCH_ABI)/libcasdkjni.so
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_SHARED_LIBRARIES := casdkjni
解释:
LOCAL_MODULE : 这个是模块的名称,在其他地方调用该名称的时候,就自动省略掉前面的lib 和 结尾的.so
LOCAL_SRC_FILE : 引用文件夹下面的.so,如果是纯路径的话就直接填写,$(TARGET_ARCH_ABI) 指的是在armeabi ,armeabi-v7a,x86 下面找到相应的.so文件,例如:找到libidentifyapp.so和libcasdkjni.so
如图所示:
然后编译运行,就会在
项目/libs/armeabi/下生成: libcasdkjni.so 和 libidentifyapp.so
如图所示:
.so 文件是在项目下面的libs 生成相应的.so 文件, 不过要想项目跑起来,还需要在cocos2dx 的主java文件中找到System.loadLibrary("game"); 这句添加代码
static {
System.loadLibrary("casdkjni");
System.loadLibrary("identifyapp");
System.loadLibrary("game");
}
这里有先后顺序,cocos2dx的.so 文件(game) 一定要放到casdkjni 和 identify app 的后面,不然会报错,如图: