पिछले कुछ महीनों से, मैं एंड्रॉइड एसडीके पर काम कर रहा हूं, जो नक्सियो कंटेंट मैनेजमेंट प्लेटफॉर्म का हिस्सा है। विशेष रूप से बहुत से काम हाल ही में एसडीके की आधिकारिक रिलीज के दृष्टिकोण के साथ हुए हैं। मैं विशेष रूप से परीक्षण और अनुकरण में, एंड्रॉइड विकास के बारे में कुछ व्यावहारिक सुझाव साझा करना चाहता हूं। विकास के कई दिनों के बाद, मुझे एहसास हुआ कि एंड्रॉइड एमुलेटर के साथ काम करना चीनी नहीं है, क्योंकि यह अविश्वसनीय रूप से धीमा है।
शुरू करने के लिए, यह धीरे-धीरे शुरू होता है, लेकिन भले ही आप लॉन्च को तेज करने के लिए स्नैपशॉट राज्यों का उपयोग करते हैं, कोड निष्पादन अभी भी धीमा है, खासकर डिबग मोड में।
क्यूमू मापदंडों को फाइन-ट्यूनिंग करने से बहुत मदद नहीं मिली - एमुलेटर की गति धीमी रही, यही वजह है कि ज्यादातर डेवलपर्स यूएसबी के माध्यम से जुड़े वास्तविक उपकरणों का उपयोग करना पसंद करते हैं।
किसी भी मामले में, मैं एक समाधान खोजना चाहता था, क्योंकि मैं प्रोजेक्टर पर आवेदन का परिणाम दिखाना चाहता था और यह नहीं चाहता था कि आवेदन धीमा हो।
अनुकरण बनाम अनुकरण
मैं ऐप्पल से प्लेटफार्मों के लिए सॉफ्टवेयर विकसित नहीं करता हूं, लेकिन ऐसा लगता है कि आईफोन सिम्युलेटर में एंड्रॉइड एमुलेटर जैसी प्रदर्शन समस्याएं नहीं हैं।
कारणों में से एक यह है कि यह "असली सिम्युलेटर" के रूप में काम नहीं करता है, क्योंकि IPhone सिम्युलेटर में उपयोग किए जाने वाले सीपीयू निर्देश सिम्युलेटर (x86) चलाने वाले कंप्यूटर के लिए समान हैं।
दूसरी ओर, एंड्रॉइड x86 प्रोसेसर के शीर्ष पर एक वास्तविक एआरएम आर्किटेक्चर प्रोसेसर का अनुकरण करने के लिए मजबूर किया जाता है। यह प्रदर्शन के मामले में काफी महत्वपूर्ण ओवरहेड जोड़ता है।
कम से कम एप्लिकेशन को प्रदर्शित करने के लिए, मुझे एआरएम का अनुकरण करने की आवश्यकता नहीं है, मुझे केवल एंड्रॉइड और मेरे एप्लिकेशन को चलाने की क्षमता की आवश्यकता है।
Android_x86
सौभाग्य से, एंड्रॉइड को x86 प्रोसेसर में पोर्ट करने के लिए एक ओपन सोर्स प्रोजेक्ट है:
http://www.android-x86.org/ ।
परियोजना में डाउनलोड के लिए कई छवियां हैं, और हालांकि वे एंड्रॉइड एसडीके के सभी आधिकारिक रिलीज के साथ नहीं रहते हैं, वे एंड्रॉइड 2.3 की बूट करने योग्य छवि प्रदान करते हैं, जो मुझे रुचि रखते हैं।
VirtualBox के अंदर Android_x86 सेटअप
पहला कदम: Android_x86 ISO छवि डाउनलोड करें। मैंने
android-x86-2.3-RC1-eeepc.iso
, जिसे
http://www.android-x86.org// डाउनलोड से डाउनलोड किया जा सकता है।
अगला चरण: इस छवि को चलाने में सक्षम वर्चुअल मशीन बनाना।
मैंने VirtualBox का उपयोग किया, लेकिन मैंने सुना है कि QEmu भी अच्छी तरह से काम करता है।
तो, VirtualBox में आपको एक नई मशीन बनाने की आवश्यकता है:
- लक्ष्य ओएस: लिनक्स चुनें
- लक्ष्य ओएस संस्करण: अन्य
- मैंने 1 जीबी रैम और 1 सीपीयू का इस्तेमाल किया (मैंने डिफ़ॉल्ट रूप से बाकी सेटिंग्स छोड़ दीं)
- हार्ड ड्राइव जोड़ें: VDI ड्राइव, डायनामिक साइज़, 512 Mio
- CDROM को जोड़ें, जिसमें ISO डाउनलोड किया गया है
बूट मेनू में, हार्ड ड्राइव पर इंस्टॉलेशन का चयन करें:

स्थापना के दौरान, आपको निम्नलिखित कार्य करने होंगे:
- अपनी हार्ड ड्राइव पर एक नया विभाजन बनाएँ
- इसे ext3 में प्रारूपित करें
- Android स्थापित करने के लिए इस अनुभाग को चुनें
स्थापना पूर्ण होने पर:
- वर्चुअल मशीन बंद करें
- CDROM डिवाइस को निकालें जो ISO छवि की ओर इशारा करता है (वर्चुअलबॉक्स कॉन्फ़िगरेशन विंडो में)
वर्चुअल मशीन को बूट करें: अब आपके पास एक काम करने वाली एंड्रॉइड x86 छवि है।
लेकिन चूंकि यह ईई पीसी के लिए डिफ़ॉल्ट रूप से कॉन्फ़िगर किया गया है, यह स्मार्टफोन स्क्रीन के लिए डिज़ाइन किए गए अनुप्रयोगों के परीक्षण के लिए आदर्श नहीं है।
अब हमें फोन स्क्रीन के लिए कॉन्फ़िगरेशन बदलने की आवश्यकता है।
VM और VirtualBox को बंद करें।
पहला कदम: नए रिज़ॉल्यूशन मोड बनाएं। मैंने 3 मोड परिभाषित किए हैं:
VBoxManage setextradata "Android2.3" "CustomVideoMode1" "320x480x16" VBoxManage setextradata "Android2.3" "CustomVideoMode2" "640x960x16" VBoxManage setextradata "Android2.3" "CustomVideoMode3" "480x720x16"
यहां Android2.3 निर्मित वर्चुअल मशीन का नाम है।
अब जब हमने नए मोड की घोषणा की है, तो आपको उनका उपयोग करने की आवश्यकता है। ऐसा करने के लिए, आपको कर्नेल पैरामीटर को बदलना होगा।
ऐसा करने के लिए, आपको वर्चुअल मशीन को पुनरारंभ करना होगा और बूट मेनू में डिबग मोड का चयन करना होगा ताकि कमांड लाइन के साथ एंड्रॉइड बूट हो।
हम वर्चुअल मशीन शुरू करते हैं।
जब यह शुरू होता है, तो हम बूट विभाजन को रीड / राइट में लिखेंगे ताकि हम ग्रब कॉन्फ़िगरेशन को संशोधित कर सकें।
mount -o remount,rw /mnt
उसके बाद, menu.lst फ़ाइल को संपादित करना संभव होगा।
vi /mnt/grub/menu.lst
अब पहले मेनू आइटम (3 पंक्तियों) को डुप्लिकेट करें और कर्नेल मापदंडों (पहली प्रविष्टि "शीर्षक" और अगली दो पंक्तियों को संपादित करें)।
डिफ़ॉल्ट विकल्प निम्नानुसार हैं:
शांत जड़ = / dev / ram0 androidboot_hardware = eeepc acpi_sleep = s3_bios, s3_mode DPI = 240 SRC = / android-2.3-RC1
मेरे द्वारा उपयोग किए जाने वाले विकल्प हैं:
शांत जड़ = / dev / ram0 androidboot_hardware = generic_x86 acpi_sleep = s3_bios, s3_mode DPI = 240 UVESA_MODE = 480x720 SRC = / Android-2.3-RC1
आपको जो नाम पसंद है वह दर्ज करें।
यदि आप बूट पर रिज़ॉल्यूशन चुनना चाहते हैं, तो आप ऐसा कर सकते हैं:
शांत जड़ = / dev / ram0 androidboot_hardware = generic_x86 acpi_sleep = s3_bios, s3_mode vga = SRC = / android-2.3-RC1 से पूछें
अपने menu.lst (: wq) को सहेजें और VirtualBox मेनू का उपयोग करके वर्चुअल मशीन को पुनरारंभ करें।
अब आप एंड्रॉइड वर्चुअल मशीन शुरू कर सकते हैं, जो फोन की तरह दिखाई देगा।
वर्चुअल मशीन का उपयोग करने के लिए कुछ सुझाव:
- यदि आप एंड्रॉइड स्क्रीन पर माउस नहीं देखते हैं, तो माउस एकीकरण (होस्ट + आई बटन) को बंद करने के लिए वर्चुअलबॉक्स मेनू का उपयोग करें।
- विंडोज बटन एंड्रॉइड में होम बटन से मेल खाता है।
- Esc Android में बैक बटन से मेल खाता है
- F2 मेनू बटन से मेल खाता है
- F3 खोज बटन से मेल खाता है
- Alt + F1 - कंसोल मोड में स्विच करें
- Alt + F7 - GUI मोड पर स्विच करें
एक Android, AVD और ग्रहण वर्चुअल मशीन कनेक्ट करना
लक्ष्य था नई आभासी मशीन का उपयोग करने के लिए Eclispe से परीक्षण और डिबग अनुप्रयोगों की क्षमता। काम करने के लिए, यह मुख्य ऑपरेटिंग सिस्टम (जहां ग्रहण चल रहा है) और अतिथि VM के बीच नेटवर्क कनेक्शन को कॉन्फ़िगर करने के लिए थकाऊ है। VirtualBox में इसके लिए नेटवर्क सेटिंग्स में कई सेटिंग्स हैं:
- ब्रिज मोड का उपयोग करें: यह काम करना चाहिए, लेकिन इसे मुख्य ओएस पर शुरू करने के लिए डीएचसीपी की आवश्यकता हो सकती है
- केवल होस्ट नेटवर्क: मेजबान और अतिथि मशीनों के बीच एक आभासी नेटवर्क बनाता है; यह उपयोग करने का सबसे आसान विकल्प है

जब नेटवर्क कॉन्फ़िगर किया गया है, तो वर्चुअल मशीन को पुनरारंभ करें, कमांड लाइन मोड (Alt + F1) दर्ज करें और दर्ज करें:
netcfg
यह वर्चुअल मशीन के वर्तमान आईपी को प्रदर्शित करेगा। आमतौर पर यह अतिथि मशीन के लिए 192.168.56.101 जैसा कुछ होगा, मुख्य पते को 192.168.56.1 मिलता है।
मुख्य मशीन पर, कमांड लाइन खोलें, एंड्रॉइड के लिए प्लेटफ़ॉर्म-टूल्स डायरेक्टरी पर जाएं:
./adb connect 192.168.56.101
यह वर्चुअल मशीन को एक नए उपकरण के रूप में पंजीकृत करेगा:

अब आप अपने आवेदन को सीधे ग्रहण से लॉन्च और डिबग कर सकते हैं।
जैसा कि आप देख सकते हैं, गति वृद्धि बहुत ध्यान देने योग्य है:
- VM शुरू करने में 30 की बजाय 2 सेकंड लगते हैं
- एप्लिकेशन बहुत तेज़ी से लॉन्च होते हैं, यहां तक कि डिबग मोड में भी (एआरएम एमुलेटर में निहित कोई ब्रेक नहीं हैं)
एसडी कार्ड जोड़ें
Http://www.android-x86.org/documents/sdcardhowto पर स्थित प्रलेखन का उपयोग करें।
हम फाइल को एसडी कार्ड की तरह इस्तेमाल करते हैं
Android कमांड लाइन से:
dd if=/dev/zero of=/data/sdcard.img bs=1024 count=65536 (64MB image) losetup /dev/block/loop7 /data/sdcard.img newfs_msdos /dev/block/loop7
अब VM को डिबग मोड में पुनः आरंभ करें, रीड + राइट मोड में विभाजन को अनमाउंट करें और मेनू को एडिट करें। एक कर्नेल पैरामीटर जोड़ने के लिए:
Sdcard = / data / sdcard.img
हम एक अलग सेक्शन का उपयोग करते हैं
इसके लिए थोड़ी और मेहनत करनी होगी।
सबसे पहले आपको VirtualBox में एक नया हार्ड ड्राइव बनाना होगा और इसे वर्चुअल मशीन से जोड़ना होगा।
अब हम मशीन को डिबग मोड में शुरू करते हैं। विभाजन बनाने के लिए fdisk का उपयोग करें। जब अनुभाग बनाया जाता है, तो आपको इसे प्रारूपित करना होगा:
newfs_msdos /dev/sdb1
अब menu.lst को एडिट करें और पैरामीटर जोड़ें:
Sdcard = sdb1
परीक्षण वातावरण के रूप में Android_x86 का उपयोग करने का प्रभाव
के उपयोग
जबकि वर्चुअल मशीन अपेक्षित रूप से काम कर रही है, और मतभेदों की गति के अलावा, मैंने किसी विशेष को नोटिस नहीं किया। सभी Android प्रोजेक्ट्स सही तरीके से स्थापित हैं। एसडीके से नमूना परियोजनाओं का निर्माण और ठीक काम।
एकमात्र ध्यान देने योग्य गड़बड़: गैलरी एप्लिकेशन (कुलीरिस) टूट गया है, मैंने छवि के अंतिम रात के निर्माण के साथ कोशिश की - यह थोड़ा बेहतर हुआ, लेकिन समस्याएं अभी भी बनी हुई हैं।
एक और विषमता: लगभग 10% मामलों में, वर्चुअल मशीन बूट नहीं होती है और उसे रिबूट करना पड़ता है। चूंकि डाउनलोड बहुत तेज है, यह वास्तव में मुझे परेशान नहीं करता है, लेकिन मैं यह समझने की कोशिश करूंगा कि मामला क्या है।
गति
यहां अंतर नग्न आंखों को दिखाई देता है।
यह स्पष्ट करने के लिए कुछ संख्याएँ हैं कि सब कुछ कितना त्वरित हुआ:

ARM पर एंड्रॉइड एमुलेटर नेक्सस वन की तुलना में लगभग आधा चलता है, और एंड्रॉइड x86 लगभग दोगुना तेज है।