2012-02-21 15 views
21

Tenemos un dispositivo Android y como parte de las pruebas necesito ejecutar una aplicación de prueba de consola en el dispositivo de destino. Si la aplicación de prueba detecta un error, devuelve -1.ADB Códigos de error

Puedo usar adb shell para ejecutar las aplicaciones de prueba de forma remota en el destino, pero no puedo encontrar una forma de recuperar el código de retorno. Necesito esto para poder integrar esto en un conjunto de pruebas automatizadas.

Podría intentar almacenar la salida de la consola por algún texto de falla, pero eso es un poco sucio. ¿Alguien sabe de una solución más elegante?

+0

Tengo el mismo problema. Cualquiera que sea la ejecución de adb, siempre devuelve 0. –

+2

[Problema 3254: \t adb shell no devuelve el código de salida del programa] (https://code.google.com/p/android/issues/detail?id=3254) – n611x007

Respuesta

9

Esto es una solución para obtener el código de salida: adb shell '{su comando aquí}>/dev/null 2> & 1; echo $? '

Esta es una envoltura alrededor de ADB en 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

¿Alguna vez has necesitado usar 'echo \ $?'? – devin

4

Se podría usar Facebook de fb-adb, una "Una mejor cáscara para dispositivos Android", que "propagan el código de salida del programa en lugar de siempre salir con el estado 0".

Cuestiones relacionadas