2016-11-15 2 views
0

J'essaie de copier le code de l'état else à l'instruction if. Ici, je vois if-eqz comme condition if mais je ne sais pas où la condition else est ici. Quelqu'un peut-il m'aider à trouver d'autres conditions afin que je puisse le copier pour devenir le code if aussi.copie instruction else à if instruction

Je veux aussi savoir où est le début et la fin du corps de l'instruction 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

Copie possible de [smali else to if modification] (http://stackoverflow.com/questions/40585903/smali-else-to-if-modification) – JesusFreke

+0

Veuillez ne pas poster de questions en double. Dans ce cas, vous devriez avoir modifié votre question originale avec les nouvelles informations. – JesusFreke

Répondre

0

Votre exemple semble incomplète. Par exemple, il a goto :goto_0 mais ne contient pas l'étiquette :goto_0. Dans tous les cas, l'exemple suivant devrait vous aider à comprendre comment gérer votre cas. Code Smali comme ce qui suit:

if-nez v0, :cond_0 

const-string v2, "hello 1" 

:goto_0 
return-void 

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

Correspond à code Java comme:

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

Le placement exact des déclarations et goto branches dépend du compilateur. Aussi pour différentes conditions, vous pouvez voir if-nez ou if-eqz ou d'autres déclarations.