Fix adb path resolution: lazy eval instead of default param

ExternalTools.resolve() called as default constructor param was
evaluated at class load time, before the filesystem was checked.
Use lazy delegation instead so adb path is resolved on first use.
This commit is contained in:
Kyle Bolen
2026-08-02 18:29:35 +00:00
parent b416e528b0
commit d041298c5c

View File

@@ -19,11 +19,17 @@ import kotlin.io.path.absolutePathString
* Install via: brew install android-platform-tools * Install via: brew install android-platform-tools
*/ */
class AndroidConnector( class AndroidConnector(
private val adbBin: String = com.bolenpad.photophetch.util.ExternalTools.resolve("adb"), private val adbBin: String = "adb",
) : DeviceConnector { ) : DeviceConnector {
private val log = LoggerFactory.getLogger(AndroidConnector::class.java) private val log = LoggerFactory.getLogger(AndroidConnector::class.java)
// Resolve adb path lazily — ExternalTools searches Homebrew paths
// so the packaged .app finds adb even without shell PATH
private val resolvedAdb: String by lazy {
com.bolenpad.photophetch.util.ExternalTools.resolve(adbBin)
}
// Directories on Android that contain camera-roll originals. // Directories on Android that contain camera-roll originals.
// Used as fallback if dynamic DCIM discovery finds nothing. // Used as fallback if dynamic DCIM discovery finds nothing.
private val fallbackCameraDirs = listOf( private val fallbackCameraDirs = listOf(
@@ -213,7 +219,7 @@ class AndroidConnector(
private fun runAdb(serial: String?, vararg args: String): String { private fun runAdb(serial: String?, vararg args: String): String {
val cmd = buildList { val cmd = buildList {
add(adbBin) add(resolvedAdb)
if (serial != null) { if (serial != null) {
add("-s") add("-s")
add(serial) add(serial)