2010-09-03 8 views
24

मैं एक स्क्रिप्ट बनाना चाहता हूं जहां मैं एक एमुलेटर शुरू करता हूं और सिस्टम पूरी तरह से बूट होने के बाद, मैं एक .apk इंस्टॉल करना चाहता हूं।पता लगाएं कि एंड्रॉइड एमुलेटर पूरी तरह से बूट होने पर

मुझे कैसे पता चलेगा कि एमुलेटर पूरी तरह से बूट होने पर मैं इंस्टॉल कमांड चला सकता हूं? यहां http://developer.android.com/guide/developing/tools/adb.html कहा जाता है कि adb wait-for-device install <app>.apk सही नहीं है।

तो मैं इसे कैसे प्राप्त कर सकता हूं? क्या यह संभव है? क्या मेरा एकमात्र विकल्प कुछ मिनट तक सोना है जब तक कि मैं यह सुनिश्चित नहीं कर सकता कि एमुलेटर शुरू हो गया है?

+1

यहां उल्लेखित समाधान का प्रयास करें: http://stackoverflow.com/questions/3618114/autostart-plplication-while-phone-boots-up/3618198#3618198 – ankitjaininfo

उत्तर

32

adb शेल getprop init.svc.bootanim

यह आपको बता देंगे या नहीं, बूट एनिमेशन चल रहा है। एमुलेटर ऊपर है या नहीं, यह जांचने के लिए हम अपने हेडलेस बिल्ड सर्वर पर इसका उपयोग करते हैं। Dac2009 से sys.boot_completed मुझे उस ध्वज को खोजने के लिए प्रेरित करता है। हम इसके बजाय init.svc.bootanim का उपयोग करते हैं क्योंकि boot_completed में बहुत जल्दी ट्रिगर करने की प्रवृत्ति होती है।

+1

स्मृति में हेडलेस एमुलेटर कैसे लोड करें? – Dharmesh

+0

यह प्रोप काम नहीं करता है। केवल sys.boot_completed –

+1

जब मैं @ न्यूरॉन के उत्तर का परीक्षण कर रहा था, मुझे एहसास हुआ कि मुझे सबसे विश्वसनीय सत्यापन _dev.bootcomplete_ प्राप्त करने के लिए एक अलग संपत्ति की जांच करनी है (कृपया उपसर्ग: ** dev और sy sy **, sys के रूप में नोट करें प्रारंभिककरण समाप्त होने से पहले .boot_completed 1 तरीके से बदल जाता है) –

0

आपको उस प्रसारण रिसीवर जो सूचित कर सकते हैं उपकरण बूट पूरा हो गया है कि निर्धारित कर सकते हैं

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

यह मैं नहीं पूछ रहा हूं। मैं परीक्षण प्रक्रिया को स्वचालित करने में सक्षम होने के लिए एम्यूलेटर पर एप्लिकेशन इंस्टॉल करने के लिए अपने घर कंप्यूटर पर एक स्क्रिप्ट बनाने के बारे में बात कर रहा हूं। –

+0

ओह! .. आपका शीर्षक पढ़ता है "पता लगाएं कि एंड्रॉइड एमुलेटर पूरी तरह से बूट हो गया है" और मैंने सोचा कि यह सबसे अच्छा संभव दृष्टिकोण होगा। कोई भी अगर आप अपने सिस्टम से एक स्क्रिप्ट चलाने के लिए भी चाहते हैं तो आपको यह जानना होगा कि उत्तेजक बूट कब पूरा हो गया है। हो सकता है कि आप प्रसारण से किसी प्रकार की सेवा शुरू कर सकें जो आपके स्थानीय आईआईएस में एक यूआरएल कॉल कर सकता है जो आपकी स्क्रिप्ट को फायर कर सकता है ... – DeRagan

-1

आप एमुलेटर की stdout उत्पादन को पार्स कर सकते हैं यदि आप "वर्बोज़ -logcat" के साथ शुरू करने और संदेश के लिए प्रतीक्षा जो इंगित करता है कि एमुलेटर बूट किया गया है।

मैंने आउटपुट में अभी कोई अच्छा संदेश नहीं देखा है, लेकिन आप एक ऐप लिख सकते हैं जो "android.intend.action.BOOT_COMPLETED" सुन रहा है और लॉग को कुछ लिखता है।

अधिक जानकारी के लिए http://developer.android.com/guide/developing/tools/emulator.html देखें।

13

मुझे यकीन नहीं है कि यह सभी उपकरणों पर काम करता है, लेकिन यह उन परीक्षणों पर काम करता है जिन्हें मैंने परीक्षण किया है।

यदि आप खोल में जाते हैं, तो आप getprop टाइप कर सकते हैं, और फोन गुणों की एक सूची प्राप्त कर सकते हैं। "sys.boot_completed" नामक एक होना चाहिए।

यदि आप "getprop sys.boot_completed" टाइप करते हैं तो यह सिस्टम को बूट होने पर "1" का जवाब देगा, और यदि सिस्टम बूट नहीं होता है तो खाली स्ट्रिंग।

+0

मुझे उस क्षेत्र में कम से कम एक डिवाइस का सामना करना पड़ा है जो उस संपत्ति को सेट नहीं करता है, लेकिन यदि यह मौजूद है और यह सेट है, तो आप जानते हैं कि आपका डिवाइस बूट हो गया है। आप dev.bootcomplete को भी देख सकते हैं लेकिन मुझे उस क्षेत्र में एक डिवाइस का भी सामना करना पड़ा है जो इसे सेट नहीं करता है। –

+0

मैंने 'sys.boot_completed' का परीक्षण' init.svc के खिलाफ किया था।bootanim' और पाया कि 'sys.boot_completed' दो दृष्टिकोणों का अधिक रूढ़िवादी है। यदि आपके एमुलेटर में sys.boot_completed की जांच करने का विकल्प है, तो इसका उपयोग करें! – Gi0rgi0s

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

इस कोड, sys.boot_completed प्रणाली बूट पूरा हुआ या नहीं से जानकारी हो जाता है एक नई पंक्ति दूर करता है और 1. करने के लिए परिणामी मूल्य की तुलना तो इसकी असमान 1/पूरी तरह से हटा दिया गया नहीं/यह सिर्फ 1 सेकंड सो जाएगा और फिर से कोशिश करता है।

कोड की इस पंक्ति के बाद बस अपना एडीबी इंस्टॉल करें ...।

+0

धन्यवाद पसंद करता हूं – Sebo

+0

यह मेरे लिए काम करता है जब मैं इसे जांच रहा हूं एक एमुलेटर। लेकिन अगर मैं इसे एकाधिक एमुलेटर की जांच करना चाहता हूं तो यह मुझे "एक से अधिक एमुलेटर" त्रुटि देता है। इसे कैसे हल करें? –

+0

इस मामले में आपको उस डिवाइस को निर्दिष्ट करने की आवश्यकता है जिसके साथ आप एडीबी का उपयोग करना चाहते हैं। एडीबी खोल के बजाय। Adb -s DEVICE_IDENTIFIER का उपयोग करें। DEVICE_IDENTIFIER वह आईडी है जिसे आप एडीबी डिवाइस पर कॉल करते समय देख रहे हैं। यदि आप सभी अनुकरणकर्ताओं के लिए शुरू करना चाहते हैं। – Sebo