承接上篇Android反编译之修改Smali文件,本篇主要分析如何在 Smali文件中输出日志,帮助我们理解App 业务处理逻辑。
1.我们先写这样一个简单的demo
smaliLogDemoApp.gif
App 登陆界面,对用户名和密码做简单的逻辑验证,同时有一个FloatingActionBar,点击之后显示Snackbar。
我们现在要做的,在登陆验证的方法里,添加日志输出,分别输出登陆成功,登陆失败。在FloatingActionBar 的响应事件中,添加日志输出。
2.反编译SmaliLogDemo
demo 比较简单,我这里直接给出反编译之后的 Smali 文件。
.class public Lcom/imesong/smalilogdemo/MainActivity;
.super Landroid/support/v7/app/AppCompatActivity;
.source "MainActivity.java"
# instance fields
.field private login:Landroid/widget/Button;
.field private nameEdit:Landroid/support/v7/widget/AppCompatEditText;
.field private passwdEdit:Landroid/support/v7/widget/AppCompatEditText;
# direct methods
.method public constructor ()V
.locals 0
.prologue
.line 16
invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;->()V
return-void
.end method
.method static synthetic access$000(Lcom/imesong/smalilogdemo/MainActivity;)Landroid/support/v7/widget/AppCompatEditText;
.locals 1
.param p0, "x0" # Lcom/imesong/smalilogdemo/MainActivity;
.prologue
.line 16
iget-object v0, p0, Lcom/imesong/smalilogdemo/MainActivity;->nameEdit:Landroid/support/v7/widget/AppCompatEditText;
return-object v0
.end method
.method static synthetic access$100(Lcom/imesong/smalilogdemo/MainActivity;)Landroid/support/v7/widget/AppCompatEditText;
.locals 1
.param p0, "x0" # Lcom/imesong/smalilogdemo/MainActivity;
.prologue
.line 16
iget-object v0, p0, Lcom/imesong/smalilogdemo/MainActivity;->passwdEdit:Landroid/support/v7/widget/AppCompatEditText;
return-object v0
.end method
.method static synthetic access$200(Lcom/imesong/smalilogdemo/MainActivity;Ljava/lang/String;Ljava/lang/String;)Z
.locals 1
.param p0, "x0" # Lcom/imesong/smalilogdemo/MainActivity;
.param p1, "x1" # Ljava/lang/String;
.param p2, "x2" # Ljava/lang/String;
.prologue
.line 16
invoke-direct {p0, p1, p2}, Lcom/imesong/smalilogdemo/MainActivity;->isLogingInfoValid(Ljava/lang/String;Ljava/lang/String;)Z
move-result v0
return v0
.end method
.method private isLogingInfoValid(Ljava/lang/String;Ljava/lang/String;)Z
.locals 4
.param p1, "name" # Ljava/lang/String;
.param p2, "passwd" # Ljava/lang/String;
.prologue
const/4 v3, 0x0
.line 59
const/4 v0, 0x0
.line 60
.local v0, "isValid":Z
invoke-static {p1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v1
if-nez v1, :cond_0
invoke-static {p2}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v1
if-eqz v1, :cond_1
.line 61
:cond_0
const/4 v0, 0x0
.line 62
const-string v1, "\u7528\u6237\u540d\u3001\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a"
invoke-static {p0, v1, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v1
invoke-virtual {v1}, Landroid/widget/Toast;->sh