@@ -6,10 +6,13 @@ import kotlinx.cli.ArgParser
66import kotlinx.cli.ArgType
77import kotlinx.cli.default
88import kotlinx.cli.delimiter
9+ import java.io.File
910import java.lang.management.ManagementFactory
1011import java.nio.file.Path
12+ import kotlin.system.exitProcess
1113
1214private const val DESKTOP = " Desktop-"
15+ private const val ERROR_EXIT_CODE = - 1
1316
1417internal fun main (args : Array <String >) {
1518 val parser = ArgParser (" Adb Server" )
@@ -35,7 +38,7 @@ internal fun main(args: Array<String>) {
3538 description = " Logs Level"
3639 ).default(LogLevel .INFO )
3740
38- val adbPath by parser.option(
41+ val adbPathFromArguments by parser.option(
3942 type = ArgType .String ,
4043 fullName = " adbPath" ,
4144 description = " Path to adb binary, if not set when use 'adb' from process environment"
@@ -46,10 +49,17 @@ internal fun main(args: Array<String>) {
4649 val desktopName = getDesktopName()
4750 val desktopLogger = LoggerFactory .getDesktopLogger(logLevel, desktopName)
4851
49- desktopLogger.i(" Desktop started with arguments: emulators=$emulators , adbServerPort=$port " )
52+ val adbPath = adbPathFromArguments?.let { Path .of(it) } ? : findAdbAtPath()
53+
54+ if (adbPath == null ) {
55+ desktopLogger.e(" Adb path not passed via arguments. Adb not found at path variable. Aborting..." )
56+ exitProcess(ERROR_EXIT_CODE )
57+ }
58+
59+ desktopLogger.i(" Desktop started with arguments: emulators=$emulators , adbServerPort=$port , adbPath=$adbPath " )
5060
5161 val cmdCommandPerformer = CmdCommandPerformer (desktopName)
52- val adbCommandPerformer = AdbCommandPerformer (adbPath?. let { Path .of(it) } , cmdCommandPerformer)
62+ val adbCommandPerformer = AdbCommandPerformer (adbPath, cmdCommandPerformer)
5363 val desktop = Desktop (
5464 cmdCommandPerformer = cmdCommandPerformer,
5565 adbCommandPerformer = adbCommandPerformer,
@@ -65,3 +75,15 @@ private fun getDesktopName(): String {
6575 val pid = processName.split(" @" .toRegex()).toTypedArray()[0 ].toLong()
6676 return DESKTOP + pid
6777}
78+
79+ /* *
80+ * Search for adb executable at environment PATH variable
81+ */
82+ private fun findAdbAtPath (): Path ? {
83+ return System .getenv(" PATH" )
84+ .split(" :" )
85+ .asSequence()
86+ .map { File (it) }
87+ .flatMap { it.listFiles()?.toList() ? : emptyList() }
88+ .firstOrNull { it.nameWithoutExtension == " adb" }?.toPath()
89+ }
0 commit comments