錦州市廣廈電腦維修|上門維修電腦|上門做系統|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共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    主站蜘蛛池模板: 无码人妻久久一区二区三区免费丨| 免费无码不卡视频在线观看| 伊人久久大香线蕉无码| 亚洲无码精品浪潮| 久久久久亚洲AV无码永不| 亚洲国产精品无码久久98| 下载天堂国产AV成人无码精品网站| 久久精品国产亚洲AV无码偷窥 | 亚洲午夜成人精品无码色欲| 精品无人区无码乱码毛片国产 | 人妻系列无码专区久久五月天| 无码少妇一区二区性色AV| 亚洲AV无码成H人在线观看| 久久久久亚洲AV无码永不| 亚洲成AV人片天堂网无码| 无码视频在线播放一二三区| 精品人妻系列无码人妻漫画| 精品亚洲AV无码一区二区| 久久久久亚洲AV无码专区首| 国产成人亚洲综合无码精品 | 亚洲午夜无码久久| 中文无码字慕在线观看| 国产爆乳无码视频在线观看 | 久久精品亚洲中文字幕无码网站| 国产做无码视频在线观看| 无码中文av有码中文av| 一本无码人妻在中文字幕免费| 亚洲AV综合色区无码二区爱AV| 丰满熟妇乱又伦在线无码视频| 亚洲色无码一区二区三区| 国产精品一区二区久久精品无码| 国产成人无码av在线播放不卡| 好了av第四综合无码久久| 亚洲另类无码专区首页| 国产精品无码久久综合网| 免费无遮挡无码视频在线观看| 无码毛片一区二区三区视频免费播放 | 亚洲av麻豆aⅴ无码电影| 中文无码乱人伦中文视频在线V| yy111111电影院少妇影院无码| 久久无码精品一区二区三区|