smali switch
1 @Override 2 public void onClick(View v) { 3 switch (v.getId()) { 4 case R.id.stop: //0x7f05003d 5 Log.d(TAG, "xxstop"); 6 break; 7 case R.id.start: //0x7f05003c 8 String msg = "begin to start"; 9 toToast(msg); 10 break; 11 case R.id.cancel: //0x7f05003e 12 Log.d(TAG, "cancel"); 13 break; 14 default: 15 break; 16 } 17 }
在switch中,将case语句的选项编译成连续的id,并且每个case以一个lable来标识。
//R$id.smali # static fields .field public static final cancel:I = 0x7f05003e .field public static final start:I = 0x7f05003c .field public static final stop:I = 0x7f05003d
# virtual methods .method public onClick(Landroid/view/View;)V .locals 3 .param p1, "v" # Landroid/view/View; .prologue .line 55 invoke-virtual {p1}, Landroid/view/View;->getId()I move-result v1 packed-switch v1, :pswitch_data_0 .line 69 :goto_0 return-void .line 57 :pswitch_0 const-string v1, "MY_TAG" const-string v2, "xxstop" invoke-static {v1, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I goto :goto_0 #跳到switch语句结束的地方 .line 60 :pswitch_1 const-string v0, "begin to start" .line 61 .local v0, "msg":Ljava/lang/String; invoke-virtual {p0, v0}, Lcom/example/wang/MainActivity;->toToast(Ljava/lang/String;)V goto :goto_0 .line 64 .end local v0 # "msg":Ljava/lang/String; :pswitch_2 const-string v1, "MY_TAG" const-string v2, "cancel" invoke-static {v1, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I goto :goto_0 .line 55 :pswitch_data_0 .packed-switch #0x7f05003c :pswitch_1 #0x7f05003c start :pswitch_0 #0x7f05003d stop :pswitch_2 #0x7f05003e cancel .end packed-switch .end method
-------------------------------------------------------------------------------
37 public void doSomething() { 38 try { 39 Thread.sleep(1000); 40 } catch(Exception e) { 41 e.printStackTrace(); 42 } 43 }
# virtual methods .method public doSomething()V .registers 3 .prologue .line 39 const-wide/16 v0, 0x3e8 #0x3e8 = 1000 :try_start_2 invoke-static {v0, v1}, Ljava/lang/Thread;->sleep(J)V :try_end_5 .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_5} :catch_6 #如果有异常则跳到catch_6 .line 43 :goto_5 return-void .line 40 :catch_6 move-exception v0 .line 41 invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V goto :goto_5 .end method

浙公网安备 33010602011771号