Unverified Commit 27d11da8 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Revert "[flutter_tools] default tree-shake-icons to enabled and improve...

Revert "[flutter_tools] default tree-shake-icons to enabled and improve performance (#54923)" (#55413)

This reverts commit 0b93a921.
parent 72986f7b
......@@ -16,7 +16,6 @@ dependencies:
# and run
# flutter update-packages --force-upgrade
flutter_gallery_assets: 0.1.9+2
cupertino_icons: 0.1.3
archive: 2.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......@@ -92,4 +91,4 @@ flutter:
- packages/flutter_gallery_assets/food/cherry_pie.png
- assets/999x1000.png
# PUBSPEC CHECKSUM: 49fa
# PUBSPEC CHECKSUM: 3a55
......@@ -60,9 +60,9 @@ Future<Depfile> copyAssets(Environment environment, Directory outputDirectory) a
file.parent.createSync(recursive: true);
final DevFSContent content = entry.value;
if (content is DevFSFileContent && content.file is File) {
inputs.add(content.file as File);
inputs.add(globals.fs.file(content.file.path));
if (!await iconTreeShaker.subsetFont(
input: content.file as File,
inputPath: content.file.path,
outputPath: file.path,
relativePath: entry.key,
)) {
......
......@@ -4,7 +4,6 @@
import 'package:meta/meta.dart';
import 'package:process/process.dart';
import 'package:mime/mime.dart' as mime;
import '../../artifacts.dart';
import '../../base/common.dart';
......@@ -21,7 +20,7 @@ import 'dart.dart';
const String kIconTreeShakerFlag = 'TreeShakeIcons';
/// Whether icon font subsetting is enabled by default.
const bool kIconTreeShakerEnabledDefault = true;
const bool kIconTreeShakerEnabledDefault = false;
List<Map<String, dynamic>> _getList(dynamic object, String errorMessage) {
try {
......@@ -67,12 +66,6 @@ class IconTreeShaker {
}
}
/// The MIME type for ttf fonts.
static const Set<String> kTtfMimeTypes = <String>{
'font/ttf', // based on internet search
'application/x-font-ttf', // based on running locally.
};
/// The [Source] inputs that targets using this should depend on.
///
/// See [Target.inputs].
......@@ -84,7 +77,6 @@ class IconTreeShaker {
final Environment _environment;
final String _fontManifest;
Future<void> _iconDataProcessing;
Map<String, _IconTreeShakerData> _iconData;
final ProcessManager _processManager;
......@@ -97,10 +89,10 @@ class IconTreeShaker {
&& _environment.defines[kIconTreeShakerFlag] == 'true'
&& _environment.defines[kBuildMode] != 'debug';
// Fills the [_iconData] map.
Future<void> _getIconData(Environment environment) async {
/// Fills the [_iconData] map.
Future<Map<String, _IconTreeShakerData>> _getIconData(Environment environment) async {
if (!enabled) {
return;
return null;
}
final File appDill = environment.buildDir.childFile('app.dill');
......@@ -143,11 +135,13 @@ class IconTreeShaker {
codePoints: iconData[entry.key],
);
}
_iconData = result;
return result;
}
/// Calls font-subset, which transforms the [input] font file to a
/// subsetted version at [outputPath].
/// Calls font-subset, which transforms the `inputPath` font file to a
/// subsetted version at `outputPath`.
///
/// The `relativePath` parameter
///
/// All parameters are required.
///
......@@ -156,24 +150,15 @@ class IconTreeShaker {
/// If the font-subset subprocess fails, it will [throwToolExit].
/// Otherwise, it will return true.
Future<bool> subsetFont({
@required File input,
@required String inputPath,
@required String outputPath,
@required String relativePath,
}) async {
if (!enabled) {
return false;
}
if (input.lengthSync() < 12) {
return false;
}
final String mimeType = mime.lookupMimeType(
input.path,
headerBytes: await input.openRead(0, 12).first,
);
if (!kTtfMimeTypes.contains(mimeType)) {
return false;
}
await (_iconDataProcessing ??= _getIconData(_environment));
_iconData ??= await _getIconData(_environment);
assert(_iconData != null);
final _IconTreeShakerData iconTreeShakerData = _iconData[relativePath];
......@@ -191,7 +176,7 @@ class IconTreeShaker {
final List<String> cmd = <String>[
fontSubset.path,
outputPath,
input.path,
inputPath,
];
final String codePoints = iconTreeShakerData.codePoints.join(' ');
_logger.printTrace('Running font-subset: ${cmd.join(' ')}, '
......@@ -201,7 +186,9 @@ class IconTreeShaker {
fontSubsetProcess.stdin.writeln(codePoints);
await fontSubsetProcess.stdin.flush();
await fontSubsetProcess.stdin.close();
} on Exception {
} on Exception catch (_) {
// handled by checking the exit code.
} on OSError catch (_) { // ignore: dead_code_on_catch_subtype
// handled by checking the exit code.
}
......
......@@ -219,7 +219,7 @@ void main() {
kBuildMode: 'debug',
kTargetPlatform: 'android-arm',
kTrackWidgetCreation: 'true',
kIconTreeShakerFlag: 'true',
kIconTreeShakerFlag: null,
});
return BuildResult(success: true);
......
......@@ -23,39 +23,38 @@ import '../../../src/common.dart';
import '../../../src/context.dart';
import '../../../src/mocks.dart' as mocks;
final Platform kNoAnsiPlatform = FakePlatform(stdoutSupportsAnsi: false);
const List<int> _kTtfHeaderBytes = <int>[0, 1, 0, 0, 0, 15, 0, 128, 0, 3, 0, 112];
const String dartPath = '/flutter/dart';
const String constFinderPath = '/flutter/const_finder.snapshot.dart';
const String fontSubsetPath = '/flutter/font-subset';
const String inputPath = '/input/fonts/MaterialIcons-Regular.ttf';
const String outputPath = '/output/fonts/MaterialIcons-Regular.ttf';
const String relativePath = 'fonts/MaterialIcons-Regular.ttf';
List<String> getConstFinderArgs(String appDillPath) => <String>[
dartPath,
constFinderPath,
'--kernel-file', appDillPath,
'--class-library-uri', 'package:flutter/src/widgets/icon_data.dart',
'--class-name', 'IconData',
];
const List<String> fontSubsetArgs = <String>[
fontSubsetPath,
outputPath,
inputPath,
];
final Platform _kNoAnsiPlatform = FakePlatform(stdoutSupportsAnsi: false);
void main() {
BufferLogger logger;
MemoryFileSystem fileSystem;
MemoryFileSystem fs;
MockProcessManager mockProcessManager;
MockProcess fontSubsetProcess;
MockArtifacts mockArtifacts;
DevFSStringContent fontManifestContent;
const String dartPath = '/flutter/dart';
const String constFinderPath = '/flutter/const_finder.snapshot.dart';
const String fontSubsetPath = '/flutter/font-subset';
const String inputPath = '/input/fonts/MaterialIcons-Regular.ttf';
const String outputPath = '/output/fonts/MaterialIcons-Regular.ttf';
const String relativePath = 'fonts/MaterialIcons-Regular.ttf';
List<String> getConstFinderArgs(String appDillPath) => <String>[
dartPath,
constFinderPath,
'--kernel-file', appDillPath,
'--class-library-uri', 'package:flutter/src/widgets/icon_data.dart',
'--class-name', 'IconData',
];
const List<String> fontSubsetArgs = <String>[
fontSubsetPath,
outputPath,
inputPath,
];
void _addConstFinderInvocation(
String appDillPath, {
int exitCode = 0,
......@@ -90,21 +89,19 @@ void main() {
mockProcessManager = MockProcessManager();
fontSubsetProcess = MockProcess();
mockArtifacts = MockArtifacts();
fileSystem = MemoryFileSystem();
fs = MemoryFileSystem();
logger = BufferLogger(
terminal: AnsiTerminal(
stdio: mocks.MockStdio(),
platform: kNoAnsiPlatform,
platform: _kNoAnsiPlatform,
),
outputPreferences: OutputPreferences.test(showColor: false),
);
fileSystem.file(constFinderPath).createSync(recursive: true);
fileSystem.file(dartPath).createSync(recursive: true);
fileSystem.file(fontSubsetPath).createSync(recursive: true);
fileSystem.file(inputPath)
..createSync(recursive: true)
..writeAsBytesSync(_kTtfHeaderBytes);
fs.file(constFinderPath).createSync(recursive: true);
fs.file(dartPath).createSync(recursive: true);
fs.file(fontSubsetPath).createSync(recursive: true);
when(mockArtifacts.getArtifactPath(Artifact.constFinder)).thenReturn(constFinderPath);
when(mockArtifacts.getArtifactPath(Artifact.fontSubset)).thenReturn(fontSubsetPath);
when(mockArtifacts.getArtifactPath(Artifact.engineDartBinary)).thenReturn(dartPath);
......@@ -112,11 +109,11 @@ void main() {
Environment _createEnvironment(Map<String, String> defines) {
return Environment.test(
fileSystem.directory('/icon_test')..createSync(recursive: true),
fs.directory('/icon_test')..createSync(recursive: true),
defines: defines,
artifacts: mockArtifacts,
processManager: FakeProcessManager.any(),
fileSystem: fileSystem,
fileSystem: fs,
logger: BufferLogger.test(),
);
}
......@@ -132,19 +129,18 @@ void main() {
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
expect(
logger.errorText,
'Font subetting is not supported in debug mode. The --tree-shake-icons'
' flag will be ignored.\n',
'Font subetting is not supported in debug mode. The --tree-shake-icons flag will be ignored.\n',
);
expect(iconTreeShaker.enabled, false);
final bool subsets = await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
);
......@@ -165,7 +161,7 @@ void main() {
null,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
......@@ -189,7 +185,7 @@ void main() {
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
......@@ -213,13 +209,13 @@ void main() {
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
expect(
() async => await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
() => iconTreeShaker.subsetFont(
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
),
......@@ -227,20 +223,20 @@ void main() {
);
});
testWithoutContext('Can subset a font', () async {
testWithoutContext('The happy path', () async {
final Environment environment = _createEnvironment(<String, String>{
kIconTreeShakerFlag: 'true',
kBuildMode: 'release',
});
final File appDill = environment.buildDir.childFile('app.dill')
..createSync(recursive: true);
final File appDill = environment.buildDir.childFile('app.dill')..createSync(recursive: true);
fs.file(inputPath).createSync(recursive: true);
final IconTreeShaker iconTreeShaker = IconTreeShaker(
environment,
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
......@@ -249,7 +245,7 @@ void main() {
_resetFontSubsetInvocation(stdinSink: stdinSink);
bool subsetted = await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
);
......@@ -258,7 +254,7 @@ void main() {
expect(subsetted, true);
subsetted = await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
);
......@@ -269,104 +265,33 @@ void main() {
verify(mockProcessManager.start(fontSubsetArgs)).called(2);
});
testWithoutContext('Does not subset a non-ttf font', () async {
final Environment environment = _createEnvironment(<String, String>{
kIconTreeShakerFlag: 'true',
kBuildMode: 'release',
});
final File appDill = environment.buildDir.childFile('app.dill')
..createSync(recursive: true);
final IconTreeShaker iconTreeShaker = IconTreeShaker(
environment,
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
artifacts: mockArtifacts,
);
final mocks.CompleterIOSink stdinSink = mocks.CompleterIOSink();
_addConstFinderInvocation(appDill.path, stdout: validConstFinderResult);
_resetFontSubsetInvocation(stdinSink: stdinSink);
final File notAFont = fileSystem.file('input/foo/bar.txt')
..createSync(recursive: true)
..writeAsStringSync('I could not think of a better string');
final bool subsetted = await iconTreeShaker.subsetFont(
input: notAFont,
outputPath: outputPath,
relativePath: relativePath,
);
expect(subsetted, false);
verifyNever(mockProcessManager.run(getConstFinderArgs(appDill.path)));
verifyNever(mockProcessManager.start(fontSubsetArgs));
});
testWithoutContext('Does not subset an invalid ttf font', () async {
final Environment environment = _createEnvironment(<String, String>{
kIconTreeShakerFlag: 'true',
kBuildMode: 'release',
});
final File appDill = environment.buildDir.childFile('app.dill')
..createSync(recursive: true);
final IconTreeShaker iconTreeShaker = IconTreeShaker(
environment,
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
artifacts: mockArtifacts,
);
final mocks.CompleterIOSink stdinSink = mocks.CompleterIOSink();
_addConstFinderInvocation(appDill.path, stdout: validConstFinderResult);
_resetFontSubsetInvocation(stdinSink: stdinSink);
final File notAFont = fileSystem.file(inputPath)
..writeAsBytesSync(<int>[0, 1, 2]);
final bool subsetted = await iconTreeShaker.subsetFont(
input: notAFont,
outputPath: outputPath,
relativePath: relativePath,
);
expect(subsetted, false);
verifyNever(mockProcessManager.run(getConstFinderArgs(appDill.path)));
verifyNever(mockProcessManager.start(fontSubsetArgs));
});
testWithoutContext('Non-constant instances', () async {
final Environment environment = _createEnvironment(<String, String>{
kIconTreeShakerFlag: 'true',
kBuildMode: 'release',
});
final File appDill = environment.buildDir.childFile('app.dill')
..createSync(recursive: true);
final File appDill = environment.buildDir.childFile('app.dill')..createSync(recursive: true);
fs.file(inputPath).createSync(recursive: true);
final IconTreeShaker iconTreeShaker = IconTreeShaker(
environment,
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
_addConstFinderInvocation(appDill.path, stdout: constFinderResultWithInvalid);
await expectLater(
() async => await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
expect(
iconTreeShaker.subsetFont(
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
),
throwsToolExit(
message:
'Avoid non-constant invocations of IconData or try to build'
' again with --no-tree-shake-icons.',
message: 'Avoid non-constant invocations of IconData or try to build again with --no-tree-shake-icons.',
),
);
......@@ -379,16 +304,15 @@ void main() {
kIconTreeShakerFlag: 'true',
kBuildMode: 'release',
});
final File appDill = environment.buildDir.childFile('app.dill')
..createSync(recursive: true);
fileSystem.file(inputPath).createSync(recursive: true);
final File appDill = environment.buildDir.childFile('app.dill')..createSync(recursive: true);
fs.file(inputPath).createSync(recursive: true);
final IconTreeShaker iconTreeShaker = IconTreeShaker(
environment,
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
......@@ -396,9 +320,9 @@ void main() {
_addConstFinderInvocation(appDill.path, stdout: validConstFinderResult);
_resetFontSubsetInvocation(exitCode: -1, stdinSink: stdinSink);
await expectLater(
() async => await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
expect(
iconTreeShaker.subsetFont(
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
),
......@@ -406,7 +330,7 @@ void main() {
);
verify(mockProcessManager.run(getConstFinderArgs(appDill.path))).called(1);
verify(mockProcessManager.start(fontSubsetArgs)).called(1);
verifyNever(mockProcessManager.start(fontSubsetArgs));
});
testWithoutContext('font-subset throws on write to sdtin', () async {
......@@ -414,15 +338,15 @@ void main() {
kIconTreeShakerFlag: 'true',
kBuildMode: 'release',
});
final File appDill = environment.buildDir.childFile('app.dill')
..createSync(recursive: true);
final File appDill = environment.buildDir.childFile('app.dill')..createSync(recursive: true);
fs.file(inputPath).createSync(recursive: true);
final IconTreeShaker iconTreeShaker = IconTreeShaker(
environment,
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
......@@ -430,9 +354,9 @@ void main() {
_addConstFinderInvocation(appDill.path, stdout: validConstFinderResult);
_resetFontSubsetInvocation(exitCode: -1, stdinSink: stdinSink);
await expectLater(
() async => await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
expect(
iconTreeShaker.subsetFont(
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
),
......@@ -440,7 +364,7 @@ void main() {
);
verify(mockProcessManager.run(getConstFinderArgs(appDill.path))).called(1);
verify(mockProcessManager.start(fontSubsetArgs)).called(1);
verifyNever(mockProcessManager.start(fontSubsetArgs));
});
testWithoutContext('Invalid font manifest', () async {
......@@ -448,8 +372,8 @@ void main() {
kIconTreeShakerFlag: 'true',
kBuildMode: 'release',
});
final File appDill = environment.buildDir.childFile('app.dill')
..createSync(recursive: true);
final File appDill = environment.buildDir.childFile('app.dill')..createSync(recursive: true);
fs.file(inputPath).createSync(recursive: true);
fontManifestContent = DevFSStringContent(invalidFontManifestJson);
......@@ -458,15 +382,15 @@ void main() {
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
_addConstFinderInvocation(appDill.path, stdout: validConstFinderResult);
await expectLater(
() async => await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
expect(
iconTreeShaker.subsetFont(
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
),
......@@ -482,8 +406,8 @@ void main() {
kIconTreeShakerFlag: 'true',
kBuildMode: 'release',
});
final File appDill = environment.buildDir.childFile('app.dill')
..createSync(recursive: true);
final File appDill = environment.buildDir.childFile('app.dill')..createSync(recursive: true);
fs.file(inputPath).createSync(recursive: true);
fontManifestContent = DevFSStringContent(invalidFontManifestJson);
......@@ -492,15 +416,15 @@ void main() {
fontManifestContent,
logger: logger,
processManager: mockProcessManager,
fileSystem: fileSystem,
fileSystem: fs,
artifacts: mockArtifacts,
);
_addConstFinderInvocation(appDill.path, exitCode: -1);
await expectLater(
() async => await iconTreeShaker.subsetFont(
input: fileSystem.file(inputPath),
expect(
iconTreeShaker.subsetFont(
inputPath: inputPath,
outputPath: outputPath,
relativePath: relativePath,
),
......
......@@ -110,7 +110,7 @@ void main() {
testUsingContext('build aot outputs timing info', () async {
globals.fs
.file('.dart_tool/flutter_build/3f206b606f73e08587a94405f2e86fad/app.so')
.file('.dart_tool/flutter_build/0c21fd4ab3b8bde8b385ff01d08e0093/app.so')
.createSync(recursive: true);
when(globals.buildSystem.build(any, any))
.thenAnswer((Invocation invocation) async {
......
......@@ -238,7 +238,6 @@ void main() {
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=true',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -268,7 +267,6 @@ void main() {
'-Ptrack-widget-creation=true',
'-Pshrink=true',
'-Psplit-debug-info=${tempDir.path}',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -301,7 +299,6 @@ void main() {
'-Ptrack-widget-creation=true',
'-Pextra-front-end-options=foo,bar',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -332,7 +329,6 @@ void main() {
'-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=true',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -357,7 +353,6 @@ void main() {
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=true',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -419,7 +414,6 @@ void main() {
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=true',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -471,7 +465,6 @@ void main() {
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=true',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......
......@@ -225,7 +225,6 @@ void main() {
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=false',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'bundleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -258,7 +257,6 @@ void main() {
'-Ptarget-platform=android-arm,android-arm64,android-x64',
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=false',
'-Ptree-shake-icons=true',
'bundleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -283,7 +281,6 @@ void main() {
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=false',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'bundleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -345,7 +342,6 @@ void main() {
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=false',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......@@ -397,7 +393,6 @@ void main() {
'-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}',
'-Ptrack-widget-creation=false',
'-Pshrink=true',
'-Ptree-shake-icons=true',
'assembleRelease',
],
workingDirectory: anyNamed('workingDirectory'),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment