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

原创 2015年11月18日 09:15:44

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


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



版权声明:

相关文章推荐

ogre 引擎 框架追踪 第五章 资源加载之实加载

前一章 ogre 引擎 框架追踪 第四章 资源加载之资源组初始化作为资源加载的第三期,进入ogre场景主体的真正的加载环节:创建场景。 当然该环节是先创建场景管理器。mSceneMgr = mRo...

cocos2dx环境配置及打包apk

安装软件准备: vs2012 cocos2d-x-2.2.1 adt-bundle-windows-x86_64-20121030 android-ndk-r9c-windows-x86_64 jdk...

cocos2d移植到安卓引入第三方so文件时候编译会删除解决方案

在游戏中对接支付的SDK的时候引入支付的so文件的时候在编译的时候总是被删除,后来经过查找资料自己整理出了一个解决方案 方案如下 在项目导入安卓中之后,在对应的jni文件夹中创建一个prebuilt的...

关于Android Studio .so文件打包不到APK中的原因

郁闷和困惑我了好几天的问题终于解决了,感觉像心里一块石头落地了,没解决之前,都想着是不是AS工具出现问题了,系统出现问题了,还是电脑有问题?各种原因都找了,功夫不负有心人,最后没办法,只能一行一行代码...

安卓代码迁移:Make.exe: *** [libs/armabi-v7a/gdbserver] Error 1

解决办法1:安装ndk和eclipse修改为x86操作系统 解决办法2:降低更换NDK版本

OpenCV4Android+JNI开发快速上手入门

ndroid opencv jni 目录[-] 安卓开发环境与OpenCV的配置 创建带OpenCV SDK的Android工程 在Android项目中调用C++代码 ...

OpenCV-2.4.4 + javacv-0.4 +eclipse

由于最近实验室需要处理图像,本人对java相对来说比较熟悉,所以配置了Java的图像开发环境。如下: 1. 首先下载OpenCV-2.4.4和javacv-0.4。 OpenCV-2.4.4下载地...

安卓代码迁移:Make.exe: *** [***.o]Error 1

描述:NDK开发中显示,windows环境下NDK开发 解决办法:查找系统环境变量,找到关于Cygwin的环境变量或其他无效的环境变量删除处理。

eclipse里配置Android ndk环境,用eclipse编译.so文件

做Android NDK开发时,c代码需要用ndk-build来进行编译,而java代码则需要用Android sdk编译。 编译c代码有两种方法: 一、写好c代码后,然后用cygwin搭建ndk...

解决Android 打包后 so文件不完整导致程序崩溃

最近接入国内某平台sdk的时候,一直崩溃。报的sdk里so文件的错误     但是他的demo可以正常运行,然后就找原因,把apk解压之后 发现有一个so文件小了好多,正常700K,结果只有70...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)