11package 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