diff --git a/shell/platform/android/io/flutter/view/FlutterMain.java b/shell/platform/android/io/flutter/view/FlutterMain.java index 57f32ba9a48b6ed0ebb7726ab1812112765daf1f..d0c496ad42d1ad2568b6493167d7541226ece962 100644 --- a/shell/platform/android/io/flutter/view/FlutterMain.java +++ b/shell/platform/android/io/flutter/view/FlutterMain.java @@ -188,7 +188,11 @@ public class FlutterMain { return; } try { - sResourceExtractor.waitForCompletion(); + // There are resources to extract. For example, the AOT blobs from the `assets` directory. + // `sResourceExtractor` is `null` if there isn't any AOT blob to extract. + if (sResourceExtractor != null) { + sResourceExtractor.waitForCompletion(); + } List shellArgs = new ArrayList<>(); shellArgs.add("--icu-symbol-prefix=_binary_icudtl_dat"); @@ -309,6 +313,13 @@ public class FlutterMain { * This is required by the Dart runtime, so it can read the blobs. */ private static void initResources(@NonNull Context applicationContext) { + // When the AOT blobs are contained in the native library directory, + // we don't need to extract them manually because they are + // extracted by the Android Package Manager automatically. + if (!sSnapshotPath.equals(PathUtils.getDataDirectory(applicationContext))) { + return; + } + new ResourceCleaner(applicationContext).start(); final String dataDirPath = PathUtils.getDataDirectory(applicationContext); @@ -389,7 +400,9 @@ public class FlutterMain { * * *

When the blobs are contained in the native library directory, - * the format `lib_%s.so` is applied to the file name. + * this method looks for blobs named `lib_%s.so`. + * + * The shared library should have the `lib` prefix only. e.g. `libapp.so`. * *

Note: The name of the files can be customized in the app's metadata, but the * format is preserved. @@ -404,7 +417,7 @@ public class FlutterMain { String aotVmSnapshotInstrLib = "lib_" + sAotVmSnapshotInstr + ".so"; String aotIsolateSnapshotDataLib = "lib_" + sAotIsolateSnapshotData + ".so"; String aotIsolateSnapshotInstrLib = "lib_" + sAotIsolateSnapshotInstr + ".so"; - String aotSharedLibraryLib = "lib_" + sAotSharedLibraryPath + ".so"; + String aotSharedLibraryLib = "lib" + sAotSharedLibraryPath; boolean isPrecompiledBlobInLib = libs .containsAll(Arrays.asList(