Don't reinstall the app if the latest build is already installed. (#8328)
Only implemented for Android devices for now. Compare the installed SHA1 to the latest build. If they match, there's no reason to reinstall the build. Fixes #8295
This commit is contained in:
parent
3676ffe477
commit
a745fd58be
@ -196,6 +196,10 @@ class AndroidDevice extends Device {
|
|||||||
return '/data/local/tmp/sky.${app.id}.sha1';
|
return '/data/local/tmp/sky.${app.id}.sha1';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String _getDeviceApkSha1(ApplicationPackage app) {
|
||||||
|
return runSync(adbCommandForDevice(<String>['shell', 'cat', _getDeviceSha1Path(app)]));
|
||||||
|
}
|
||||||
|
|
||||||
String _getSourceSha1(ApplicationPackage app) {
|
String _getSourceSha1(ApplicationPackage app) {
|
||||||
AndroidApk apk = app;
|
AndroidApk apk = app;
|
||||||
File shaFile = fs.file('${apk.apkPath}.sha1');
|
File shaFile = fs.file('${apk.apkPath}.sha1');
|
||||||
@ -212,6 +216,12 @@ class AndroidDevice extends Device {
|
|||||||
return LineSplitter.split(listOut).contains("package:${app.id}");
|
return LineSplitter.split(listOut).contains("package:${app.id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool isLatestBuildInstalled(ApplicationPackage app) {
|
||||||
|
String installedSha1 = _getDeviceApkSha1(app);
|
||||||
|
return installedSha1.isNotEmpty && installedSha1 == _getSourceSha1(app);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool installApp(ApplicationPackage app) {
|
bool installApp(ApplicationPackage app) {
|
||||||
AndroidApk apk = app;
|
AndroidApk apk = app;
|
||||||
@ -286,16 +296,20 @@ class AndroidDevice extends Device {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isAppInstalled(package)) {
|
if (isLatestBuildInstalled(package)) {
|
||||||
printStatus('Uninstalling old version...');
|
printStatus('Latest build already installed.');
|
||||||
if (!uninstallApp(package))
|
} else {
|
||||||
printError('Warning: uninstalling old version failed');
|
if (isAppInstalled(package)) {
|
||||||
}
|
printStatus('Uninstalling old version...');
|
||||||
|
if (!uninstallApp(package))
|
||||||
|
printError('Warning: uninstalling old version failed');
|
||||||
|
}
|
||||||
|
|
||||||
printTrace('Installing APK.');
|
printTrace('Installing APK.');
|
||||||
if (!installApp(package)) {
|
if (!installApp(package)) {
|
||||||
printTrace('Error: Failed to install APK.');
|
printTrace('Error: Failed to install APK.');
|
||||||
return new LaunchResult.failed();
|
return new LaunchResult.failed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final bool traceStartup = platformArgs['trace-startup'] ?? false;
|
final bool traceStartup = platformArgs['trace-startup'] ?? false;
|
||||||
|
@ -175,5 +175,10 @@ Future<Null> buildGradleProjectV2(String gradle, String buildModeName) async {
|
|||||||
File apkFile = fs.file('$gradleAppOutDir/$apkFilename');
|
File apkFile = fs.file('$gradleAppOutDir/$apkFilename');
|
||||||
// Copy the APK to app.apk, so `flutter run`, `flutter install`, etc. can find it.
|
// Copy the APK to app.apk, so `flutter run`, `flutter install`, etc. can find it.
|
||||||
apkFile.copySync('$gradleAppOutDir/app.apk');
|
apkFile.copySync('$gradleAppOutDir/app.apk');
|
||||||
|
|
||||||
|
printTrace('calculateSha: $gradleAppOutDir/app.apk');
|
||||||
|
File apkShaFile = fs.file('$gradleAppOutDir/app.apk.sha1');
|
||||||
|
apkShaFile.writeAsStringSync(calculateSha(apkFile));
|
||||||
|
|
||||||
printStatus('Built $apkFilename (${getSizeAsMB(apkFile.lengthSync())}).');
|
printStatus('Built $apkFilename (${getSizeAsMB(apkFile.lengthSync())}).');
|
||||||
}
|
}
|
||||||
|
@ -151,6 +151,9 @@ abstract class Device {
|
|||||||
/// Check if a version of the given app is already installed
|
/// Check if a version of the given app is already installed
|
||||||
bool isAppInstalled(ApplicationPackage app);
|
bool isAppInstalled(ApplicationPackage app);
|
||||||
|
|
||||||
|
/// Check if the latest build of the [app] is already installed.
|
||||||
|
bool isLatestBuildInstalled(ApplicationPackage app);
|
||||||
|
|
||||||
/// Install an app package on the current device
|
/// Install an app package on the current device
|
||||||
bool installApp(ApplicationPackage app);
|
bool installApp(ApplicationPackage app);
|
||||||
|
|
||||||
|
@ -152,6 +152,9 @@ class IOSDevice extends Device {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool isLatestBuildInstalled(ApplicationPackage app) => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool installApp(ApplicationPackage app) {
|
bool installApp(ApplicationPackage app) {
|
||||||
IOSApp iosApp = app;
|
IOSApp iosApp = app;
|
||||||
|
@ -340,6 +340,9 @@ class IOSSimulator extends Device {
|
|||||||
return SimControl.instance.isInstalled(app.id);
|
return SimControl.instance.isInstalled(app.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool isLatestBuildInstalled(ApplicationPackage app) => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool installApp(ApplicationPackage app) {
|
bool installApp(ApplicationPackage app) {
|
||||||
try {
|
try {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user