我遇到这个问题是我cocos2d-x2.2.2版本游戏在更新移动mm3.1.7版本的sdk遇到的,下面我会具体说明问题和解决方案。
一..相信cocos2dx的程序在接入安卓方面的支付功能常常会接触到第三方sdk的.so库文件,这些库文件的作用是对支付信息做出了封装,但是有的sdk你会发现把第三方的.so文件复制到libs文件夹下,再编译完成项目后会出现原本复制到libs文件夹下的.so文件消失的情况,针对这种情况我原来的解决方案是在代码文件夹下创建一个文件夹prebuilt,将第三方的.so文件复制到这里边去,再在Android.mk中加入如下代码进行库文件的编译,这样第三方的.so文件就会保留在libs文件夹下
//代码示例,其他.so文件类似
include $(CLEAR_VARS)
LOCAL_MODULE := entryex
LOCAL_SRC_FILES := prebuilt/libentryex.so
include $(PREBUILT_SHARED_LIBRARY)
二.这篇博文的重点当让不是这个,以上的方法相信大多数人都了解掌握,但是3.1.7版本的出现,却不得不让我改变思路去寻找新的方法去做,原因是上述情况会对.so文件进行编译,导致编译后的.so文和demo中的.so大小不一样,实际就是编译过程中导致了内容的丢失,无法实现原来的效果,那么,我现在介绍的就是如何不进行编译的方式就能把.so文件复制到libs里呢,相信能看到这里的人,不仅仅是单纯的小白了,你应该一定是用过python的,那么好,下面就以我的命名为例,向大家介绍这种方法,
1.首先创建一个名为lib_so.py的文件,lib_so.py里的内容如下,把它放到C盘根目录下(随意放置,我只是为了方便演示)
import os
def copyFiles(sourceDir, targetDir):
for file in os.listdir(sourceDir):
sourceFile = os.path.join(sourceDir, file)
targetFile = os.path.join(targetDir, file)
if os.path.isfile(sourceFile):
if not os.path.exists(targetDir):
os.makedirs(targetDir)
if not os.path.exists(targetFile) or(os.path.exists(targetFile) and (os.path.getsize(targetFile) != os.path.getsize(sourceFile))):
open(targetFile, "wb").write(open(sourceFile, "rb").read())
if os.path.isdir(sourceFile):
First_Directory = False
copyFiles(sourceFile, targetFile)
copyFiles("想要复制.so文件的目录", "将要复制so文件到达的目录")
//下面是例子(一定要注意文件夹之间使用\\哦)
//copyFiles("E:\\whs_dj\\libs\\armeabi", "E:\\whs_dj\\proj.android\\libs\\armeabi")
2.再创键一个copy_so.bat的脚本命令文件,内容如下,也放在C盘根目录下
//这段代码很单纯,实际就是执行py文件
C:\lib_so.py
3.我们编译android项目是在eclipse下的,那么进入eclipse,右键点击项目,选择Properties(Alt+Enter),再选择Builders,选择new,选择Program,
选择Browse File System(选择系统文件),选择我们创建的.bat文件,修改名字为lib_so,点击ok,就可以了
当然光是这样还是不行的,看下面
我们要把lib_so文件放在CDT Builder 和 Android Package Builder之间(原因是为了让我么复制文件的工作在CDT编译之后和android编译之前),截止到现在,我们的工作就算完成了,再次去编译项目就ok了,如大家有什么疑惑,欢迎大家加我的私人qq:1036723494,我会热心帮助大家解决问题的。