Skip to content

Commit f1b60d8

Browse files
committed
Allow Android SDK detection from environment variable as well
1 parent c403add commit f1b60d8

File tree

1 file changed

+37
-8
lines changed

1 file changed

+37
-8
lines changed

android-junit5/src/test/groovy/de/mannodermaus/gradle/plugins/android_junit5/util/TestEnvironment.groovy

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package de.mannodermaus.gradle.plugins.android_junit5.util
22

3+
import com.android.annotations.Nullable
4+
35
/*
46
* Encapsulates environment properties related to running
57
* Unit Tests that interface with an Android SDK installation.
@@ -12,6 +14,7 @@ class TestEnvironment {
1214

1315
private static final ANDROID_SDK_FILE_NAME = "local.properties"
1416
private static final ANDROID_SDK_PROP_NAME = "sdk.dir"
17+
private static final ANDROID_HOME_ENVVAR_NAME = "ANDROID_HOME"
1518

1619
private static
1720
final ENVIRONMENT_RESOURCE_NAME = "/de/mannodermaus/gradle/plugins/android_junit5/testenv.properties"
@@ -51,18 +54,44 @@ class TestEnvironment {
5154
}
5255

5356
private File loadAndroidSdkFolder() {
57+
// Try local project first, fall back to Environment Variable, throw if nothing works
58+
File folder = loadAndroidSdkFromProject()
59+
60+
if (folder == null) {
61+
folder = loadAndroidSdkFromEnvVar()
62+
}
63+
64+
if (folder == null) {
65+
throw new AssertionError(
66+
"Android SDK couldn't be found. Either local.properties file in project root is missing, " +
67+
"it doesn't include the required 'sdk.dir' statement, " +
68+
"or there is no ANDROID_HOME environment variable!")
69+
}
70+
}
71+
72+
@Nullable
73+
private File loadAndroidSdkFromProject() {
5474
File rootFile = new File(System.getProperty("user.dir")).parentFile
5575
File localPropsFile = new File(rootFile, ANDROID_SDK_FILE_NAME)
56-
if (!localPropsFile.exists()) {
57-
throw new AssertionError(
58-
"'sdk.dir' couldn't be found. Either local.properties file in folder '${rootFile.absolutePath}' is missing, " +
59-
"or it doesn't include the required 'sdk.dir' statement!")
76+
if (localPropsFile.exists()) {
77+
def sdkFolderProp = localPropsFile.readLines()
78+
.find { it.startsWith(ANDROID_SDK_PROP_NAME) }
79+
sdkFolderProp = sdkFolderProp.substring(sdkFolderProp.indexOf('=') + 1).trim()
80+
81+
return new File(sdkFolderProp)
82+
}
83+
84+
return null
85+
}
86+
87+
@Nullable
88+
private File loadAndroidSdkFromEnvVar() {
89+
String envvar = System.getenv(ANDROID_HOME_ENVVAR_NAME)
90+
if (envvar) {
91+
return new File(envvar)
6092
}
61-
def sdkFolderProp = localPropsFile.readLines()
62-
.find { it.startsWith(ANDROID_SDK_PROP_NAME) }
63-
sdkFolderProp = sdkFolderProp.substring(sdkFolderProp.indexOf('=') + 1).trim()
6493

65-
return new File(sdkFolderProp)
94+
return null
6695
}
6796

6897
private Properties loadAndroidEnvironment() {

0 commit comments

Comments
 (0)