2012-02-21 35 views
21

Android cihazımız var ve testin bir parçası olarak, hedef cihazda bir konsol testi uygulamasını kullanmam gerekiyor. Test uygulaması bir hata tespit ederse -1 değerini döndürür.ADB Hata kodları

Test uygulamalarını hedefe uzaktan çalıştırmak için adb kabuğunu kullanabilirim ancak dönüş kodunu geri almak için bir yol bulamıyorum. Buna ihtiyacım var, bunu otomatik bir test paketine yerleştirebilirim.

Bazı hata metinleri için konsol çıktısını bozmayı deneyebilirim, ancak bu biraz kirlidir. Daha şık bir çözümü bilen var mı?

+0

Aynı problemim var. Her hangi bir adb yürütülürse, her zaman 0 değerini döndürür. –

+2

[Yayın 3254: \t adb kabuğu programın çıkış kodunu döndürmez] (https://code.google.com/p/android/issues/detail?id=3254) – n611x007

cevap

9

Bu, çıkış kodunu almak için bir geçici çözümdür: adb kabuğu '{komutunuz burada}>/dev/null 2> & 1; echo $? '

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

Hiç echo \ $ kullanmak zorunda kaldınız mı? – devin

4

Sen "her zaman durum 0 ile çıkmak yerine programın çıkış durumu yayar" "Android cihazlar için daha iyi bir kabuk" Facebook'un fb-adb, bir kullanabilirsiniz:

Bu

Ruby adb etrafında sarıcı.