zoukankan      html  css  js  c++  java
  • Unity3d集成移动MM SDK 2.2的技术要点(坑爹的MM SDK)

    原地址: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文件夹下面就可以了。

    目录最后变成:AssetsStreamingAssetsmmiapimagevertical下面的图片


    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加入者三个文件,然后签名就可以了 

  • 相关阅读:
    UNIX:处理SIGCHLD信号
    多维数组,指针数组使用,指向指针的指针
    bit field
    链表操作,获得泛型效果
    简明 Vim 练级攻略
    指针3,指向链表对象指针的指针
    大端模式,指针数组
    C宏设置掩码
    springboot 启动报错: Multiple Dockets with the same group name are not supported. The following duplicat
    HTML5学习笔记三
  • 原文地址:https://www.cnblogs.com/123ing/p/3837937.html
Copyright © 2011-2022 走看看