mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
77 lines
2.0 KiB
Dart
77 lines
2.0 KiB
Dart
// Copyright 2016 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:path/path.dart' as path;
|
|
|
|
import '../android/android_device.dart';
|
|
import '../application_package.dart';
|
|
import '../cache.dart';
|
|
import '../flx.dart';
|
|
import '../globals.dart';
|
|
import '../runner/flutter_command.dart';
|
|
|
|
class RefreshCommand extends FlutterCommand {
|
|
@override
|
|
final String name = 'refresh';
|
|
|
|
@override
|
|
final String description = 'Build and deploy the Dart code in a Flutter app (Android only).';
|
|
|
|
RefreshCommand() {
|
|
usesTargetOption();
|
|
|
|
argParser.addOption('activity',
|
|
help: 'The Android activity that will be told to reload the Flutter code.'
|
|
);
|
|
}
|
|
|
|
@override
|
|
bool get androidOnly => true;
|
|
|
|
@override
|
|
bool get requiresDevice => true;
|
|
|
|
@override
|
|
Future<int> runInProject() async {
|
|
Directory tempDir = await Directory.systemTemp.createTemp('flutter_tools');
|
|
try {
|
|
String snapshotPath = path.join(tempDir.path, 'snapshot_blob.bin');
|
|
int result = await createSnapshot(mainPath: targetFile, snapshotPath: snapshotPath);
|
|
|
|
if (result != 0) {
|
|
printError('Failed to run the Flutter compiler. Exit code: $result');
|
|
return result;
|
|
}
|
|
|
|
Cache.releaseLockEarly();
|
|
|
|
AndroidDevice device = deviceForCommand;
|
|
|
|
String activity = argResults['activity'];
|
|
if (activity == null) {
|
|
AndroidApk apk = applicationPackages.getPackageForPlatform(device.platform);
|
|
if (apk != null) {
|
|
activity = apk.launchActivity;
|
|
} else {
|
|
printError('Unable to find the activity to be refreshed.');
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
bool success = await device.refreshSnapshot(activity, snapshotPath);
|
|
if (!success) {
|
|
printError('Error refreshing snapshot on $device.');
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
} finally {
|
|
tempDir.deleteSync(recursive: true);
|
|
}
|
|
}
|
|
}
|