15

我试图通过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

4

6 回答 6

30

您应该使用 Android Gradle 插件已有的逻辑来查找 SDK 和 adb 位置,以确保您的脚本使用相同的位置。

# 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()
于 2014-11-06T03:09:18.193 回答
19

问题解决了。
变量必须包含

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'
    }
}
于 2014-01-23T07:40:08.593 回答
7
def androidPlugin = project.plugins.findPlugin("android")
def adb = androidPlugin.sdkHandler.sdkInfo?.adb
于 2014-11-13T15:23:47.850 回答
1

在 Windows 中,您只需使用以下文件注册一个application pathfor :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"

并保留您原来的命令行

于 2014-01-22T16:32:09.713 回答
0

我对这个问题的默认解决方案是将 adb 添加到您的路径变量中,以便您可以从每个路径中使用 adb 命令。
您可以像这样从控制台设置它:

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

或者,您可以通过 UI 进行设置。另请参阅java.com上的此说明。

于 2015-09-28T09:54:23.640 回答
0

我们可以从 android 扩展中获取 if。

android.adbExe

于 2016-02-15T11:36:33.490 回答