解决编译打包apk时自动删除第三方so文件或不完整问题

来源:互联网 发布:淘宝购物车源代码 编辑:程序博客网 时间:2024/05/22 00:08

背景:小黑开发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里面来了,而且这回大小和原文件一样,运行正常!


问题完美解决,希望有更好的方法。。。



0 0