背景:小黑开发cocos2dx游戏,开发完成,接某游戏平台SDK打包APK以实现游戏计费及平台相关功能。
方案1
步骤1:把SDK的jar文件都拷贝到安卓项目下的libs目录下, 把SDK的so文件都拷贝到安卓项目下的libs对应目录下(比如:libs/armeabi, libs/armeabi-v7a, libs/x86等)
编译打包结果:并没有把这些so文件打包进apk里面来,(原因:在编译项目的时候自动清除掉所有so文件),运行崩溃。
方案2
步骤1:把SDK所有so文件拷贝到jni/prebuilt(没有prebuilt就自已新建一个)目录下(比如:jni/prebuilt/armeabi, jni/prebuilt/armeabi-v7a, jni/prebuilt/x86等)
步骤2:修改jni/Android.mk文件
******************************************Android.mk******************************************
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#本次操作修改开始
#增加 libxxxxx_1.so
include $(CLEAR_VARS)
LOCAL_MODULE := xxxxx_1
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libxxxxx_1.so
include $(PREBUILT_SHARED_LIBRARY)
#增加 libxxxxx_2.so
include $(CLEAR_VARS)
LOCAL_MODULE := xxxxx_2
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libxxxxx_2.so
include $(PREBUILT_SHARED_LIBRARY)
#增加 libxxxxx_3.so
include $(CLEAR_VARS)
LOCAL_MODULE := xxxxx_3
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libxxxxx_3.so
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
...
******************************************Android.mk******************************************
编译打包结果:终于把所有so文件打包进apk里面来了,完美运行。
后来又有一次, 小黑又接另外一个平台的SDK,也是引用他们的so文件,小黑果断开心大胆使用上面所述方法,不料今非昔,这次打包进来的so文件有一些竟然是1kb的大小(原文件远大于1kb大小),明显so文件并不是完整的,运行果断崩崩崩,于是小黑又探索新方法
方案3
步骤1:新建android空项目(不需创建icon及activity),并设置为library项目(设置方法1:在创建的时候选中Mark this project as a library。设置方法2:右击项目->Properties->Android->Library,选中 Is Library)
步骤2:把SDK的jar文件都拷贝到新建的项目的libs目录下, 把SDK的so文件都拷贝到新建项目的libs对应目录下(比如:libs/armeabi, libs/armeabi-v7a, libs/x86等)
步骤3:在你的游戏项目里引用新建的lib项目(方法:右击项目->Properties->Android->Library->Add->选中新建的项目->返回到Library列表选中新建的项目->Apply->Ok)
编译打包结果:所有so文件打包进apk里面来了,而且这回大小和原文件一样,运行正常!
问题完美解决,希望有更好的方法。。。
本文介绍了三种方案解决在使用SDK集成到Cocos2dx游戏中,遇到的编译打包APK时自动删除或不完整so文件的问题。方案包括直接拷贝so文件到libs目录,修改Android.mk文件,以及创建library项目引用SDK资源。通过实践,方案三成功解决了so文件打包不全导致的运行崩溃问题。
756

被折叠的 条评论
为什么被折叠?



