2010-09-03 15 views
24

Ich möchte ein Skript erstellen, wo ich einen Emulator starten und nachdem das System vollständig gestartet ist, möchte ich eine .apk installieren.Erkennen, wenn Android-Emulator vollständig gestartet ist

Wie kann ich wissen, wann der Emulator vollständig gebootet ist, damit ich den Installationsbefehl ausführen kann? Hier wird http://developer.android.com/guide/developing/tools/adb.html gesagt, dass nicht korrekt ist.

Wie kann ich das erreichen? Ist es möglich? Ist meine einzige Option, ein paar Minuten zu schlafen, bis ich sicher bin, dass der Emulator gestartet ist?

+1

Versuchen Sie die hier erwähnte Lösung: http://StackOverflow.com/questions/3618114/autostart-application-who-phone-boots-up/3618198#3618198 – ankitjaininfo

Antwort

32

adb shell GetProp

init.svc.bootanim

Dies wird Ihnen sagen, ob die Boot-Animation läuft. Es ist, was wir auf unserem Headless-Build-Server verwenden, um zu überprüfen, ob der Emulator aktiv ist. Die sys.boot_completed von dac2009 hat mich dazu gebracht, diese Flagge zu finden. Wir verwenden stattdessen init.svc.bootanim, weil boot_completed eine Tendenz hat, zu früh auszulösen.

+1

Wie Laden Headless-Emulator im Speicher? – Dharmesh

+0

Diese Stütze funktioniert nicht. Nur sys.boot_completed –

+1

Während ich die Antwort von @neuron testete, erkannte ich, dass ich nach einer anderen Eigenschaft suchen musste, um die verlässlichste Verifizierung zu erhalten _dev.bootcomplete_ (bitte beachten Sie das Präfix: ** dev und nicht sys **, wie sys .boot_completed dreht sich um 1 Weg bevor die Initialisierung beendet ist) –

0

können Sie einen Rundfunkempfänger eingestellt, die mitteilen kann, dass das Gerät Boot

android:name="android.intent.action.BOOT_COMPLETED" 
+2

Dies ist nicht, was ich fragen. Ich spreche über ein Skript auf meinem Heimcomputer, um die Anwendung auf dem Emulator zu installieren, um den Testprozess zu automatisieren. –

+0

Hoppla! .. Ihr Titel lautete "Erkennen, wenn der Android-Emulator vollständig gebootet wurde" und ich dachte, dies wäre der bestmögliche Ansatz. Wie auch immer, selbst wenn Sie ein Skript von Ihrem System ausführen möchten, müssen Sie wissen, wann der Stimulator-Start abgeschlossen ist. Möglicherweise können Sie eine Art von Service von der Sendung starten, die eine URL in Ihrem lokalen IIS aufrufen kann, die Ihr Skript auslösen kann ... – DeRagan

-1

abgeschlossen ist können Sie die stdout Ausgabe des Emulators analysieren, wenn Sie es beginnen mit „-logcat VERBOSE“ und für eine Nachricht warten Dies zeigt an, dass der Emulator gestartet wurde.

Ich habe in der Ausgabe keine gute Nachricht gesehen, aber Sie können eine App schreiben, die auf "android.intend.action.BOOT_COMPLETED" wartet und etwas in das Protokoll schreibt.

Siehe für weitere Informationen.

13

Ich bin nicht sicher, ob dies auf allen Geräten funktioniert, aber es funktioniert auf denen, die ich getestet habe.

Wenn Sie in die Shell gehen, können Sie getprop eingeben und eine Liste der Telefoneigenschaften abrufen. Es sollte eine namens "sys.boot_completed" sein.

Wenn Sie "getprop sys.boot_completed" eingeben, antwortet es "1", wenn das System gebootet wird, und eine leere Zeichenfolge, wenn das System nicht gestartet wird.

+0

Ich habe mindestens ein Gerät in dem Feld, das diese Eigenschaft nicht festgelegt, aber Wenn es vorhanden ist und festgelegt ist, wissen Sie, dass Ihr Gerät gestartet ist. Sie können auch nach dev.bootcomplete suchen, aber ich habe auch ein Gerät in dem Feld gefunden, das dies auch nicht tut. –

+0

Ich testete 'sys.boot_completed' gegen' init.svc.bootanim' und fand, dass 'sys.boot_completed' der konservativere der beiden Ansätze ist. Wenn Ihr Emulator die Möglichkeit hat, sys.boot_completed zu überprüfen, verwenden Sie ihn! – Gi0rgi0s

13
while [ "`adb shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done 

Dieser Code erhält die Informationen von sys.boot_completed wenn der Systemstart abgeschlossen ist, entfernt eine neue Zeile und vergleicht den resultierenden Wert auf 1. Wenn seine ungleich 1/nicht vollständig gebootet/es wird tief und nur 1 Sekunde und versucht es erneut.

Setzen Sie einfach Ihre ADB-Installation ... nach dieser Codezeile.

+0

danke hinzugefügt – Sebo

+0

Das hat bei mir funktioniert, wenn ich das hier überprüfe ein Emulator. Aber wenn ich möchte, dass es nach einem multiplen Emulator sucht, bekomme ich den Fehler "mehr als ein Emulator". Wie man es löst? –

+0

In diesem Fall müssen Sie das Gerät angeben, mit dem Sie das Adb verwenden möchten. Anstelle von AdB-Shell. Verwenden Sie adb -s DEVICE_IDENTIFIER. Der DEVICE_IDENTIFIER ist die ID, die Sie beim Aufrufen von ADB-Geräten sehen. Wenn Sie warten möchten, bis alle Emulatoren gestartet sind. – Sebo

Verwandte Themen