如何使用gradle获取adb shell命令的输出?

时间:2016-12-05 21:38:55

标签: android android-studio gradle adb

A previous post显示了如何获取使用gradle执行的shell命令的输出。但是,当我尝试将其应用于“adb shell”命令时,它会打印空白行。例如,这个脚本:

task runTests {
    doLast {
        def stdout = new ByteArrayOutputStream()
        exec {
            commandLine 'cmd' , '/c', 'dir', 'src'
        }
    print stdout
}

打印

Volume in drive C is Windows
Volume Serial Number is 0AEC-E2A0

Directory of C:\Users\mb\android\project

12/02/2016  12:37 PM    <DIR>          .
12/02/2016  12:37 PM    <DIR>          ..
12/02/2016  12:37 PM    <DIR>          androidTest
12/02/2016  12:37 PM    <DIR>          main
12/02/2016  12:37 PM    <DIR>          test
           0 File(s)              0 bytes
           5 Dir(s)  13,056,221,184 bytes free

但是这个:

task runTests {
    doLast {
        def stdout = new ByteArrayOutputStream()
        exec {
            commandLine 'cmd' , '/c', 'adb', 'shell' , 'ls'
        }
    print stdout
}

打印空白行。它似乎为每行输出打印一个空行。如果我将命令更改为

commandLine 'cmd' , '/c', 'adb', 'shell' , 'ls' , 'acct'

然后它会打印较少的空白行,因为'acct'目录中的文件较少。如果我跑

adb shell ls acct
在Windows命令提示符中

打印

cgroup.clone_children
cgroup.event_control
cgroup.procs
cpuacct.stat
cpuacct.usage
cpuacct.usage_percpu
notify_on_release
release_agent
tasks
uid
uid_10006
uid_10014
uid_1037

我正在运行Windows 8,Android Studio 2.2和Gradle 2.10

更新 我试过安德烈的建议:

task runTests {
    doLast {
        def testOutput = 'adb shell ls acct'.execute([], project.rootDir).text.trim()
        setProperty("archivesBaseName", testOutput)
        println testOutput
    }
}

但这会输出输出的最后一行,即

uid_1037

1 个答案:

答案 0 :(得分:0)

我使用以下代码来捕获并使用命令输出:

def gitSha = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.1"
    ...
    defaultConfig {
        applicationId "ru.****.***"
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 2
        versionName "0.2"
        setProperty("archivesBaseName", APK_NAME + "-" + versionName + "." + versionCode + "-" + "${gitSha}")
    }
    ...
}

我认为adb shell可以用同样的方式调用。