锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务,锦州广厦维修电脑,公司IT外包服务
topFlag1 设为首页
topFlag3 收藏本站
 
maojin003 首 页 公司介绍 服务项目 服务报价 维修流程 IT外包服务 服务器维护 技术文章 常见故障
锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务技术文章
[最新版]火柴人联盟v1.14.1去签名验证去广告Android内购破解

作者: dryzh  日期:2017-06-30 20:19:19   来源: 本站整理

授人以鱼不如授人以渔,谁将授吾以渔? --by B.S. {:1_892:}
废话不多说了.先上图,分析修改说明随后附上. 
注: 文章排版是用的论坛Markdown编辑的(因我的博客是基于markdown),是有点不太好阅读,可以拉到一楼最下面左边有md的导航.
真机安装还是一直卡在"正在处理,请稍后......"的童鞋,请前往2楼下载我修复过的移动支付接口版本和以后更新的各种支付接

口版本(可以手机点击下载在线安装)
其实在B.S.去签名去广告内购破解版下面的百度下载是个可以点击下载在线安装的备用链接O(∩_∩)O哈哈~


 

 

---Creaked by  B.S. 6/26/2017 9:22:40 PM

无聊练手,当作学习Android优秀源码的笔记

仅供学习研究,请勿用作商业用途,如若喜欢请支持正版!

最新版原程序:(v1.14.1)

百度下载

火柴人联盟官网: http://huo.hoolaigames.com/

B.S.去签名去广告内购破解版:(无限内购)

百度下载 链接: https://pan.baidu.com/s/1qXTbuVU 密码: r9sb

有确认支付的电信接口内购版

也可以去各大安卓市场搜索下载最新版本:(推荐支付接口比较熟悉的移动,咪咕游戏,爱游戏)

爱游戏: http://www.play.cn/

咪咕游戏: http://g.10086.cn/

中国移动应用商城: http://mm.10086.cn/android

腾讯应用宝: http://android.myapp.com/

360手机助手: http://zhushou.360.cn/

百度旗下安卓市场: http://apk.hiapk.com/

安智市场: http://www.anzhi.com/

有图有真相:

运营商网络 特征码 备注
中国移动 46000、46002、46007、46020  
中国联通 46001、46006、46010  
中国电信 46003、46005、46011  

1. 去签名验证:

Android killer不修改直接回编译后,是有签名验证的,检测提示盗版破解游戏.签名验证盗版提示

当然是先跑一遍原程序,看看logcat有没有敏感信息可以用;现在搜索字符串了,

 

signatures

getAPPSecretString

有侵权

BLACK_NAME

找到第一条添加黑名单的工具类就是,向上回溯查看哪里引用了getAPPSecretString这个方法

.class public Lcn/mycompany/addblackname/utils/utils;

.super Ljava/lang/Object;

.source "utils.java"

.method public static getAPPSecretString(Landroid/content/Context;)Ljava/lang/String;      .prologue     .line 21     invoke-virtual {p0}, Landroid/content/Context;->getPackageName()Ljava/lang/String;      move-result-object v4      .line 22     .local v4, "pkgname":Ljava/lang/String;     const-string v1, ""      return-object v1  #去签名验证从:try_start_0开始到:catch_0,但里面的返回留着.直接返回空的字符串  .end method

去验证的修改方法很多种,还可以在下面的类里定位到check方法函数.

根据经验可以去看看onCreate有没可用的信息,一般初始化在这里有处理.

.class public Lcom/DBGame/DiabloLOL/DiabloLOL;

.super Lorg/cocos2dx/lib/Cocos2dxActivity;

.source "DiabloLOL.java"

.method protected onCreate(Landroid/os/Bundle;)V      #前面还有若干代码     ###黑名单功能开始     .line 240      new-instance v0, Lcn/mycompany/addblackname/AddBlackName;      invoke-direct {v0, p0}, Lcn/mycompany/addblackname/AddBlackName;-><init>(Landroid/content/Context;)V      .line 241     .local v0, "blackName":Lcn/mycompany/addblackname/AddBlackName;     #invoke-static {}, Lcn/mycompany/addblackname/AddBlackName;->Check()V     ###黑名单功能结束     #后面还有若干代码 

顺便广告的也可以看看能不能处理了

    #前面还有若干代码     ###广告的初始化开始     .line 260     #invoke-static {p0, v7}, Lcn/cmgame/billing/api/game/main/Tool;->adIntervalInit(Landroid/app/Activity;Lcn/cmgame/billing/api/game/main/Listener;)V      .line 262     #invoke-static {p0, v7}, Lcn/cmgame/billing/api/game/main/Tool;->adNativeInit(Landroid/app/Activity;Lcn/cmgame/billing/api/game/main/Listener;)V     ###广告的初始化结束     #后面还有若干代码 

看到Lcn/mycompany/addblackname/AddBlackName;->Check()V是在添加黑名单的类里, 查看方法,处理check()V

.method public static Check()V     .locals 6      .prologue     ######插入代码开始 coded by B.S.      const-string v0, "Lcn/mycompany/addblackname/AddBlackName;->check()V \n  -- by B.S."      invoke-static {v0}, Lcom/android/BS/Log;->LogStr(Ljava/lang/String;)V      ######插入代码结束 coded by B.S.     return-void   #直接返回使签名验证失效. .end method

2. 去广告:

去除返回退出的横幅广告:

点返回按钮,logcat找到敏感字符

----- showInterAD --exit

反编译后,搜索

----- showInterAD

HANDLER_SHOW_INTER_AD

在下面类修改

.class public Lcom/DBGame/Common/BLHelper;

.super Ljava/lang/Object;

.source "BLHelper.java"

不让他发送显示广告的消息

public static final int HANDLER_SHOW_INTER_AD = 211;

.field public static final HANDLER_SHOW_INTER_AD:I = 0xd3

.method public static showInterAD(Ljava/lang/String;)V     .locals 6     .param p0, "tag"    # Ljava/lang/String;      .prologue     .line 360     const-string v3, "ad"      new-instance v4, Ljava/lang/StringBuilder;      invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V      const-string v5, "----- showInterAD --"      invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;      move-result-object v4      invoke-virtual {v4, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;      move-result-object v4      invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;      move-result-object v4      invoke-static {v3, v4}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I      .line 361     const/4 v1, 0x0      .line 362     .local v1, "index":I     const/4 v0, 0x0      .local v0, "i":I     :goto_0     sget-object v3, Lcom/DBGame/Common/BLHelper;->adTags:[Ljava/lang/String;      array-length v3, v3      if-ge v0, v3, :cond_0      .line 363     sget-object v3, Lcom/DBGame/Common/BLHelper;->adTags:[Ljava/lang/String;      aget-object v3, v3, v0      invoke-virtual {v3, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z      move-result v3      if-eqz v3, :cond_1      .line 364     move v1, v0      .line 368     :cond_0     new-instance v2, Landroid/os/Message;      invoke-direct {v2}, Landroid/os/Message;-><init>()V      .line 369     .local v2, "msg":Landroid/os/Message;     const/16 v3, 0xd3      iput v3, v2, Landroid/os/Message;->what:I      .line 370     iput v1, v2, Landroid/os/Message;->arg1:I      .line 371     sget-object v3, Lcom/DBGame/Common/BLHelper;->sContext:Lcom/DBGame/DiabloLOL/DiabloLOL;     #去退出广告,不让他发送显示广告的消息,下面一句给注释或删掉     #invoke-virtual {v3, v2}, Lcom/DBGame/DiabloLOL/DiabloLOL;->sendMessage(Landroid/os/Message;)V      .line 372     return-void      .line 362     .end local v2    # "msg":Landroid/os/Message;     :cond_1     add-int/lit8 v0, v0, 0x1      goto :goto_0 .end method
去除选英雄和副本的横幅广告:
 public static final int HANDLER_SHOWBANNER = 200; public static final int HANDLER_HIDEBANNER = 210;  case DiabloLOL.HANDLER_HIDEBANNER /*210*/:                     DiabloLOL.this.hideBanner(); case 200:                     DiabloLOL.this.showBanner(); 

修改下面类里的方法

.class public Lcom/DBGame/Common/BLHelper;

.super Ljava/lang/Object;

.source "BLHelper.java"

.method public static showBanner(Ljava/lang/String;)V     .locals 2     .param p0, "tag"    # Ljava/lang/String;      .prologue     .line 375     new-instance v0, Landroid/os/Message;      invoke-direct {v0}, Landroid/os/Message;-><init>()V      .line 376     .local v0, "msg":Landroid/os/Message;     const/16 v1, 0xd2  #const/16 v1, 0xc8  #显示横幅广告的发送消息的代码 0xc8 200 休改为 0xd2 210   隐藏横幅      iput v1, v0, Landroid/os/Message;->what:I      .line 377     sget-object v1, Lcom/DBGame/Common/BLHelper;->sContext:Lcom/DBGame/DiabloLOL/DiabloLOL;      #去横幅广告,或者不让他发送显示广告的消息,     invoke-virtual {v1, v0}, Lcom/DBGame/DiabloLOL/DiabloLOL;->sendMessage(Landroid/os/Message;)V      .line 378     return-void .end method

可以再去下面类里看看,消息处理的地方 .method public handleMessage(Landroid/os/Message;)V

.class Lcom/DBGame/DiabloLOL/DiabloLOL$3;

.super Landroid/os/Handler;

.source "DiabloLOL.java"

    case 200:        //DiabloLOL.access$400(this.this$0);       return;     case 210:        //DiabloLOL.access$500(this.this$0);       return;     case 211:        Log.e("qq", "HANDLER_SHOW_INTER_AD==========");       //DiabloLOL.access$600(this.this$0, paramMessage.arg1);       return;

对应的smali

    .line 650     #去除显示横幅sswitch_8     :sswitch_8     iget-object v2, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$3;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;      # invokes: Lcom/DBGame/DiabloLOL/DiabloLOL;->showBanner()V     #invoke-static {v2}, Lcom/DBGame/DiabloLOL/DiabloLOL;->access$400(Lcom/DBGame/DiabloLOL/DiabloLOL;)V      goto :goto_0      .line 654     #去除隐藏横幅sswitch_9     :sswitch_9     iget-object v2, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$3;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;      # invokes: Lcom/DBGame/DiabloLOL/DiabloLOL;->hideBanner()V     #invoke-static {v2}, Lcom/DBGame/DiabloLOL/DiabloLOL;->access$500(Lcom/DBGame/DiabloLOL/DiabloLOL;)V      goto :goto_0      .line 658     #去除显示嵌入式广告sswitch_a     :sswitch_a     const-string v2, "qq"      const-string v3, "HANDLER_SHOW_INTER_AD=========="      invoke-static {v2, v3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I      .line 659     iget-object v2, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$3;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;      iget v3, p1, Landroid/os/Message;->arg1:I      # invokes: Lcom/DBGame/DiabloLOL/DiabloLOL;->showInterAd(I)V     #invoke-static {v2, v3}, Lcom/DBGame/DiabloLOL/DiabloLOL;->access$600(Lcom/DBGame/DiabloLOL/DiabloLOL;I)V      goto/16 :goto_0 

消息处理的代码如下:

        public void handleMessage(Message msg) {             switch (msg.what) {                 case 10:                     DiabloLOL.this.exitGame();                     return;                 case 11:                     ((ClipboardManager) Cocos2dxActivity.getContext().getSystemService("clipboard")).setPrimaryClip(ClipData.newPlainText(MiniDefine.ax, BLHelper.copyString));                     Toast.makeText(DiabloLOL.this, "拷贝成功!", 0).show();                     return;                 case 30:                     if (BLHelper.IPAYTAYPE == 1) {                         DiabloLOL.this.payInDuanXin();                         return;                     } else if (BLHelper.IPAYTAYPE != 2 && DiabloLOL.RECHARGE_CHANNELS.indexOf(String.valueOf(DiabloLOL.this.iFromPay)) != -1) {                         DiabloLOL.this.payInDuanXin();                         return;                     } else {                         return;                     }                 case 102:                     OGPub.Instance().closeLoad();                     return;                 case 200:                     DiabloLOL.this.showBanner();                     return;                 case DiabloLOL.HANDLER_HIDEBANNER /*210*/:                     DiabloLOL.this.hideBanner();                     return;                 case DiabloLOL.HANDLER_SHOW_INTER_AD /*211*/:                     Log.e("qq", "HANDLER_SHOW_INTER_AD==========");                     DiabloLOL.this.showInterAd(msg.arg1);                     return;                 case DiabloLOL.HANDLER_REYUN_EXIT /*400*/:                     ReYun.exitSdk();                     return;                 case DiabloLOL.HANDLER_SHOWSHARE /*420*/:                     DiabloLOL.this.showShareDialog();                     return;                 case DiabloLOL.HANDLER_SAVEPIC /*450*/:                     BLHelper.savePic();                     return;                 case DiabloLOL.HANDLER_MONTHCONTRA /*470*/:                     DiabloLOL.this.purchaseMonthlyContract(msg.arg1);                     return;                 case DiabloLOL.HANDLER_HIDEWEBDATA /*998*/:                     BLHelper.webout();                     return;                 default:                     return;             }         }

顺便也解决下其他的函数, .method private showBanner()V和.method private showInterAd(I)V 处理掉直接返回

.class public Lcom/DBGame/DiabloLOL/DiabloLOL;

.super Lorg/cocos2dx/lib/Cocos2dxActivity;

.source "DiabloLOL.java"

.method private showBanner()V     .locals 5      .prologue     .line 338     return-void    #直接返回      const v1, 0x3e4ccccd    # 0.2f      const v2, 0x3f4ccccd    # 0.8f      const v3, 0x3f19999a    # 0.6f      const v4, 0x3e19999a    # 0.15f      :try_start_0     invoke-static {p0, v1, v2, v3, v4}, Lcn/cmgame/billing/api/game/main/Tool;->adNativeShow(Landroid/app/Activity;FFFF)V     :try_end_0     .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0      .line 342     :goto_0     return-void      .line 339     :catch_0     move-exception v0      .line 340     .local v0, "e":Ljava/lang/Exception;     invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V      goto :goto_0 .end method  .method private showInterAd(I)V     .locals 1     .param p1, "index"    # I      .prologue     .line 354     return-void  #直接返回     :try_start_0     invoke-static {p0, p1}, Lcn/cmgame/billing/api/game/main/Tool;->adIntervalShow(Landroid/app/Activity;I)V     :try_end_0     .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0      .line 358     :goto_0     return-void      .line 355     :catch_0     move-exception v0      .line 356     .local v0, "e":Ljava/lang/Exception;     invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V      goto :goto_0 .end method

3. 内购破解:

去除可能会产生费用的危险权限:

AndroidManifest.xml里搜索

android.permission.SEND_SMS

android.permission.CALL_PHONE

删掉

<uses-permission android:name="android.permission.SEND_SMS"/>  <uses-permission android:name="android.permission.CALL_PHONE"/>
电信支付接口:

logcat字符串定位,

Egame支付成功

Egame支付Cancel

order id:

搜索上面字符串,向上分析,回溯分析.

.class public Lcn/egame/terminal/paysdk/EgamePay;

.super Ljava/lang/Object;

.source "EgamePay.java"

.method public static pay(Landroid/app/Activity;Ljava/util/Map;Lcn/egame/terminal/paysdk/EgamePayListener;)V     .locals 1     .param p0, "activity"    # Landroid/app/Activity;     .param p2, "listener"    # Lcn/egame/terminal/paysdk/EgamePayListener;     .annotation system Ldalvik/annotation/Signature;         value = {             "(",             "Landroid/app/Activity;",             "Ljava/util/Map",             "<",             "Ljava/lang/String;",             "Ljava/lang/String;",             ">;",             "Lcn/egame/terminal/paysdk/EgamePayListener;",             ")V"         }     .end annotation      .prologue     .line 78     #注意paySuccess这个函数只有一个参数.method public abstract paySuccess(Ljava/util/Map;)V     #而失败payFailed这个函数有第二个整型参数 .method public abstract payFailed(Ljava/util/Map;I)V     # Egame支付成功     invoke-interface {p2, p1}, Lcn/egame/terminal/paysdk/EgamePayListener;->paySuccess(Ljava/util/Map;)V      return-void  .end method

还可以用paySuccess函数体代替payCancel和payFailed.在下面的类里,

.class Lcom/DBGame/DiabloLOL/DiabloLOL$6;

.super Ljava/lang/Object;

.source "DiabloLOL.java"

联通支付接口:

logcat字符串定位啊,

Unicom支付成功

Unicom支付cancel

在下面类修改处理,可以用goto大法或者switch大法.

.class Lcom/DBGame/DiabloLOL/DiabloLOL$4;

.super Ljava/lang/Object;

.source "DiabloLOL.java"

.method public PayResult(Ljava/lang/String;IILjava/lang/String;)V      .prologue     .line 694     goto  :pswitch_0  #联通支付接口,直接JMP无条件跳到支付成功      packed-switch p2, :pswitch_data_0 
移动支付接口:

logcat定位字符串,

购买道具:[

] 成功!

] 失败!

在下面类修改

.class Lcom/DBGame/DiabloLOL/DiabloLOL$5;

.super Ljava/lang/Object;

.source "DiabloLOL.java"

.method public onResult(ILjava/lang/String;Ljava/lang/Object;)V      .prologue     .line 735     const-string v0, ""      .line 736     .local v0, "result":Ljava/lang/String;     goto :pswitch_0   #移动支付接口,直接JMP无条件跳到支付成功      packed-switch p1, :pswitch_data_0 

4. 统一支付接口:

统一为电信的吧.可以直接成功,没那么多弹窗支付

定位字符串

电信初始化成功

.method protected onCreate(Landroid/os/Bundle;)V      .line 254     invoke-direct {p0}, Lcom/DBGame/DiabloLOL/DiabloLOL;->getSimType()I      move-result v4      iput v4, p0, Lcom/DBGame/DiabloLOL/DiabloLOL;->iFromPay:I 

进入getSimType方法函数处理结果然后赋值给iFromPay

    private int getSimType() {         int type = 0;         String sOperator = ((TelephonyManager) getSystemService("phone")).getSimOperator().trim();         if (sOperator == null || sOperator.equals("")) {             return 0;         }         switch (Integer.valueOf(sOperator).intValue()) {             case 46000:             case 46002:             case 46007:             case 46020:                 type = 0;                 break;             case 46001:             case 46006:                 type = 2;                 break;             case 46003:             case 46005:             case 46011:                 type = 1;                 break;         }         return type;     }

直接return 1;伪装为电信,支付接口统一完毕.请参看本文开头的SIM类型表格

我第一次比较麻烦的改法如下,

.method private getSimType()I     .locals 6      .prologue     .line 267     const/4 v3, 0x1  #const/4 v3, 0x0  #初始化为0是移动      .line 268     .local v3, "type":I     const-string v5, "phone"      .line 269     invoke-virtual {p0, v5}, Lcom/DBGame/DiabloLOL/DiabloLOL;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;      move-result-object v2      check-cast v2, Landroid/telephony/TelephonyManager;      .line 270     .local v2, "tm":Landroid/telephony/TelephonyManager;     invoke-virtual {v2}, Landroid/telephony/TelephonyManager;->getSimOperator()Ljava/lang/String;      move-result-object v5      invoke-virtual {v5}, Ljava/lang/String;->trim()Ljava/lang/String;      move-result-object v1      ######插入自定义log开始      invoke-static {v1}, Lcom/android/BS/Log;->LogStr(Ljava/lang/String;)V      ######插入自定义log结束      ######插入自定义log开始        const-string v0, "\n\u65e0\u9650\u5185\u8d2dB.S.\u7834\u89e3\u7248\n www.appleos.xyz \n-- by B.S."      invoke-static {v0}, Lcom/android/BS/Log;->LogStr(Ljava/lang/String;)V      ######插入自定义log结束      .line 271     .local v1, "sOperator":Ljava/lang/String;     if-eqz v1, :cond_0      const-string v5, ""      invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z      move-result v5      if-eqz v5, :cond_1      :cond_0     move v4, v3    #移动为0      .line 295     .end local v3    # "type":I     .local v4, "type":I     :goto_0     return v4      .line 274     .end local v4    # "type":I     .restart local v3    # "type":I     :cond_1     invoke-static {v1}, Ljava/lang/Integer;->valueOf(Ljava/lang/String;)Ljava/lang/Integer;      move-result-object v5      invoke-virtual {v5}, Ljava/lang/Integer;->intValue()I      move-result v0      .line 275     .local v0, "sCode":I     packed-switch v0, :pswitch_data_0      :goto_1     :pswitch_0     move v4, v3      .line 295     .end local v3    # "type":I     .restart local v4    # "type":I     goto :goto_0      .line 280     .end local v4    # "type":I     .restart local v3    # "type":I     :pswitch_1     const/4 v3, 0x1  #const/4 v3, 0x0   #移动      .line 281     goto :goto_1      .line 284     :pswitch_2     const/4 v3, 0x1  #const/4 v3, 0x2   #联通      .line 285     goto :goto_1      .line 289     :pswitch_3     const/4 v3, 0x1    #电信      .line 290     goto :goto_1      .line 275     :pswitch_data_0     .packed-switch 0xb3b0             :pswitch_1         :pswitch_2         :pswitch_1         :pswitch_3         :pswitch_0         :pswitch_3         :pswitch_2         :pswitch_1         :pswitch_0         :pswitch_0         :pswitch_0         :pswitch_3         :pswitch_0         :pswitch_0         :pswitch_0         :pswitch_0         :pswitch_0         :pswitch_0         :pswitch_0         :pswitch_0         :pswitch_1     .end packed-switch .end method

也可以直接return 0,伪装为移动,统一为移动支付.

.method private getSimType()I     .locals 6      ###统一为移动短信支付接口直接返回为0     #const/4 v4, 0x0      #return v4 .end method

然后处理移动短信支付的函数方法payInYidong(),移动短信支付的另外一种破解方法,

.class Lcom/DBGame/DiabloLOL/DiabloLOL$5;

.super Ljava/lang/Object;

.source "DiabloLOL.java"

把移动购买成功的代码,就是:pswitch_0里两个goto :goto_0之间的有效代码,直接搬到payInYidong()里,放到:cond_0和return-void之间.

    .line 755     :goto_0     invoke-static {}, Lcom/DBGame/Common/BLHelper;->closeShieldLayer()V      .line 756     return-void      .line 738     :pswitch_0     const-string v1, "10"      invoke-virtual {p3}, Ljava/lang/Object;->toString()Ljava/lang/String;      move-result-object v2      invoke-virtual {v1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z      move-result v1      if-eqz v1, :cond_0      .line 739     const-string v0, "\u77ed\u4fe1\u8ba1\u8d39\u8d85\u65f6"      goto :goto_0      .line 741     :cond_0  ###从下面一句开始购买成功,不弹窗.     new-instance v1, Ljava/lang/StringBuilder;      invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V      const-string v2, "\u8d2d\u4e70\u9053\u5177\uff1a["      invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;      move-result-object v1      iget-object v2, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$5;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;  #和下一语句合并      iget-object v2, v2, Lcom/DBGame/DiabloLOL/DiabloLOL;->PAY_NAME:[Ljava/lang/String;      iget-object v3, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$5;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;  #和下一语句合并      # getter for: Lcom/DBGame/DiabloLOL/DiabloLOL;->mPayIndex:I     invoke-static {v3}, Lcom/DBGame/DiabloLOL/DiabloLOL;->access$800(Lcom/DBGame/DiabloLOL/DiabloLOL;)I      move-result v3      aget-object v2, v2, v3      invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;      move-result-object v1      const-string v2, "] \u6210\u529f\uff01"      invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;      move-result-object v1      invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;      move-result-object v0      .line 742     iget-object v1, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$5;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;  #和下一语句合并      iget-object v1, v1, Lcom/DBGame/DiabloLOL/DiabloLOL;->PRO_ID_Str:[Ljava/lang/String;      iget-object v2, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$5;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;  #和下一语句合并      # getter for: Lcom/DBGame/DiabloLOL/DiabloLOL;->mPayIndex:I     invoke-static {v2}, Lcom/DBGame/DiabloLOL/DiabloLOL;->access$800(Lcom/DBGame/DiabloLOL/DiabloLOL;)I      move-result v2      aget-object v1, v1, v2      const/4 v2, 0x1      invoke-static {v1, v2}, Lcom/DBGame/Common/BLHelper;->purchaseComplete(Ljava/lang/String;I)V      goto :goto_0  ###购买成功不弹窗到goto那边的closeShieldLayer语句然后返回结束      .line 748     :pswitch_1

最后应该变为java源码如下面的样子:

private void payInYidong() {         if (LOLConstant.sCMCC_OPEN == 0) {             BLHelper.showShieldLayer("正在处理,请稍后.....");         }         String str = "购买道具:[" + this.PAY_NAME[this.mPayIndex] + "] 成功!";         BLHelper.purchaseComplete(this.PRO_ID_Str[this.mPayIndex], 1);         BLHelper.closeShieldLayer();     }

有童靴反应真机内购,会卡在"正在处理,请稍后.....",其实这个要等一会的,等一会儿就消失了. 不愿意等太长时间,那么就干脆干掉她,如下,只要上面说的两个goto :goto_0夹着那段代码,另外记得这里面的代码,需要合并处理this指针问题哟.

private void payInYidong() {         String str = "购买道具:[" + this.PAY_NAME[this.mPayIndex] + "] 成功!";         BLHelper.purchaseComplete(this.PRO_ID_Str[this.mPayIndex], 1);     }
几种支付方式如下:(短信,联通,移动,Egame支付)

其中电信用的是Egame支付

    private void payInDuanXin() {         if (RECHARGE_CHANNELS.indexOf(String.valueOf(this.iFromPay)) != -1) {             if (this.iFromPay == 2) {                 payInUnicom();             } else if (this.iFromPay == 0) {                 payInYidong();             } else if (this.iFromPay == 1) {                 payInEgame();             }         }     }      private void payInUnicom() {         Utils.getInstances().pay(this, this.PAY_CODE_UNICOM[this.mPayIndex], new UnipayPayResultListener() {             public void PayResult(String arg0, int arg1, int arg2, String arg3) {                 switch (arg1) {                     case 1:                         DiabloLOL.this.setPayment();                         BLHelper.purchaseComplete(DiabloLOL.this.PRO_ID_Str[DiabloLOL.this.mPayIndex], 1);                         BLHelper.closeShieldLayer();                         Log.e("qq", "Unicom支付成功");                         return;                     case 2:                         BLHelper.closeShieldLayer();                         Log.e("qq", "Unicom支付Fail");                         return;                     case 3:                         BLHelper.closeShieldLayer();                         Log.e("qq", "Unicom支付cancel");                         return;                     default:                         Log.e("qq", "Unicom支付Default");                         return;                 }             }         });     }      private void payInYidong() {         if (LOLConstant.sCMCC_OPEN == 0) {             BLHelper.showShieldLayer("正在处理,请稍后.....");         }         GameInterface.doBilling(this, true, true, this.PAY_CODE_MM[this.mPayIndex], null, this.payCallback);     }      public void payInEgame() {         HashMap<String, String> payParams = new HashMap();         payParams.put(EgamePay.PAY_PARAMS_KEY_TOOLS_ALIAS, this.PAY_CODE_SMS[this.mPayIndex]);         if (this.iOpen == -1) {             this.iOpen = BLHelper.getOpenCTCC("ctcc", this, true);         }         Log.e("qq", "iOpen=" + this.iOpen);         if (this.iOpen == 1) {             this.gameManager.gameConfig.PaySdkUIForCP = 1;         } else {             this.gameManager.gameConfig.PaySdkUIForCP = 0;         }         this.gameManager.EGamePay(payParams, new EgamePayListener() {             public void paySuccess(Map<String, String> map) {                 DiabloLOL.this.setPayment();                 BLHelper.purchaseComplete(DiabloLOL.this.PRO_ID_Str[DiabloLOL.this.mPayIndex], 1);                 BLHelper.closeShieldLayer();                 Log.e("qq", "Egame支付成功");                 DiabloLOL.this.mPayIndex = -1;             }              public void payFailed(Map<String, String> map, int arg1) {                 BLHelper.closeShieldLayer();                 Log.e("qq", "Egame支付Fail==" + arg1);                 DiabloLOL.this.mPayIndex = -1;             }              public void payCancel(Map<String, String> map) {                 BLHelper.closeShieldLayer();                 Log.e("qq", "Egame支付Cancel");                 DiabloLOL.this.mPayIndex = -1;             }         });     }

[1] [2]  下一页



热门文章
  • 机械革命S1 PRO-02 开机不显示 黑...
  • 联想ThinkPad NM-C641上电掉电点不...
  • 三星一体激光打印机SCX-4521F维修...
  • 通过串口命令查看EMMC擦写次数和判...
  • IIS 8 开启 GZIP压缩来减少网络请求...
  • 索尼kd-49x7500e背光一半暗且闪烁 ...
  • 楼宇对讲门禁读卡异常维修,读卡芯...
  • 新款海信电视机始终停留在开机界面...
  • 常见打印机清零步骤
  • 安装驱动时提示不包含数字签名的解...
  • 共享打印机需要密码的解决方法
  • 图解Windows 7系统快速共享打印机的...
  • 锦州广厦电脑上门维修

    报修电话:13840665804  QQ:174984393 (联系人:毛先生)   
    E-Mail:174984393@qq.com
    维修中心地址:锦州广厦电脑城
    ICP备案/许可证号:辽ICP备2023002984号-1
    上门服务区域: 辽宁锦州市区
    主要业务: 修电脑,电脑修理,电脑维护,上门维修电脑,黑屏蓝屏死机故障排除,无线上网设置,IT服务外包,局域网组建,ADSL共享上网,路由器设置,数据恢复,密码破解,光盘刻录制作等服务

    技术支持:微软等