diff --git a/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java b/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java index cb017daafcfdc1..f8938e9fff316c 100644 --- a/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java +++ b/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java @@ -146,33 +146,34 @@ public void onDestroy() { static void unzipAssets(Context context, String toPath, String zipName) { AssetManager assetManager = context.getAssets(); - try { - InputStream inputStream = assetManager.open(zipName); - ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(inputStream)); + try (InputStream inputStream = assetManager.open(zipName); + ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(inputStream))) { + ZipEntry zipEntry; byte[] buffer = new byte[4096]; while ((zipEntry = zipInputStream.getNextEntry()) != null) { String fileOrDirectory = zipEntry.getName(); - Uri.Builder builder = new Uri.Builder(); - builder.scheme("file"); - builder.appendPath(toPath); - builder.appendPath(fileOrDirectory); - String fullToPath = builder.build().getPath(); + File file = new File(toPath, fileOrDirectory); + File parent = new File(file.getParent()); + if (zipEntry.isDirectory()) { - File directory = new File(fullToPath); - directory.mkdirs(); + file.mkdirs(); continue; } + else if (!parent.exists()) { + parent.mkdirs(); + } + + String fullToPath = file.getAbsolutePath(); Log.i("DOTNET", "Extracting asset to " + fullToPath); + int count = 0; FileOutputStream fileOutputStream = new FileOutputStream(fullToPath); while ((count = zipInputStream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, count); } - fileOutputStream.close(); zipInputStream.closeEntry(); } - zipInputStream.close(); } catch (IOException e) { Log.e("DOTNET", e.getLocalizedMessage()); }