diff --git a/packages/flutter_tools/lib/src/application_package.dart b/packages/flutter_tools/lib/src/application_package.dart index f8fd76525bf..dda910510c0 100644 --- a/packages/flutter_tools/lib/src/application_package.dart +++ b/packages/flutter_tools/lib/src/application_package.dart @@ -3,8 +3,9 @@ // found in the LICENSE file. import 'dart:async'; +import 'dart:collection'; -import 'package:meta/meta.dart' show required; +import 'package:meta/meta.dart'; import 'package:xml/xml.dart' as xml; import 'android/android_sdk.dart'; @@ -321,6 +322,8 @@ class ApkManifestData { // launchable-activity: name='io.flutter.app.FlutterActivity' label='' icon='' final Map> map = >{}; + final RegExp keyValueRegex = new RegExp(r"(\S+?)='(.*?)'"); + for (String line in data.split('\n')) { final int index = line.indexOf(':'); if (index != -1) { @@ -330,16 +333,8 @@ class ApkManifestData { final Map entries = {}; map[name] = entries; - for (String entry in line.split(' ')) { - entry = entry.trim(); - if (entry.isNotEmpty && entry.contains('=')) { - final int split = entry.indexOf('='); - final String key = entry.substring(0, split); - String value = entry.substring(split + 1); - if (value.startsWith("'") && value.endsWith("'")) - value = value.substring(1, value.length - 1); - entries[key] = value; - } + for (Match m in keyValueRegex.allMatches(line)) { + entries[m.group(1)] = m.group(2); } } } @@ -349,6 +344,10 @@ class ApkManifestData { final Map> _data; + @visibleForTesting + Map> get data => + new UnmodifiableMapView>(_data); + String get packageName => _data['package'] == null ? null : _data['package']['name']; String get launchableActivityName { diff --git a/packages/flutter_tools/test/application_package_test.dart b/packages/flutter_tools/test/application_package_test.dart index be5df051c9a..a2f4856c7b4 100644 --- a/packages/flutter_tools/test/application_package_test.dart +++ b/packages/flutter_tools/test/application_package_test.dart @@ -14,6 +14,7 @@ void main() { expect(data, isNotNull); expect(data.packageName, 'io.flutter.gallery'); expect(data.launchableActivityName, 'io.flutter.app.FlutterActivity'); + expect(data.data['application']['label'], 'Flutter Gallery'); }); });