码迷,mamicode.com
首页 > 其他好文 > 详细

怎么将第三方的库文件只复制而不编译呢

时间:2015-08-20 16:52:37      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:   so   移动mm   支付   解决方案   

我遇到这个问题是我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,我会热心帮助大家解决问题的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

怎么将第三方的库文件只复制而不编译呢

标签:   so   移动mm   支付   解决方案   

原文地址:http://blog.csdn.net/csdn_whs/article/details/47808109

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!