parseString method

  1. @override
  2. @visibleForTesting
Future<ApkInfo?> parseString(
  1. File file,
  2. String dataString
)
override

Implementation

@override
@visibleForTesting
Future<ApkInfo?> parseString(final File file, final String dataString) async {
  // logger.d('parse >> $resultString');

  final rawDataList = _splitter.convert(dataString);

  String? applicationId;
  String? versionCode;
  String? versionName;
  String? platformBuildVersionName;
  String? platformBuildVersionCode;
  String? compileSdkVersion;
  String? compileSdkVersionCodename;
  String? minSdkVersion;
  String? targetSdkVersion;
  String? applicationLabel;
  Map<String, String>? applicationLabels = {};
  List<String>? usesPermissions = [];
  List<String>? nativeCodes;
  List<String>? locales;

  for (final row in rawDataList) {
    _logger.d('row >> $row');
    final arr = row.split(':');
    if (arr.length >= 2) {
      final key = arr[0];
      final data = arr[1];
      if (key == AaptKeys.package) {
        final regExpMatch1 = _regExpPackage.firstMatch(data);
        applicationId = regExpMatch1?.group(1);
        versionCode = regExpMatch1?.group(2);
        versionName = regExpMatch1?.group(3);
        platformBuildVersionName = regExpMatch1?.group(4);
        platformBuildVersionCode = regExpMatch1?.group(5);
        compileSdkVersion = regExpMatch1?.group(6);
        compileSdkVersionCodename = regExpMatch1?.group(7);
      } else if (key == AaptKeys.sdkVersion) {
        final regExpMatch1 = _regExpValue.firstMatch(data);
        minSdkVersion = regExpMatch1?.group(1);
      } else if (key == AaptKeys.targetSdkVersion) {
        final regExpMatch1 = _regExpValue.firstMatch(data);
        targetSdkVersion = regExpMatch1?.group(1);
      } else if (key == AaptKeys.applicationLabel) {
        final regExpMatch1 = _regExpValue.firstMatch(data);
        applicationLabel = regExpMatch1?.group(1);
      } else if (key.contains(AaptKeys.applicationLabel)) {
        final lang = key.substring(AaptKeys.applicationLabel.length + 1);
        final regExpMatch1 = _regExpValue.firstMatch(data);
        final label = regExpMatch1?.group(1);
        if (label != null) {
          applicationLabels[lang] = label;
        }
      } else if (key.contains(AaptKeys.applicationLabel)) {
        final lang = key.substring(AaptKeys.applicationLabel.length + 1);
        final regExpMatch1 = _regExpValue.firstMatch(data);
        final label = regExpMatch1?.group(1);
        if (label != null) {
          applicationLabels[lang] = label;
        }
      } else if (key.contains(AaptKeys.usesPermission)) {
        final regExpMatch1 = _regExpValue.firstMatch(data);
        final permission = regExpMatch1?.group(1);
        if (permission != null) {
          usesPermissions.add(permission);
        }
      } else if (key.contains(AaptKeys.nativeCode)) {
        nativeCodes = _dataFromString(data);
      } else if (key.contains(AaptKeys.locales)) {
        locales = _dataFromString(data);
      }
    } else {
      _logger.d('error row >> $row');
    }
  }
  return ApkInfo(
    uuid: uuidInst.v4(),
    file: file,
    applicationId: applicationId,
    versionCode: versionCode,
    versionName: versionName,
    platformBuildVersionName: platformBuildVersionName,
    platformBuildVersionCode: platformBuildVersionCode,
    compileSdkVersion: compileSdkVersion,
    compileSdkVersionCodename: compileSdkVersionCodename,
    minSdkVersion: minSdkVersion,
    targetSdkVersion: targetSdkVersion,
    applicationLabel: applicationLabel,
    applicationLabels: _toUnmodifiableMap(applicationLabels),
    usesPermissions: _toUnmodifiableList(usesPermissions),
    nativeCodes: _toUnmodifiableList(nativeCodes),
    locales: _toUnmodifiableList(locales),
  );
}