Skip to content

Instantly share code, notes, and snippets.

@michelerenzullo
Last active March 10, 2021 21:42
Show Gist options
  • Save michelerenzullo/bcbbbeeab879ffc5af04c8949f1e03c1 to your computer and use it in GitHub Desktop.
Save michelerenzullo/bcbbbeeab879ffc5af04c8949f1e03c1 to your computer and use it in GitHub Desktop.
smali copyFiles function
.method public static copyFiles(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
.registers 11
new-instance v0, Ljava/io/File;
invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;
move-result-object v1
const-string v2, "Download/Effects"
invoke-direct {v0, v1, v2}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/io/File;->exists()Z
move-result v1
if-nez v1, :cond_14
invoke-virtual {v0}, Ljava/io/File;->mkdir()Z
:cond_14
new-instance v1, Ljava/io/File;
invoke-direct {v1, p0}, Ljava/io/File;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Ljava/io/File;->list()[Ljava/lang/String;
move-result-object v1
const/4 v2, 0x0
if-eqz v1, :cond_88
array-length v3, v1
if-lez v3, :cond_88
new-instance v3, Ljava/io/File;
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v4, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string p2, " - "
invoke-virtual {v4, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {v3, v0, p1}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
invoke-virtual {v3}, Ljava/io/File;->exists()Z
move-result p1
if-nez p1, :cond_45
invoke-virtual {v3}, Ljava/io/File;->mkdir()Z
:cond_45
array-length p1, v1
const/4 p2, 0x0
:goto_47
if-ge p2, p1, :cond_86
aget-object v0, v1, p2
new-instance v4, Ljava/io/File;
invoke-direct {v4, v3, v0}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
invoke-virtual {v4}, Ljava/io/File;->exists()Z
move-result v5
if-nez v5, :cond_83
new-instance v5, Ljava/io/BufferedInputStream;
new-instance v6, Ljava/io/FileInputStream;
new-instance v7, Ljava/io/File;
invoke-direct {v7, p0, v0}, Ljava/io/File;-><init>(Ljava/lang/String;Ljava/lang/String;)V
invoke-direct {v6, v7}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
invoke-direct {v5, v6}, Ljava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;)V
new-instance v0, Ljava/io/BufferedOutputStream;
new-instance v6, Ljava/io/FileOutputStream;
invoke-direct {v6, v4}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V
invoke-direct {v0, v6}, Ljava/io/BufferedOutputStream;-><init>(Ljava/io/OutputStream;)V
const/high16 v4, 0x100000
new-array v4, v4, [B
:goto_73
invoke-virtual {v5, v4}, Ljava/io/BufferedInputStream;->read([B)I
move-result v6
if-lez v6, :cond_7d
invoke-virtual {v0, v4, v2, v6}, Ljava/io/BufferedOutputStream;->write([BII)V
goto :goto_73
:cond_7d
invoke-virtual {v0}, Ljava/io/BufferedOutputStream;->close()V
invoke-virtual {v5}, Ljava/io/BufferedInputStream;->close()V
:cond_83
add-int/lit8 p2, p2, 0x1
goto :goto_47
:cond_86
const/4 p0, 0x1
return p0
:cond_88
return v2
.end method
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment