2012-02-21 21 views
21

Abbiamo un dispositivo Android e come parte del test devo eseguire un'applicazione di test della console sul dispositivo di destinazione. Se l'applicazione di test rileva un errore, restituisce -1.Codice di errore ADB

Posso usare adb shell per eseguire le applicazioni di test in remoto sulla destinazione ma non riesco a trovare un modo per ottenere il codice di ritorno. Ho bisogno di questo così da poterlo costruire in una suite di test automatizzata.

Potrei provare a eseguire l'output della console per qualche testo di errore, ma questo è un po 'sudicio. Qualcuno sa di una soluzione più elegante?

+0

Ho lo stesso problema. Qualunque cosa esegua adb, restituisce sempre 0. –

+2

[Issue 3254: \t adb shell non restituisce il codice di uscita del programma] (https://code.google.com/p/android/issues/detail?id=3254) – n611x007

risposta

9

Questa è una soluzione alternativa per ottenere il codice di uscita: adb shell '{il comando qui}>/dev/null 2> & 1; echo $? '

Questo è un wrapper adb in Ruby:

def adb(opt) 
    input = "#{adb_command} #{opt[:command]} #{opt[:params]}" 
    puts "Executing #{input}...\n" 
    output = nil 
    exit_code = 0 

    def wait_for(secs) 
    if secs 
     begin 
     Timeout::timeout(secs) { yield } 
     rescue 
     print 'execution expired' 
     end 
    else 
     yield 
    end 
    end 

    wait_for(opt[:timeout]) do 
    case opt[:command] 
    when :install, :push, :uninstall 
     output, exit_code = `#{input}`, $?.to_i 
    when :shell 
     input = "#{adb_command} shell \"#{opt[:params]}; echo \\$?\"" 
     output = `#{input}`.split("\n") 
     exit_code = output.pop.to_i 
     output = output.join("\n") 
    else 
     raise 'Error: param command to adb not defined!' 
    end 
    end 

    return if opt[:ignore_fail] and output =~ /#{opt[:ignore_fail]}/ 
    raise output unless exit_code == 0 
end 
+1

Hai mai avuto bisogno di usare 'echo \ $?'? – devin

4

Si potrebbe utilizzare Facebook di fb-adb, una "Un guscio meglio per i dispositivi Android", che "si propaga stato di uscita del programma invece di uscire sempre con lo status di 0".