问题描述:

I am trying to copy the code of else state to the if statement.

In here I see if-eqz as the if condition but I don't know where the else condition is here. Can someone help me find else condition so that I can copy it to become the if code also.

I also want to know where is the start and the end of the else statement body

if-eqz v1, :cond_1

.line 103

:goto_1

return-object v0

.line 82

:cond_0

invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;

move-result-object v0

invoke-virtual {v0}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

move-result-object v0

.line 83

new-instance v2, Ljava/lang/StringBuilder;

invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

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

move-result-object v0

const-string v2, "/Android/data/"

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

move-result-object v0

sget-object v2, Lcom/lingren/game/MonoJavaHelper;->s_Application:Landroid/app/Application;

invoke-virtual {v2}, Landroid/app/Application;->getPackageName()Ljava/lang/String;

move-result-object v2

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

move-result-object v0

const-string v2, "/files/Res/AssistObj/"

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

move-result-object v0

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

move-result-object v0

.line 84

const-string v2, "MonoJavaHelper"

new-instance v3, Ljava/lang/StringBuilder;

invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V

const-string v4, "ExternalStorageState Not UseAble:"

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

move-result-object v3

invoke-virtual {v3, v1}, 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 v1

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

goto :goto_0

.line 95

:cond_1

:try_start_1

invoke-virtual {p0}, Landroid/app/Activity;->getApplicationContext()Landroid/content/Context;

move-result-object v1

invoke-virtual {v1}, Landroid/content/Context;->getFilesDir()Ljava/io/File;

move-result-object v1

invoke-virtual {v1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

move-result-object v0

.line 96

new-instance v1, Ljava/lang/StringBuilder;

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

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

move-result-object v1

const-string v2, "/Res/AssistObj/"

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;

:try_end_1

.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0

move-result-object v0

goto :goto_1

网友答案:

Your example seems incomplete. For example it has goto :goto_0 but doesn't contain the :goto_0 label. In any event, the following example should help you to figure out how to handle your case. Smali code like the following:

if-nez v0, :cond_0

const-string v2, "hello 1"

:goto_0
return-void

:cond_0
const-string v2, "hello 2"
goto :goto_0

Corresponds to Java code like:

if (i == 0) {
    s = "hello 1";
}
else {
    s = "hello 2";
}
return;

The exact placement of goto statements and branches depends on compiler. Also for different conditions you may see if-nez or if-eqz or some other statements.

相关阅读:
Top