A previous post показывает, как получить вывод команды оболочки, выполненной с использованием gradle. Однако, когда я пытаюсь применить это к команде «adb shell», он печатает пустые строки. Например, этот сценарий:Как получить результат команды adb shell с помощью gradle?
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'
Затем он печатает меньше пустые строки, потому что есть меньше файлов в каталоге «учетного». Если я бегу
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
Update Я попытался предложение Андрея :
task runTests {
doLast {
def testOutput = 'adb shell ls acct'.execute([], project.rootDir).text.trim()
setProperty("archivesBaseName", testOutput)
println testOutput
}
}
Но это печатает последнюю строку вывода, т.е.
uid_1037
Спасибо за предложение, @ andrey-kopeyko. Я пробовал это, но он печатает пустые строки для всего, кроме самой последней строки вывода. В случае «adb shell ls acct» он печатает 12 пустых строк, за которыми следует «uid_1037» – Martin
Какой код вы пробовали? Запишите конкретный код и вывод. –
Вам не нужно обертывать команду 'cmd/c' - попробуйте выполнить' adb' напрямую, например 'adb shell ls -l /' –