2016-11-15 148 views
0

我试图将else状态的代码复制到if语句中。 在这里我看到if-eqz作为if条件,但我不知道其他条件在这里。有人可以帮我找到其他条件,以便我可以将它复制成if代码。将else语句复制到if语句

我也想知道哪里是起点和else语句体

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 
+1

可能重复[如果修改其他人](http://stackoverflow.com/questions/40585903/smali-else-to-if-modification) – JesusFreke

+0

请不要发布重复的问题。在这种情况下,您应该使用新信息编辑您的原始问题。 – JesusFreke

回答

0

你的例子似乎不完全结束。例如它有goto :goto_0但不包含:goto_0标签。无论如何,下面的例子应该可以帮助你弄清楚如何处理你的案例。 Smali如下代码:

if-nez v0, :cond_0 

const-string v2, "hello 1" 

:goto_0 
return-void 

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

对应的Java代码,如:

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

goto语句和分支的确切位置取决于编译器。此外,对于不同的情况,您可能会看到if-nezif-eqz或其他一些声明。