1*964fdd0aSCedric van Puttenimport assert from 'assert'; 2*964fdd0aSCedric van Puttenimport fs from 'fs'; 3*964fdd0aSCedric van Puttenimport os from 'os'; 4*964fdd0aSCedric van Puttenimport path from 'path'; 5*964fdd0aSCedric van Putten 6*964fdd0aSCedric van Putten/** 7*964fdd0aSCedric van Putten * The default Android SDK locations per platform. 8*964fdd0aSCedric van Putten * @see https://developer.android.com/studio/run/emulator-commandline#filedir 9*964fdd0aSCedric van Putten * @see https://developer.android.com/studio/intro/studio-config#optimize-studio-windows 10*964fdd0aSCedric van Putten */ 11*964fdd0aSCedric van Puttenconst ANDROID_DEFAULT_LOCATION: Readonly<Partial<Record<NodeJS.Platform, string>>> = { 12*964fdd0aSCedric van Putten darwin: path.join(os.homedir(), 'Library', 'Android', 'sdk'), 13*964fdd0aSCedric van Putten linux: path.join(os.homedir(), 'Android', 'sdk'), 14*964fdd0aSCedric van Putten win32: path.join(os.homedir(), 'AppData', 'Local', 'Android', 'Sdk'), 15*964fdd0aSCedric van Putten}; 16*964fdd0aSCedric van Putten 17*964fdd0aSCedric van Putten/** 18*964fdd0aSCedric van Putten * Resolve and validate the root folder where the Android SDK has been installed. 19*964fdd0aSCedric van Putten * This checks both `ANDROID_HOME`, `ANDROID_SDK_ROOT`, and the default path for the current platform. 20*964fdd0aSCedric van Putten * @see https://developer.android.com/studio/command-line/variables 21*964fdd0aSCedric van Putten */ 22*964fdd0aSCedric van Puttenexport function assertSdkRoot() { 23*964fdd0aSCedric van Putten if (process.env.ANDROID_HOME) { 24*964fdd0aSCedric van Putten assert( 25*964fdd0aSCedric van Putten fs.existsSync(process.env.ANDROID_HOME), 26*964fdd0aSCedric van Putten `Failed to resolve the Android SDK path. ANDROID_HOME is set to a non-existing path: ${process.env.ANDROID_HOME}` 27*964fdd0aSCedric van Putten ); 28*964fdd0aSCedric van Putten return process.env.ANDROID_HOME; 29*964fdd0aSCedric van Putten } 30*964fdd0aSCedric van Putten 31*964fdd0aSCedric van Putten if (process.env.ANDROID_SDK_ROOT) { 32*964fdd0aSCedric van Putten assert( 33*964fdd0aSCedric van Putten fs.existsSync(process.env.ANDROID_SDK_ROOT), 34*964fdd0aSCedric van Putten `Failed to resolve the Android SDK path. Deprecated ANDROID_SDK_ROOT is set to a non-existing path: ${process.env.ANDROID_SDK_ROOT}. Use ANDROID_HOME instead.` 35*964fdd0aSCedric van Putten ); 36*964fdd0aSCedric van Putten return process.env.ANDROID_SDK_ROOT; 37*964fdd0aSCedric van Putten } 38*964fdd0aSCedric van Putten 39*964fdd0aSCedric van Putten const defaultLocation = ANDROID_DEFAULT_LOCATION[process.platform]; 40*964fdd0aSCedric van Putten if (defaultLocation) { 41*964fdd0aSCedric van Putten assert( 42*964fdd0aSCedric van Putten fs.existsSync(defaultLocation), 43*964fdd0aSCedric van Putten `Failed to resolve the Android SDK path. Default install location not found: ${defaultLocation}. Use ANDROID_HOME to set the Android SDK location.` 44*964fdd0aSCedric van Putten ); 45*964fdd0aSCedric van Putten return defaultLocation; 46*964fdd0aSCedric van Putten } 47*964fdd0aSCedric van Putten 48*964fdd0aSCedric van Putten return null; 49*964fdd0aSCedric van Putten} 50