解决编译打包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里面来了,而且这回大小和原文件一样,运行正常!


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



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

背景:小黑开发cocos2dx游戏,开发完成,接某游戏平台SDK打包APK以实现游戏计费及平台相关功能。 按SDK文档做:把SDK的jar文件都拷贝到安卓项目下的libs目录下, 把SDK的so文...
  • xiaohei_dev
  • xiaohei_dev
  • 2015年11月18日 09:15
  • 2159

Android5.0如何将第三方so库打包到apk

[DESCRIPTION]  1、如何判断第三方库文件是32 bit/64 bit?    2、 如何将没有源码的第三方库打包到apk ?    3、对于没有root权限的user 版本...
  • wds1181977
  • wds1181977
  • 2016年04月21日 15:32
  • 1893

AndroidStudio打包so文件解决办法

AndroidStudio到现在也不支持so文件打包,网上有好多解决办法,但是我试过之后发现,没有一个能用的。可能是AndroidStudio的开发还在初期,版本的不断变化影响的。 今天尝试着用And...
  • wjr2012
  • wjr2012
  • 2014年01月17日 17:54
  • 9380

unity(5.6)引用so文件的安卓工程打成jar包,并由unity打包apk流程及问题

1、工具 首先需要unity(最好5.0以上,以下的未做尝试),和eclipse,jni编译环境 2、so库的打包 android无法识别C语言编写的库(dll),所以需要将C++写好的类库编译成.s...
  • zx1091515459
  • zx1091515459
  • 2017年10月20日 12:44
  • 236

在jni编程中解决第三方so文件编译时被删除的另类方法

最近在做jni方面的一些尝试,在eclipse下,参考网上的教程,配置了NDK,期间好多小坑,多亏网上牛逼的前辈们给出了这样那样的解决方案,试一试,总有一款能够解决我的问题。但是当我成功配置好NDK,...
  • wgj99991111
  • wgj99991111
  • 2016年04月11日 20:07
  • 1026

ant手动编译apk,其中包括第三方Library和so文件

现在有这么个需求,要手动编译apk,不用eclipse集成工具,用命令行直接编译。一开始直接拼凑命令行,后来发现命令行编译apk无法包含第三方Library和so库,很恶心啊。 调研了一下,用ant或...
  • jbb0403
  • jbb0403
  • 2015年04月28日 10:32
  • 1535

Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题) - 夏安明的博客专栏 - 博客频道 - CSDN.NET

  • 2013年07月14日 13:23
  • 485KB
  • 下载

[FAQ13697]L 版本如何将第三方so库打包到apk

[DESCRIPTION]  1、如何判断第三方库文件是32 bit/64 bit?    2、 如何将没有源码的第三方库打包到apk ?    3、对于没有root权限的user 版本,如...
  • wds1181977
  • wds1181977
  • 2017年02月06日 10:54
  • 304

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

如果sdk的要求是把.so放在特定目录下 就需要用到批处理 在项目导入安卓中之后,在对应的jni文件夹中创建一个prebuilt的文件夹,把要导入的so文件全部复制进去 然后写一个.ba...
  • SebastianMichaelis
  • SebastianMichaelis
  • 2015年05月20日 16:03
  • 647

【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题。今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌...
  • hellohhj
  • hellohhj
  • 2014年11月26日 14:56
  • 1701
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决编译打包apk时自动删除第三方so文件或不完整问题
举报原因:
原因补充:

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