U8SDK——添加文件到apk根目录中(移动MM SDK)

作者: 分类: U8SDK 发布时间: 2015-02-10 17:42 6没有评论

有童鞋在接入移动MM SDK时,遇到了一个恶心的问题。就是移动MM SDK的jar包中包含了三个文件:CopyrightDeclaration.xml,mmiap.xml,VERSION。

恶心就恶心在,在接入SDK时,我们需要将这三个文件放到工程的根目录下,这样,打出来的apk包,这三个文件才能在apk的根目录下。

一般在Android开发中,我们通常把这些文件放在assets目录下。

不知道移动MM SDK的开发者是怎么想的。对于这种“恶心他人,方便自己”的做法,我们一贯的原则,是无声地谴责。我们要倡导的是:“恶心自己,方便他人”

那么,现在问题来了,现在大部分游戏都是采用都是cocos2dx,unity3d来开发的,他们都是通过jni来和Android进行交互。这样,你弄不好就会出现
说找不到这三个文件。

特别是在unity3d中,你就算将这三个文件拷贝到unity工程中的Plugins\Android目录下,打出来的apk包根目录下也不会包含这三个文件。那么,在我们这里,
如何来将SDK需要放在apk根目录下的文件,打到apk中呢。

基于我们的”恶心自己,方便他人“的思想。防止以后其他渠道也有类似的问题,我们需要一个统一的解决方案。使所有使用U8SDK的小伙伴,不再被他恶心到。

我们的解决方案是,在对应的渠道SDK目录下建立一个root文件夹,root里面所有的文件和子目录都将原封不动的打入apk根目录。

但是apktool也有一个蛋疼的BUG,就是直接过滤反编译后根目录下的他不认识的文件或者文件夹。所以,直接将SDK中root目录下的文件拷贝到反编译后的根目录下,是没有用的。重新打包的时候,他自动过滤了。

所以,我们只能在打包完成后,通过aapt命令,对apk包进行操作。将需要加入到根目录下的文件插入到apk包的根目录中。

以UC渠道为例:

首先,我们在U8SDKPacker\sdks\sdk\uc目录下建立一个文件夹root。然后在uc的sdk_config.xml的ops节点中增加一条:

注意,to=””,当to=””(注意这里是空字符串,没有空格)时,root目录下的所有文件将会被拷贝到反编译后的根目录下。

然后在file_utils.py中增加一个函数,这个函数就是列出指定目录下的文件,可以过滤掉指定的文件或目录:

然后在apk_utils.py中,增加一个拷贝根目录资源的方法,就是调用aapt命令,将除了系统文件或者文件夹的其他文件都拷贝到apk的根目录下。

最后,在main.py的doPack方法中,在signApk调用的前面(在签名之前调用该方法),加上该方法的调用:apk_utils.copyRootFiles(targetApk, decDir)

本文出自 U8SDK技术博客,转载时请注明出处及相应链接。

本文永久链接: http://www.uustory.com/?p=1457

评论功能已经关闭,请加入U8SDK技术群进行讨论和咨询:207609068
Ɣ回顶部
U8SDK技术群 x
技术同学请加入
点击加入