2016-12-05 5 views
0

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 

ответ

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 можно назвать таким же образом.

+0

Спасибо за предложение, @ andrey-kopeyko. Я пробовал это, но он печатает пустые строки для всего, кроме самой последней строки вывода. В случае «adb shell ls acct» он печатает 12 пустых строк, за которыми следует «uid_1037» – Martin

+0

Какой код вы пробовали? Запишите конкретный код и вывод. –

+0

Вам не нужно обертывать команду 'cmd/c' - попробуйте выполнить' adb' напрямую, например 'adb shell ls -l /' –

Смежные вопросы