Pathmod is forcing Minecraft to use /sdcard/ instead of /data/user/0/ and /sdcard/Android/data.
Replace all from:
invoke-virtual {p0}, Lcom/mojang/minecraftpe/MainActivity;->getDataDir()Ljava/io/File;
const/4\s+v0,\s+0x0\s*(?:\R\s*\.line\s+\d+\s*)?\R\s*invoke-virtual\s+\{p0,\s*v0\},\s*Lcom/mojang/minecraftpe/MainActivity;->getExternalFilesDir\(Ljava/lang/String;\)Ljava/io/File;
To:
invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;
Regex is required to find strings
Replace from:
(?s)\.method\s+public\s+getLegacyExternalStoragePath\(Ljava/lang/String;\)Ljava/lang/String;.*?\.end\s+method
To:
.method public getLegacyExternalStoragePath(Ljava/lang/String;)Ljava/lang/String;
.registers 2
const-string p0, ""
return-object p0
.end method
Regex is required to find the method
Paste these methods in the end of MainActivity.smali:
.method public IfStoragePermissionWasDenied(Landroid/content/Context;)V
.registers 4
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x1e
if-lt v0, v1, :cond_22
invoke-static {}, Landroid/os/Environment;->isExternalStorageManager()Z
move-result v0
if-eqz v0, :cond_d
return-void
:cond_d
const-string v0, "Storage permission is required"
const/4 v1, 0x1
invoke-static {p1, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v1
invoke-virtual {v1}, Landroid/widget/Toast;->show()V
invoke-static {}, Landroid/os/Process;->myPid()I
move-result v1
invoke-static {v1}, Landroid/os/Process;->killProcess(I)V
invoke-virtual {p0}, Landroid/app/Activity;->finish()V
return-void
:cond_22
const-string v0, "android.permission.WRITE_EXTERNAL_STORAGE"
invoke-virtual {p0, v0}, Landroid/app/Activity;->checkSelfPermission(Ljava/lang/String;)I
move-result v0
if-nez v0, :cond_d
return-void
.end method
.method public RequestPermission()V
.registers 9
const/4 v7, 0x0
const/4 v6, 0x1
const/4 v5, 0x0
sget v3, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v4, 0x1e
if-lt v3, v4, :cond_27
invoke-static {}, Landroid/os/Environment;->isExternalStorageManager()Z
move-result v3
if-nez v3, :cond_41
new-instance v3, Landroid/content/Intent;
sget-object v4, Landroid/provider/Settings;->ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION:Ljava/lang/String;
invoke-direct {v3, v4}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
const-string v4, "package"
invoke-virtual {p0}, Landroid/app/Activity;->getPackageName()Ljava/lang/String;
move-result-object v5
invoke-static {v4, v5, v7}, Landroid/net/Uri;->fromParts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
move-result-object v4
invoke-virtual {v3, v4}, Landroid/content/Intent;->setData(Landroid/net/Uri;)Landroid/content/Intent;
invoke-virtual {p0, v3}, Landroid/app/Activity;->startActivity(Landroid/content/Intent;)V
goto :goto_41
:cond_27
const-string v3, "android.permission.WRITE_EXTERNAL_STORAGE"
invoke-virtual {p0, v3}, Landroid/app/Activity;->checkSelfPermission(Ljava/lang/String;)I
move-result v3
if-eqz v3, :cond_41
const/4 v3, 0x2
new-array v3, v3, [Ljava/lang/String;
const/4 v4, 0x0
const-string v5, "android.permission.WRITE_EXTERNAL_STORAGE"
aput-object v5, v3, v4
const/4 v4, 0x1
const-string v5, "android.permission.READ_EXTERNAL_STORAGE"
aput-object v5, v3, v4
const/16 v4, 0x64
invoke-virtual {p0, v3, v4}, Landroid/app/Activity;->requestPermissions([Ljava/lang/String;I)V
:cond_41
:goto_41
return-void
.end method
After adding RequestPermission()V and IfStoragePermissionWasDenied(Landroid/content/Context;)V, add this string to the start of OnCreate:
invoke-virtual {p0}, Lcom/mojang/minecraftpe/MainActivity;->RequestPermission()V
invoke-virtual {p0, p0}, Lcom/mojang/minecraftpe/MainActivity;->IfStoragePermissionWasDenied(Landroid/content/Context;)V
Paste them above </manifest>:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
Remove android:maxSdkVersion="32" (If it isn't there, don't mind about it):

