unpackAndroidAssets function

Future<String> unpackAndroidAssets()

Extract assets from *.apk file

Implementation

Future<String> unpackAndroidAssets() async {
  String manifest = await rootBundle.loadString("AssetManifest.json");
  Map<String, dynamic> manifestContent = jsonDecode(manifest);
  Directory documentsDirectory = await getApplicationDocumentsDirectory();

  for (String key in manifestContent.keys) {
    String filePath = "${documentsDirectory.path}/$key";
    ByteData data = await rootBundle.load(key);
    List<int> bytes =
        data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    File file = File(filePath);
    FileSystemEntityType type = FileSystemEntity.typeSync(filePath);

    if (type == FileSystemEntityType.notFound) {
      file.createSync(recursive: true);

      await file.writeAsBytes(bytes);
    } else if (type == FileSystemEntityType.file) {
      if (md5.convert(bytes) != md5.convert(file.readAsBytesSync())) {
        file.deleteSync();
        file.createSync();

        await file.writeAsBytes(bytes);
      }
    }
  }

  return "${documentsDirectory.path}/assets";
}