unpackAndroidAssets function

Future<String> unpackAndroidAssets()

Extract assets from *.apk file

Implementation

Future<String> unpackAndroidAssets() async {
  AssetManifest assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
  List<String> assets = assetManifest.listAssets();
  Directory documentsDirectory = await getApplicationDocumentsDirectory();

  for (String asset in assets) {
    String filePath = "${documentsDirectory.path}/$asset";
    ByteData data = await rootBundle.load(asset);
    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";
}