原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140423517951/

U3D集成移动MM的SDK绝对是以坑爹为主的东西。 浪费大量时间去弄这玩意。真不知道设计MM SDK的人咋想的,你们应该去参考下移动百宝箱的SDK设计方式,简单易用不坑爹,1小时内绝对能搞定。

因为移动MM支付的SDK只提供android版本的,要自己写过一个android项目再打包重新生成一个jar来供Unity3d引擎使用,这一部分我就不写了,网上也提供很多的教程,主要是已经成功调用之后,会发生以下的错误:

1.failed to find resource file(mmiap.xml}

06-28 05:14:09.746: E/d(4709): failed to find resource file(mmiap.xml}
06-28 05:14:09.776: D/AndroidRuntime(4709): Shutting down VM
06-28 05:14:09.776: W/dalvikvm(4709): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
06-28 05:14:09.786: E/AndroidRuntime(4709): FATAL EXCEPTION: main
06-28 05:14:09.786: E/AndroidRuntime(4709): java.lang.NullPointerException
06-28 05:14:09.786: E/AndroidRuntime(4709): 
at mm.purchasesdk.d.a.a(Unknown Source)
06-28 05:14:09.786: E/AndroidRuntime(4709): 
at mm.purchasesdk.f.a(Unknown Source)
06-28 05:14:09.786: E/AndroidRuntime(4709): 
at mm.purchasesdk.Purchase.init(Unknown Source)

这个是因为重新打包过JAR之后,APK程序已经找不到原来的那几个xml文件了,需要把它提到apk外面,但也不能直接简单地解压加进去,一定要使用一定的工具。

工具有:apktool,aapt,jarsigner

但由于xda论坛的人在上几个月已经开发出新的apktool了,叫:AndroidMultitool,这个工具很好用,已经集成了上面所有的功能了,大家可以使用这个工具。好,废话不多说。

大概的流程是:

1,反编译APK

2,重新编译成APK

3,用aapt工具把CopyrightDeclaration.xml,mmiap.xml,VERSION这三个文件加到APK的根目录下面

4,把APK重新签名,成功!

下面就是对应的步骤:

至于第三步,就是在AndroidMultitool文件夹下面的Program_Files下面的aapt程序:

红色的就是我自己加进去的文件,要把他们加到run0.apk这个程序里面

其他的三个步骤我就不多说了,主要说一下第3个步骤:aapt工具的使用。

我们主要用到两个命令行(其他命令大家自己网上找吧,很强大的):

aapt.exe l run0.apk(这个命令是列出APK里面的资源文件目录)

aapt.exe a run0.apk mmiap.xml(这个命令是把mmiap.xml文件加入到run0.apk中)

当然,我们要加三个文件到里面,各个命令行就不详写了,大家自己写也行了。

搞定后就可以重新签名就成功了!

如果软件无法在Win7系统上运行,请安装提供的VisualBasicPowerPacksSetup.exe,这样就可以运行该软件了。

AndroidMultitool工具的下载,给一个链接给大家吧:http://forum.xda-developers.com/showthread.php?t=2326604

另外,也可以直接使用我自己写的批处理(懂的用就用批处理比较快):

del newtemp.apk
java -jar "apktool.jar" d -s -f temp.apk tmpAndroid
java -jar "apktool.jar"  b -f tmpAndroid run1.apk
rd /s /q tmpAndroid
aapt.exe a run1.apk mmiap.xml CopyrightDeclaration.xml VERSION
java -jar signapk.jar testkey.x509.pem testkey.pk8 run1.apk run_signed.apk
del run1.apk
zipalign.exe -v 4 run_signed.apk newtemp.apk
del run_signed.apk

另外:有人说发现了另外一个错误,就是读取不了MM扣费JAR包里面的图片资源,这个问题是因为Unity对APK打包的时候,把JAR包里面的资源封在里面了,解决办法是:

1,先解压JAR包,把里面的资源文件夹(mmiap这个文件夹)拿出来

2,在Unity项目的Assets文件夹的根目录下面新建一个StreamingAssets文件夹

3,把mmiap这个文件夹复制到StreamingAssets文件夹下面就可以了。

目录最后变成:\Assets\StreamingAssets\mmiap\image\vertical\下面的图片

Unity 打完包以后用appt工具手动把jar包最上层的三个文件打到包里 然后重新签名就可以了
2.可能还会出现签名的问题:
我咨询移动MM官方技术群,有人说应该将移动MMSDK中的mmiap.xml放到打包APK(安卓安装文件)下的根目录,
      但是把mmiap.xml放到APK根目录就会破坏Unity对APK的签名(签名:用于保护APK中的文件,识别应用安装和更新应用版本),破坏签名后APK就无法安装了,同时我尝试使用jarsigner重新签名APK也是失败的,因为Unity拒绝使用jarsigner重签名APK文件, 
 
这个你先用apktool解压破坏unity原有签名,然后再用apktool重新打包,然后用appt加入者三个文件,然后签名就可以了

Unity3d集成移动MM SDK 2.2的技术要点(坑爹的MM SDK)的更多相关文章

  1. Unity3D集成腾讯语音GVoice SDK

    友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了.不过新官网的 ...

  2. Unity3D 集成 Face++ FacePlusPlus httpClient http协议 byte数组转string

    //開始由于要实现跨平台.考虑过用curl封装c++的dll(android *.so)的方式,在c#Dllimport实现 //后来发现Unity3D本身支持http协议.且face++的api都是 ...

  3. Unity3D集成SVN进行版本控制

    首先,AssetServer确实很好用,Unity内部集成的管理界面,操作很简单,提交冲突的后还可以进行文件比对.但学习使用过程中,发现文件体积较大的项目文件目录(600M),我提交不上去,会返回没有 ...

  4. 短视频 SDK 6大功能技术实现方式详解

    第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...

  5. Error: Could not find gradle wrapper within Android SDK. Might need to update your Android SDK. Looked here: C:\Users\Administrator\AppData\Local\Android\sdk\tools\templates\gradle\wrapper

    在Windows7上运行 “cordova build Android” 报错,如下: C:\test\hello> cordova build androidANDROID_HOME=C:\U ...

  6. 关于海康威视与Unity3d集成冲突问题解决

    一.集成 1.1 了解什么是ANSI系列与GNU系列    https://baike.baidu.com/item/ANSI%20C/7657277?fr=aladdin    https://ww ...

  7. (转)Unity3D集成SVN进行版本控制

    首先,AssetServer确实很好用,Unity内部集成的管理界面,操作很简单,提交冲突的后还可以进行文件比对.但学习使用过程中,发现文件体积较大的项目文件目录(600M),我提交不上去,会返回没有 ...

  8. CI-持续集成(2)-软件工业“流水线”技术实现

    1   概述 持续集成(Continuous Integration)是一种软件开发实践.在本系列文章的前一章节已经对其背景及理论体系进行了介绍.本小节则承接前面提出的理论构想进行具体的技术实现. & ...

  9. CI-持续集成(2)-软件工业“流水线”技术实现(转)

    1   概述 持续集成(Continuous Integration)是一种软件开发实践.在本系列文章的前一章节已经对其背景及理论体系进行了介绍.本小节则承接前面提出的理论构想进行具体的技术实现. & ...

随机推荐

  1. (转)mongodb常用命令脚本化-自动化运维

    mongodb常用命令脚本化-自动化运维 把一些运维中常用到的mongodb命令写成shell脚本,极大的方便了维护   1 设置副本集   #!/bin/bash#mongodb 进入client ...

  2. CSS3伪类

    1.:last-child 比如:查找ul的最后一个li ul li:last-child { //样式 } 2.:first-child 比如:查找ul的第一个li ul li:first-chil ...

  3. linux网络编程中阻塞和非阻塞socket的区别

    读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返 回.当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数.当 ...

  4. 全面解析SQL SERVER 的左右内连接

    SQL SERVER数据库的三种常用连接解析: 这里先给出一个官方的解释: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...

  5. 信号处理程序(signal handler)会被重置的信号

    首先说明我的系统,CentOS 6.6,内核为2.6.32-504.12.2.el6.i686. 当用signal对某个信号设定信号处理函数的时候,有些信号的处理函数会被重置,有些则不会,这种情况的具 ...

  6. jquery循环table中tbody的tr中input:text,将值进行拼接传入控制器并返回状态和描述

    引用jquery $(function(){ $("#按钮id").click(function(){ var nums="";//变量 $("#ta ...

  7. 层叠水平(stacking level)

    运用上图的逻辑,上面的题目就迎刃而解,inline-blcok 的 stacking level 比之 float 要高,所以无论 DOM 的先后顺序都堆叠在上面. 不过上面图示的说法有一些不准确,按 ...

  8. PHP 图片文件上传代码分享

    分享下php上传图片文件的一段代码,挺不错的. 通过 PHP,可以把文件上传到服务器.加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件. 当然了,会禁止上传php文件,以及其它程序代 ...

  9. PHP获取Cookie模拟登录CURL

    要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了.利用抓包数据发现,Google 判断了 cookie ...

  10. 对图片进行各种样式裁对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等剪:圆形、星形、心形、花瓣形等--第三方开源--CustomShapeImageView

    CustomShapeImageView在github上的项目主页是:https://github.com/MostafaGazar/CustomShapeImageView 如果仅仅是需要获取圆形. ...