summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Warrington <cmw@google.com>2014-10-15 23:09:41 +0000
committerandroid-build-merger <android-build-merger@google.com>2014-10-15 23:09:41 +0000
commit3581b7b59098eed1d6e0c4f827e07384d3b16781 (patch)
tree4437c4fbd108cbd96e8bc14ecbd76006b88a5e3d
parent6ed84708afb5555a606b0d9baf5bc80fa3b4e38c (diff)
parent24d3797a11c567b32b665095dee2b12908630d0f (diff)
downloadbase-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.
-rw-r--r--build-system/builder/src/main/java/com/android/builder/internal/InstallUtils.java29
-rw-r--r--build-system/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/InstallVariantTask.groovy40
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'}.");
}
}
}