move-result-object v1 :goto_4 #循环处理开始 invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z #是否处理完 move-result v0 if-eqz v0, :cond_0 invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Laqo; iget-object v0, v0, Laqo;->b:Ljava/lang/String; invoke-direct {p0, v0}, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->a(Ljava/lang/String;)V goto :goto_4 #☻调用 a(Ljava/lang/String;)V 后跳走☻ :cond_3 invoke-direct {p0}, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->f()V #f()V 方法刷新显示 goto/16 :goto_0 :catch_0 move-exception v1 goto :goto_3 :catch_1 move-exception v1 goto/16 :goto_1 :pswitch_data_0 .packed-switch 0x7f0a0032 #3 个分支 :pswitch_1 :pswitch_0 :pswitch_2 .end packed-switch .end method 这个“onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V”是列 表点击事件的完整处理代码,虽然被混淆过,仔细的分析还是能看出代码通过三个 Switch 分支对不同的状况进行了处理,为 0 直接返回,而 1 与 2 的情况整体上差不多,只是在迭代处理的时候分别调用了“b(Ljava/lang/String;)V”与“a(Ljava/lang/String;)V”方法, 看看“b(Ljava/lang/String;)V”的代码: .method private b(Ljava/lang/String;)V .locals 1 const-string v0, "disable" invoke-direct {p0, v0, p1}, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->a(Ljava/lang/String;Ljav a/lang/String;)V return-void .end method 只 是 传 递 了 “ disable ” 字 符 串 然 后 调 用 了 “a(Ljava/lang/String;Ljava/lang/String;)V”方法,代码如下: .method private a(Ljava/lang/String;Ljava/lang/String;)V .locals 3 new-instance v0, Ljava/lang/StringBuffer; const-string v1, "pm" invoke-direct {v0, v1}, Ljava/lang/StringBuffer;-><init>(Ljava/lang/String;)V #"pm" const-string v1, " " invoke-virtual {v0, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; #"pm " 注意:后面加了空格 invoke-virtual {v0, p1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; #"pm 参数 1" const-string v1, " " invoke-virtual {v0, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; #"pm 参数 1 "注意:后面加了空格 const-string v1, "$" const-string v2, "\\$" invoke-virtual {p2, v1, v2}, |