diff options
author | Chris Warrington <cmw@google.com> | 2014-10-15 23:09:41 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2014-10-15 23:09:41 +0000 |
commit | 3581b7b59098eed1d6e0c4f827e07384d3b16781 (patch) | |
tree | 4437c4fbd108cbd96e8bc14ecbd76006b88a5e3d | |
parent | 6ed84708afb5555a606b0d9baf5bc80fa3b4e38c (diff) | |
parent | 24d3797a11c567b32b665095dee2b12908630d0f (diff) | |
download | base-3581b7b59098eed1d6e0c4f827e07384d3b16781.tar.gz |
Merge "Gradle install task fails if it finds no compatible device." into studio-1.0-dev
automerge: 24d3797
* commit '24d3797a11c567b32b665095dee2b12908630d0f':
Gradle install task fails if it finds no compatible device.
2 files changed, 44 insertions, 25 deletions
diff --git a/build-system/builder/src/main/java/com/android/builder/internal/InstallUtils.java b/build-system/builder/src/main/java/com/android/builder/internal/InstallUtils.java index 78df3349b7..ed7b4ce893 100644 --- a/build-system/builder/src/main/java/com/android/builder/internal/InstallUtils.java +++ b/build-system/builder/src/main/java/com/android/builder/internal/InstallUtils.java @@ -47,35 +47,32 @@ public class InstallUtils { } int minSdkVersion = appMinSdkVersion.getApiLevel(); + + // Convert codename to API version. if (appMinSdkVersion.getCodename() != null) { String deviceCodeName = device.getApiCodeName(); if (deviceCodeName != null) { if (deviceCodeName.equals(appMinSdkVersion.getCodename())) { - logger.info("Skipping device '%1$s', due to different API preview '%2$s' and '%3$s'", + logger.info( + "Skipping device '%1$s', due to different API preview '%2$s' and '%3$s'", device.getName(), deviceCodeName, appMinSdkVersion.getCodename()); return false; } } else { minSdkVersion = SdkVersionInfo.getApiByBuildCode( appMinSdkVersion.getCodename(), true); - - if (minSdkVersion > deviceApiLevel) { - logger.info("Skipping device '%s' for '%s:%s'", - device.getName(), projectName, variantName); - - return false; - } } + } - } else { - if (minSdkVersion > deviceApiLevel) { - logger.info("Skipping device '%s' for '%s:%s'", - device.getName(), projectName, variantName); + if (minSdkVersion > deviceApiLevel) { + logger.info( + "Skipping device '%s' for '%s:%s': minSdkVersion [%s] > deviceApiLevel [%d]", + device.getName(), projectName, variantName, appMinSdkVersion.getApiString(), + deviceApiLevel); - return false; - } + return false; + } else { + return true; } - - return true; } } diff --git a/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/InstallVariantTask.groovy b/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/InstallVariantTask.groovy index ccfe030313..584e43ec5c 100644 --- a/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/InstallVariantTask.groovy +++ b/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/InstallVariantTask.groovy @@ -25,8 +25,11 @@ import com.android.builder.testing.api.DeviceConnector import com.android.builder.testing.api.DeviceProvider import com.android.ddmlib.IDevice import com.android.ide.common.build.SplitOutputMatcher +import com.google.common.base.Joiner +import org.gradle.api.GradleException import org.gradle.api.tasks.InputFile import org.gradle.api.tasks.TaskAction +import org.gradle.api.tasks.TaskExecutionException /** * Task installing an app variant. It looks at connected device and install the best matching @@ -39,11 +42,17 @@ public class InstallVariantTask extends BaseTask { int timeOut = 0 BaseVariantData<? extends BaseVariantOutputData> variantData + InstallVariantTask() { + this.getOutputs().upToDateWhen { + logger.debug("Install task is always run."); + false; + } + } @TaskAction void install() { DeviceProvider deviceProvider = new ConnectedDeviceProvider(getAdbExe()) - deviceProvider.init(); + deviceProvider.init() VariantConfiguration variantConfig = variantData.variantConfiguration String variantName = variantConfig.fullName @@ -51,7 +60,8 @@ public class InstallVariantTask extends BaseTask { String serial = System.getenv("ANDROID_SERIAL"); - int foundDevice = 0; + int successfulInstallCount = 0; + for (DeviceConnector device : deviceProvider.getDevices()) { if (serial != null && !serial.equals(device.getSerialNumber())) { continue; @@ -69,21 +79,33 @@ public class InstallVariantTask extends BaseTask { device.getDensity(), device.getAbis()) if (output == null) { - System.out.println( - "Skipping device '${device.getName()}' for '${projectName}:${variantName}': No matching output file."); + project.logger.lifecycle( + "Skipping device '${device.getName()}' for '${projectName}:${variantName}': " + + "Could not find build of variant which supports density ${device.getDensity()} " + + "and an ABI in " + Joiner.on(", ").join(device.getAbis())); } else { - System.out.println( + project.logger.lifecycle( "Installing '${output.baseName}' on '${device.getName()}'."); File apkFile = output.getOutputFile(); device.installPackage(apkFile, getTimeOut(), plugin.logger) - foundDevice++ + successfulInstallCount++ } - } + } // When InstallUtils.checkDeviceApiLevel returns false, it logs the reason. + } else { + project.logger.lifecycle( + "Skipping device '${device.getName()}' for '${projectName}:${variantName}': Device not authorized, see http://developer.android.com/tools/help/adb.html#Enabling."); + } } - if (foundDevice == 0) { - System.out.println("Found no authorized devices") + if (successfulInstallCount == 0) { + if (serial != null) { + throw new GradleException("Failed to find device with serial '${serial}'. Unset ANDROID_SERIAL to search for any device.") + } else { + throw new GradleException("Failed to install on any devices.") + } + } else { + project.logger.quiet("Installed on ${successfulInstallCount} ${successfulInstallCount==1?'device':'devices'}."); } } } |