Подтвердить что ты не робот

Как получить путь к ADB в build.gradle

Я пытаюсь запустить приложение через gradle task.


task runDebug(dependsOn: ['installDebug', 'run']) {
}

task run(type: Exec) {
commandLine 'adb', 'shell', 'am', 'start', '-n', 'com.example.myexample/.ui.SplashScreenActivity'
}

Но этот код не работает, и я получаю ошибку:
a problem occurred starting process 'command 'adb''

Однако, когда я указываю путь к adb явно, приложение запускается.


task run(type: Exec) {
    commandLine 'D:\\android\\android-studio\\sdk\\platform-tools\\adb', 'shell', 'am', 'start', '-n', 'com.example.myexample/.ui.SplashScreenActivity'
}

Итак, как я могу получить переменную, которая содержит путь и переносит его на commandLine?

4b9b3361

Ответ 1

Проблема решена.
Переменная должна содержать

def adb = "$System.env.ANDROID_HOME/platform-tools/adb"

И полная задача выглядит как


task run(type: Exec) {
    def adb = "$System.env.ANDROID_HOME/platform-tools/adb"
    commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.example.myexample/.ui.SplashScreenActivity'
}

UPD
Другой способ без использования ANDROID_HOME


task run(type: Exec) {
    def rootDir = project.rootDir
    def localProperties = new File(rootDir, "local.properties")
    if (localProperties.exists()) {
        Properties properties = new Properties()
        localProperties.withInputStream { 
            instr -> properties.load(instr)
        }
        def sdkDir = properties.getProperty('sdk.dir')
        def adb = "$sdkDir/platform-tools/adb"
        commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.example.myexample/.ui.SplashScreenActivity'
    }
}

Ответ 2

Вы должны использовать логику, которую уже имеет плагин Android Gradle для поиска местоположений SDK и adb, чтобы ваш script использовал те же самые.

# Android Gradle >= 1.1.0
File sdk = android.getSdkDirectory()
File adb = android.getAdbExe()

# Android Gradle < 1.1.0
File sdk = android.plugin.getSdkFolder()
File adb = android.plugin.extension.getAdbExe()

Ответ 3

def androidPlugin = project.plugins.findPlugin("android")
def adb = androidPlugin.sdkHandler.sdkInfo?.adb

Ответ 4

В Windows вы можете просто зарегистрировать application path для adb.exe со следующим файлом .reg:

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\adb.exe]
@="D:\\android\\android-studio\\sdk\\platform-tools\\adb.exe"
"Path"="D:\\android\\android-studio\\sdk\\platform-tools"

и просто сохраните свою исходную командную строку

Ответ 5

Мое решение по умолчанию для этой проблемы - добавить adb к переменной пути, чтобы вы могли использовать команду adb из каждого пути.
Вы можете установить его, например. из консоли:

set path=%path%;x:\path\to\adb

Альтернативу вы можете установить с помощью пользовательского интерфейса. См. Также это объяснение на java.com.

Ответ 6

мы можем получить, если из расширения android.

android.adbExe