smali 코드 분석

6480 단어
java   :
  public void payFailed(Map paramMap, int paramInt)
  {
    Log.d("cocos2d-x debug info", "Failed DX_payCode2 == " + IAPListener.DX_PAYCODES[this.this$0.curPayIndex]);
    Log.d("cocos2d-x debug info", "FaildCode == " + paramInt);
    GameJni.OderFinish(this.this$0.curPayIndex, 0);
    IAPListener.iapHandler.sendMessage(Message.obtain(IAPListener.iapHandler, 10005, IAPListener.DX_PAYCODES[this.this$0.curPayIndex]));
  }

대응하는 smali 문:
.method public payFailed(Ljava/util/Map;I)V
    .locals 5
    .param p1, "params"    # Ljava/util/Map;
    .param p2, "arg1"    # I

    .prologue
    .line 208
    const-string v0, "cocos2d-x debug info"
     #1.new instance
    new-instance v1, Ljava/lang/StringBuilder;
       #2    
    invoke-direct {v1}, Ljava/lang/StringBuilder;->()V
     #       log.d       
    const-string v2, "Failed DX_payCode2 == "
        #3.  append  
    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1
#   DX_PAYCODES  
    sget-object v2, Lcom/payCom/org/IAPListener;->DX_PAYCODES:[Ljava/lang/String;

    iget-object v3, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;

    iget v3, v3, Lcom/payCom/org/IAPListener;->curPayIndex:I              
      #    v2    v3   v2
    aget-object v2, v2, v3
     #     v1.append(v2),  20/73                                        
    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
      #    invoke             v1,
#            v1  
    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 209
    const-string v0, "cocos2d-x debug info"

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;->()V

    const-string v2, "FaildCode == "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 210
    iget-object v0, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;

    iget v0, v0, Lcom/payCom/org/IAPListener;->curPayIndex:I

    const/4 v1, 0x0

    invoke-static {v0, v1}, Lcom/payCom/org/GameJni;->OderFinish(II)V

    .line 211
    sget-object v0, Lcom/payCom/org/IAPListener;->iapHandler:Lcom/payCom/org/IAPHandler;

    sget-object v1, Lcom/payCom/org/IAPListener;->iapHandler:Lcom/payCom/org/IAPHandler;

    const/16 v2, 0x2715

    sget-object v3, Lcom/payCom/org/IAPListener;->DX_PAYCODES:[Ljava/lang/String;

    iget-object v4, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;

    iget v4, v4, Lcom/payCom/org/IAPListener;->curPayIndex:I

    aget-object v3, v3, v4

    invoke-static {v1, v2, v3}, Landroid/os/Message;->obtain(Landroid/os/Handler;ILjava/lang/Object;)Landroid/os/Message;

    move-result-object v1

    invoke-virtual {v0, v1}, Lcom/payCom/org/IAPHandler;->sendMessage(Landroid/os/Message;)Z

    .line 212
    return-void
.end method
.method public payFailed(Ljava/util/Map;I)V:.method은 이것이 방법이라는 것을 나타낸다. payFailed은 방법 이름이고 (Ljava/util/Map;I)은 함수 안의 형참인 v을 반환값으로 하고 반환값은 비어 있다. 여기 .locals 5은 국부 변수 레지스터 .param p1, "params"을 정의한다. 성명 매개 변수params는 p명칭방식 .param p2, "arg1"성명 매개 변수arg1 .prologue은 함수 시작 .end method은 함수 끝을 나타낸다.const-string v0, "cocos2d-x debug info"은 문자열의 상수 변수 "Failed DX_payCode2 == " + IAPListener.DX_PAYCODES[this.this$0.curPayIndex]을 정의했다. 이것은 "Failed DX_payCode2 == "이 문자열이 다른 문자열과 합쳐져 긴 문자열이 되었다는 것을 나타낸다."Failed DX payCode2 =="은(는) 개체를 ""저장""해야 하므로 개체를 먼저 new(인스턴스)"그리고 구조 함수를 호출한다.new-instance v1, Ljava/lang/StringBuilder: new 실례를 하나 제시하기;invoke-direct {v1}, Ljava/lang/StringBuilder;->()V: 구조 호출;const-string v2, "Failed DX_payCode2 == "의 문자열을 정의하여 "Failed DX_payCode2 == " + IAPListener.DX_PAYCODES[this.this$0.curPayIndex]을 준비합니다.invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder: append라는 함수를 호출하여 "Failed DX_payCode2 == " + IAPListener.DX_PAYCODES[this.this$0.curPayIndex]을 실시한다.move-result-object v1에서 방금 얻은 값을 v1에 넣기;sget-object v2, Lcom/payCom/org/IAPListener;->DX_PAYCODES:[Ljava/lang/String; Lcom/payCom/org/IAPlistener 클래스의 대상 DX 획득PAYCODES iget-object v3, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener; 호출(수령) 대상은 사실this$0(내부 클래스)(즉 .this$0) iget v3, v3, Lcom/payCom/org/IAPListener;->curPayIndex:I 인덱스(정형)를 찍는 것이다.aget-object v2, v2, v3 수조 v2(두 번째 v2)의 세 번째 요소 v2(첫 번째 v2) 가져오기invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; 호출 허위 방법 v1.append(v2), 주의, 여기 v1에 이미 "Failed DX_payCode2 == " + IAPListener.DX_PAYCODES[this.this$0.curPayIndex]이 있습니다. 여기에 append`` 함수를 호출하면 v2를 추가하고 싶습니다.move-result-object v1에서 얻은 값을 v1에 넣기;invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;에서 허함수를 호출하여 마지막 문자열을 얻기;move-result-object v1의 작용이 같다.invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I은 정적 방법을 호출하는데 v0은 함수 내의 국부 변수 const-string v0, "cocos2d-x debug info"을 가리킨다. 마지막으로 이 함수는 Log.d("cocos2d-x debug info", "Failed DX_payCode2 == " + IAPListener.DX_PAYCODES[this.this$0.curPayIndex])에 해당한다.

좋은 웹페이지 즐겨찾기