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
答案 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
可以用同样的方式调用。