एंड्रॉइड एमुलेटर को तेज गति से चलाना


251

एंड्रॉइड एमुलेटर थोड़ा सुस्त है। Motorola Droid और Nexus One जैसे कुछ डिवाइस के लिए, ऐप एमुलेटर की तुलना में वास्तविक डिवाइस में अधिक तेज़ चलता है। खेल और दृश्य प्रभावों का परीक्षण करते समय यह एक समस्या है।

आप एमुलेटर को यथासंभव तेज कैसे चलाते हैं? मैं इसके मापदंडों के साथ कर रहा हूँ, लेकिन ऐसा कॉन्फ़िगरेशन नहीं मिला है जो अभी तक एक उल्लेखनीय सुधार दिखाता है।


1
मेरे सभी ऐप डिवाइस पर तेज़ी से चलते हैं

16
यह मज़ेदार है क्योंकि iPhone सिम्युलेटर बिल्कुल विपरीत है। एप्लिकेशन डिवाइस पर धीमी गति से चलते हैं। ज्यादातर मामलों में मैं एक धीमा एमुलेटर पसंद करता हूं, क्योंकि यह आपको अपने ऐप को बेहतर बनाने के लिए प्रेरित करता है, लेकिन कभी-कभी आप इसे केवल उसी तरह से काम करना चाहते हैं जैसे यह एक वास्तविक डिवाइस में करता है।
hpique

1
वर्चुअलबॉक्स का उपयोग करके इसे आम तौर पर तेजी से उर्फ ​​चलाना संभव है - देखें stackoverflow.com/a/6058689/40961
डेविड डी ई फ्रीटास

5
iOS और विंडोज मोबाइल, सिमुलेटर का उपयोग करते हैं, जबकि एंड्रॉइड एमुलेटर का उपयोग करता है। सिमुलेटर मेजबान पुस्तकालयों का उपयोग करके सभी मोबाइल पुस्तकालयों और एपीआई को फिर से लागू करते हैं, और इस तरह से तेज होते हैं। एमुलेटर वास्तविक उपकरणों पर समान पुस्तकालयों का उपयोग करते हैं, इसलिए यह धीमा है। एंड्रॉइड के संदर्भ में, यदि आप एंड्रॉइड वर्चुअल मशीन का उपयोग करते हैं, तो यह बहुत तेज़ होगा। हम यहां एक निःशुल्क vm प्रदान करते हैं: leapdroid.com
huisinro

2
... और यह कितना पागल है कि 6 साल बाद, और यहां तक ​​कि HAXM और x86 सिस्टम छवि और एक अच्छी तरह से निर्दिष्ट देव वातावरण के साथ एंड्रॉइड एमुलेटर अभी भी गुड़ के रूप में धीमा है?
अरोठ

जवाबों:


230

आधिकारिक वेब पेज

~ ५०% तेज

खिड़कियाँ:

  • "Intel x86 एमुलेटर एक्सेलेरेटर (HAXM)" => SDK-Manager / Extras स्थापित करें
  • "इंटेल x86 एटम सिस्टम इमेजेज" => एसडीके-मैनेजर / एंड्रॉइड 2.3.3 स्थापित करें
  • Android SDK रूट फ़ोल्डर में जाएं और extras \ Intel \ Hardware_Accelerated_Execution_Manager पर नेविगेट करें। फ़ाइल IntelHaxm.exe स्थापित करने के लिए निष्पादित करें। (एंड्रॉइड स्टूडियो में आप नेविगेट कर सकते हैं: सेटिंग्स -> एंड्रॉइड एसडीके -> एसडीके टूल्स -> इंटेल x86 एम्यूलेटर एक्सेलेरेटर (HAXM इंस्टॉलर))

  • AVD बनाएँ "Intel atom x86" CPU / ABI के साथ

  • एमुलेटर चलाएं और कंसोल में चेक करें कि HAXM रनिंग (कमांड प्रॉम्प्ट विंडो खोलें और कमांड निष्पादित करें: sc query Intelhaxm)

यहां छवि विवरण दर्ज करें

यह भी इस एक स्थापित मत भूलना

यहां छवि विवरण दर्ज करें

AVD निर्माण के दौरान PS इम्यूलेशन मेमोरी जोड़ें: हार्डवेयर / न्यू / डिवाइस रैम साइज़ / सेट अप वैल्यू 512 या अधिक

लिनक्स:

  • KVM स्थापित करें: GOOGLE खोलें, "kvm स्थापना" लिखें
  • AVD बनाएँ "Intel atom x86" CPU / ABI के साथ
  • कमांड लाइन से चलाएँ: emulator -avd avd_name -qemu -m 512 -enable-kvm
  • या ग्रहण से चलाएं: रन / रन कॉन्फ़िगरेशन / टैब "लक्ष्य" -> Intel x86 AVD की जांच करें और "अतिरिक्त एमुलेटर कमांड लाइन विकल्प" विंडो में जोड़ें: -qemu -m 512 -enable-kvm (रन क्लिक करें)

यहां छवि विवरण दर्ज करें

पुनश्च फेडोरा के लिए , उबंटू के लिए

ओएस एक्स:

  • Android SDK प्रबंधक में, इंटेल x86 एटम सिस्टम छवि स्थापित करें
  • Android SDK प्रबंधक में, Intel x86 एमुलेटर एक्सेलेरेटर (HAXM) स्थापित करें
  • खोजक में, इंटेल एमुलेटर एक्सेलेरेटर के स्थापित स्थान पर जाएं और IntelHAXM स्थापित करें (डीएमजी खोलें और इंस्टॉलेशन चलाएं)। आप अपने माउस को SDK प्रबंधक में एमुलेटर एक्सेलेरेटर प्रविष्टि पर रखकर स्थान पा सकते हैं।
  • एक AVD बनाएं या अपडेट करें और CPU के रूप में इंटेल एटम x86 निर्दिष्ट करें। इंटेल x86 एमुलेटर एक्सेलेरेटर (HAXM) स्थान दिखा रहा है

पुनश्च: इस उपकरण की जाँच करें, बहुत सुविधाजनक भी परीक्षण


8
यह OSX में भी काम करता है। /extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.dmgएसडीके प्रबंधक से पैकेज डाउनलोड करने के बाद आपको इंस्टॉल करना होगा ।
जरीट मिलार्ड

5
"यूज होस्ट जीपीयू" के साथ विंडोज निर्देशों ने मुझे एक सुपर-फास्ट एमुलेटर दिया! (मेरे पास एक समर्थित इंटेल प्रोसेसर और एक एनवीडिया ग्राफिक्स कार्ड है।) एनिमेशन मलाईदार चिकनी हैं ( अधिकांश समय ; अन्य समय में, बहुत कम झटका)! ध्यान दें कि आपको Intel Atom (x86) CPU विकल्प चुनने के लिए AVD प्रबंधक के लिए ग्रहण को फिर से शुरू करना होगा । युक्ति: बहुत अधिक RAM आवंटित न करें। 1 जीबी रैम के साथ, एमुलेटर शुरू करने में विफल रहा (जीपीयू के साथ) लेकिन 512 एमबी रैम के साथ यह आसानी से चला गया और वास्तव में जल्दी से (फिर से जीपीयू के साथ) बूट हुआ।
ADTC

मैंने पाया कि LogCat बहुत सारे ट्रेस चेतावनियों के साथ स्पैम हो जाता है। उन्हें फ़िल्टर करने के लिए, ^(?!.*(nativeGetEnabledTags)).*$टेक्स्ट फ़िल्टर के रूप में उपयोग करें । मैंने इसे बग इश्यू के रूप में रिपोर्ट किया है । इसके अलावा, मुझे लगता है कि अगली बार शुरू करने पर आपको त्रुटियों से बचने के लिए आपको अपने एमुलेटर डिवाइस (पावर बटन को दबाए रखें, फिर पावर ऑफ चुनें ) को ठीक से बंद करना होगा (मैं एआरएम एमुलेटर को बंद कर सकता हूं, लेकिन इंटेल एमुलेटर के साथ, बस समापन समस्याओं पैदा करने के लिए लगता है)।
ADTC

अगर मैं कर सकता तो मैं तुम्हें +100 देता। विंडोज 8 पर काम करता है और प्रदर्शन में बहुत वृद्धि हुई है!
पाओलो एम

2
मुझे काम करने के लिए इसे प्राप्त करने के लिए प्रोग्राम पैनल और सुविधाओं के माध्यम से हाइपर वी तकनीक को पहले निष्क्रिय करना पड़ा।
माइक फ्लिन

34

अद्यतन: अब जब एक इंटेल x86 छवि उपलब्ध है, तो सबसे अच्छा जवाब ऊपर दिए गए उत्साह से है।

जैसा कि कॉमन्सवेयर ने सही ढंग से बताया है, एमुलेटर धीमा है क्योंकि यह एआरएम सीपीयू का अनुकरण करता है, जिसे इंटेल ऑपकोड में अनुवाद की आवश्यकता होती है। यह वर्चुअलाइजेशन CPU को चबाता है।

एमुलेटर को तेजी से बनाने के लिए, आपको इसे अधिक सीपीयू देना होगा। यदि आप कर सकते हैं, तो तेजी से सीपीयू या अपग्रेड से शुरू करें।

फिर, आपके पास सीपीयू का एमुलेटर अधिक दें:

  1. हाइपरथ्रेडिंग को अक्षम करें - चूंकि एमुलेटर एक से अधिक कोर का उपयोग नहीं करता है, इसलिए हाइपरथ्रेडिंग वास्तव में समग्र सीपीयू समय की मात्रा को कम कर देता है जो एमुलेटर प्राप्त करेगा। एचटी को निष्क्रिय करने से कई सीपीयू का लाभ उठाने वाले ऐप धीमा हो जाएंगे। हाइपरथ्रेडिंग आपके BIOS में अक्षम होना चाहिए।
  2. एमुलेटर को सीपीयू 0 के अलावा सीपीयू पर चलाएं - यह एचटी को बंद करने की तुलना में बहुत कम प्रभाव डालता है, लेकिन यह कुछ मदद करता है। विंडोज पर, आप निर्दिष्ट कर सकते हैं कि कौन सी सीपीयू एक प्रक्रिया चलेगी। कई एप्लिकेशन CPU 0 को चबाएंगे, और डिफ़ॉल्ट रूप से एमुलेटर सीपीयू 0. पर चलता है। मैं एमुलेटर को पिछले एक पर चलाने के लिए बदल देता हूं। ध्यान दें कि OS X पर आप आत्मीयता नहीं देख सकते हैं (देखें: /superuser/149312/how-to-set-processor-affinity-on-a-mac )।

मैं कहीं 50% सुधार देख रहा हूँ इन दोनों बदलावों के साथ ।

विंडोज 7 पर प्रोसेसर आत्मीयता सेट करने के लिए:

  1. टास्क मैनेजर खोलें
  2. सभी प्रक्रियाएं देखें (व्यवस्थापक के रूप में चलाने के लिए, अन्यथा आप प्रोसेसर आत्मीयता निर्धारित नहीं कर सकते)
  3. Emulator.exe पर राइट क्लिक करें और Set Affinity चुनें ...
  4. सेट एफिनिटी डायलॉग पर, बस आखिरी सीपीयू चुनें

नोट: जब आप इस तरह से आत्मीयता बदलते हैं, तो यह केवल प्रक्रिया के जीवनकाल के लिए बदल जाता है। अगली शुरुआत, आपको इसे फिर से करना होगा।

यहां छवि विवरण दर्ज करें


22
जब आपने हाइपर-थ्रेडिंग को अक्षम किया तो CPU प्रतिशत दोगुना हो गया क्योंकि आपने तार्किक प्रोसेसर की मात्रा को आधा कर दिया था।
टिमोथी 003

1
यह आकर्षण की तरह काम करता है लेकिन .. क्या आप जानते हैं कि इसे Ubuntu 11.10 पर कैसे करना है?
पन्नाधाय 7

1
@ टिमोथी003 हां बिल्कुल सही है। और सीपीयू को दोगुना करेगा एमुलेटर का उपयोग करेगा।
मचान 75

3
आप केवल संख्या कार्य प्रबंधक शो में दोहरीकरण देखते हैं; वास्तव में नहीं। यदि आप 100% सीपीयू में कम से कम 4 थ्रेड्स के बराबर काम करने के लिए पर्याप्त सॉफ़्टवेयर बनाने के लिए पर्याप्त सॉफ़्टवेयर नहीं चला रहे हैं, तो भारी सीपीयू उपयोग करने वाले कुछ ऐप अभी भी लगभग पूरे कोर को प्रभावी रूप से प्राप्त करेंगे, न कि आधे कोर आपके भोले अनुमान को। कार्य प्रबंधक क्या प्रदर्शित कर रहा है।
दान

3
इस बात की पुष्टि करने के लिए कि @ डैन नीली क्या कहता है: मेरे पास एक मुख्य ऐप है, जो सिर्फ 100% सीपीयू को जलाता है। जब मेरे पास एचटी होता है तो यह 25% के बारे में दिखाता है, इसके बिना यह लगभग 50% दिखाता है, लेकिन वास्तव में गणना में इसे उसी समय में गणना करना होता है। तो कोई अंतर नहीं (कम से कम सैंडी ब्रिज पर)।
22

17

मैं Genymotion को एक स्पिन देने का सुझाव देना चाहूंगा । यह ओरेकल के वर्चुअलबॉक्स में चलता है, और एक मध्यम प्रणाली पर 60 एफपीएस को वैध रूप से हिट करेगा।

यहाँ मेरी एक कार्यशाला से एक पेंचकस है, जो 2012 के अंत में मैकबुक एयर पर चल रहा है:

नेक्सस 7 एमुलेटर 56.6 एफपीएस पर चल रहा है

यदि आप पाठ नहीं पढ़ सकते हैं, तो यह 56.6 एफपीएस पर चलने वाला एक नेक्सस 7 एमुलेटर है। अतिरिक्त (बड़ा!) बोनस यह है कि Google Play और Google Play सेवाएं वर्चुअल मशीनों के साथ पैक की गई हैं।

(डेमो एनीमेशन का स्रोत यहां पाया जा सकता है ।)


12

GPU हार्डवेयर त्वरण सक्षम करेंयदि आप API 15 v3 या नए और SDK टूल्स v17 + का उपयोग कर रहे हैं, तो (Intel के HAXM के अतिरिक्त) । एमुलेटर के लिए ग्राफिक्स त्वरण आपके विकास कंप्यूटर के ग्राफिक्स हार्डवेयर का लाभ उठाता है, विशेष रूप से इसकी ग्राफिक्स प्रोसेसिंग यूनिट (जीपीयू), स्क्रीन ड्राइंग को तेज बनाने के लिए। यह गति में ध्यान देने योग्य वृद्धि देता है।

अपने एमुलेटर पर डिफ़ॉल्ट रूप से सक्षम ग्राफिक्स त्वरण को सक्षम करने के लिए : हार्डवेयर अनुभाग में AVD बनाते समय, नया क्लिक करें, GPU एमुलेशन चुनें और मान को Yes पर सेट करें।

केवल रनटाइम पर त्वरण सक्षम करने के लिए : एमुलेटर को इस तरह से शुरू करते समय -gpu ध्वज का उपयोग करें:

emulator -avd <avd_name> -gpu on

स्रोत: Google एमुलेटर ट्यूटोरियल का उपयोग कर रहा है


10

हालांकि संपादित करें हालांकि इंटेल छवियों का उपयोग करने से कुछ प्रदर्शन लाभ प्राप्त होते हैं, Genymotion का उपयोग करके प्राप्त प्रदर्शन बहुत अधिक है। देखें पॉल लामार्ट्समा का जवाब

पिछला उत्तर

ADT Rev 17 के साथ एमुलेटर विंडोज और मैक ओएस एक्स पर वर्चुअलाइजेशन मोड में x86 सिस्टम इमेज चलाने का समर्थन करता है। इसका प्रदर्शन पर ध्यान देने योग्य प्रभाव पड़ता है।

ADT 17 नोटों को संशोधित करें: http://android-developers.blogspot.jp/2012/03/updated-sdk-tools-and-adt-revision-17.html

वर्चुअल मशीन त्वरण को कॉन्फ़िगर करना: http://developer.android.com/guide/developing/devices/emulator.html#accel-vm


7

मैंने हाल ही में एक कोर 2 @ 2.5 से 3b RAM के साथ i7 @ 1.73 में 8gb ram (दोनों सिस्टम Ubuntu 10.10 चलाया) के साथ स्विच किया है और एमुलेटर कम से कम दो बार तेजी से चलता है। उस पर अधिक हार्डवेयर फेंकना निश्चित रूप से मदद करता है।


यह वास्तव में एक समाधान नहीं है: यह एमुलेटर को प्रति समय अधिक थ्रूपुट बना सकता है, लेकिन यह वास्तव में इसे किसी भी तेजी से नहीं चलाएगा।
स्पष्ट

6

बस मैं यह कहना चाहता था कि मैं इंटेल HAXM त्वरक स्थापित करने और इंटेल एटम छवि का उपयोग करने के बाद एमुलेटर 50 गुना तेजी से चलाने लगता है। अंतर आश्चर्यजनक है, इसे देखें!

http://www.developer.com/ws/android/development-tools/haxm-speeds-up-the-android-emulator.html


4

मैंने देखा कि एमुलेटर केवल कोर 0 पर डिफॉल्ट करता है, जहां अधिकांश विंडोज एप्लिकेशन "किसी भी" कोर को डिफॉल्ट करेंगे। इसके अलावा, यदि आप इसे दूसरे कोर (पिछले कोर की तरह) पर रखते हैं, तो यह एमुलेटर को पागल कर सकता है। यदि आप कर सकते हैं, तो आप गति में वृद्धि के लिए अपने भारी-सीपीयू उपयोग अनुप्रयोगों को अन्य सीपीयू कोर पर डालने का प्रयास कर सकते हैं।

हार्डवेयर-वार, सबसे तेज़ सीपीयू प्राप्त करें जो आप सिंगल-कोर एप्लिकेशन के लिए काम कर सकते हैं। एमुलेटर के प्रदर्शन के मामले में 2 कोर से अधिक का अंतर नहीं हो सकता है।

ग्रहण + एंड्रॉइड एमुलेटर एक साथ एक टन रैम खाते हैं। मैं कम से कम 3 g RAM की सलाह दूंगा क्योंकि मैंने 2 g RAM के साथ एक सिस्टम का उपयोग किया था, और यह धीमा हो गया क्योंकि सिस्टम RAM से बाहर चला गया और पृष्ठ फ़ाइल का उपयोग करना शुरू कर दिया।

मुझे लगता है कि इसके लिए सबसे अच्छा सीपीयू शायद एक उच्च घड़ी (केवल उसी श्रृंखला btw में CPUs के लिए एक उपाय के रूप में उपयोग घड़ी) होगा, गैर- SIMD संचालन अच्छी तरह से संभाल, और एक टर्बो बूस्ट तंत्र है। कई जावा-आधारित बेंचमार्क नहीं हैं, लेकिन कंप्रेशन और ऑफिस जैसे एप्लिकेशन बेंचमार्क के लिए समग्र रूप से देखें। गेमिंग या मीडिया को न देखें क्योंकि वे SIMD से बहुत प्रभावित होते हैं। यदि आप एक जावा पाते हैं, और भी बेहतर।


4

इस वर्ष Google I / O (2011) में, Google ने एक तेज़ एमुलेटर का प्रदर्शन किया। समस्या एआरएम और x86 के बीच बाइट कोड पर इतनी नहीं है, लेकिन QEMU द्वारा प्रस्तुत सॉफ्टवेयर रेंडरिंग है। वे QEMU के प्रतिपादन को दरकिनार करते हैं और प्रतिपादन को सीधे X सर्वर पर भेजते हैं जो मुझे विश्वास है। उन्होंने वास्तव में अच्छे प्रदर्शन और एफपीएस के साथ एक कार गेम दिखाया।

मुझे आश्चर्य है कि जब डेवलपर्स के लिए उपलब्ध हो जाएगा ...


इस एमुलेटर की कोई खबर? इसका नाम क्या था?
अल्कोर

मुझे कोई खबर नहीं है। मैंने पिछले एक साल से एंड्रॉइड एमुलेटर अपडेट का पालन नहीं किया है।
सेसर

3

Google ने हाल ही में Android के लिए एक नए एमुलेटर की घोषणा की है। यह पुराने की तुलना में बहुत तेज और बेहतर है। आप इसके बारे में अधिक जानकारी यहाँ पा सकते हैं ।


1

मुझे लगता है कि यह इसलिए है क्योंकि clr वर्चुअल मशीन बिना कोड opcode अनुवाद के सीधे cpu का उपयोग करती है। यह clr एप्लिकेशन के लिए ऑप्टिमाइज़ेशन हो सकता है या हो सकता है कि विंडोज़ मोबाइल / विंडो फोन 7 को INTEL प्रॉसेसर पर शुरू किया गया हो। एंड्रॉइड प्लेटफॉर्म लिनक्स पर आधारित है और सैद्धांतिक रूप से आप i686 वातावरण में वर्चुअल मशीन पर एंड्रॉइड शुरू कर सकते हैं। इस मामले में vmware जैसे वर्चुअल मशीन कुछ opcodes को गंभीर रूप से निष्पादित कर सकते हैं। लेकिन इस विकल्प को केवल तभी अनुमति दी जाएगी जब आप जावा पर लिखते हैं। क्योंकि जावा उनके बाइट-कोड की व्याख्या करता है या निष्पादन से पहले उसे दबा देता है। देखें: http://www.tranfx.com/how-to-run-google-android-in-virtualbox-vmware-on-netbooks


1

शुक्रिया @zest! एक जादू की तरह काम किया। ध्यान देने योग्य कुछ बातें: कर्नेल पैनिक इश्यू से निपटने के लिए HAXM के लिए Intel का हॉटफ़िक्स लागू करना आवश्यक है: http://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager इसके अलावा, नोट , यदि आपके पास एक से अधिक अबी हैं, तो आपको Android API (r19) के नवीनतम संस्करण में बग के कारण एक की स्थापना रद्द करने की आवश्यकता है: https://code.google.com/p/android/issues/detail?id= 66740 (इस मामले में armeabi-v7a को हटा दें, क्योंकि आप x86 अबी चाहते हैं)। इसे हल करने में मुझे जो 45 मिनट लगे, वह एमुलेटर के बढ़े हुए प्रदर्शन के लिहाज से बहुत फायदेमंद था।


1

आप विज़ुअल स्टूडियो एंड्रॉइड एमुलेटर भी आज़मा सकते हैं, जिसे स्टैंडअलोन एमुलेटर के रूप में भी स्थापित किया जा सकता है (आपको विज़ुअल स्टूडियो की आवश्यकता नहीं है)। कृपया ध्यान दें, यह केवल विंडोज प्रो या उच्चतर सिस्टम पर ही इंस्टॉल किया जा सकता है।



1

यदि आपके पास एक अच्छा ग्राफिक कार्ड नहीं है, तो निम्न रिज़ॉल्यूशन एमुलेटर (उदा: Nexus S) चुनें।


0

मैं इंटेल (86) सीपीयू / एबीआई का उपयोग कर रहा हूं। मैंने ARM (armeabi-v7a) का उपयोग करके एक और एमुलेटर बनाया और मुझे गति के साथ काफी सुधार मिला। मैं मंच 4.1.2 एपीआई स्तर 16 का उपयोग कर रहा हूं


0

उम्मीद है इससे आपको मदद मिलेगी।

Goto to your BIOS settings. Enable your Virtualization technology in your settings..

इसने मेरी समस्या हल कर दी ...


0

अपने वर्तमान Android Studio को Android Studio 2.0 में अपडेट करें पर अपडेट करें और सिस्टम छवियों को भी अपडेट करें।

एंड्रॉइड स्टूडियो 2.0 एमुलेटर एंड्रॉइड के पिछले एमुलेटर की तुलना में ~ 3x तेज है, और एडीबी संवर्द्धन के साथ आप ऐप और डेटा को 10x तक तेजी से एक भौतिक डिवाइस की तुलना में तेजी से धक्का दे सकते हैं। एक भौतिक उपकरण की तरह, आधिकारिक एंड्रॉइड एमुलेटर में Google Play Services अंतर्निहित बिल्ट-इन भी शामिल है, जिससे आप अधिक API कार्यक्षमता का परीक्षण कर सकते हैं। अंत में, नए एमुलेटर में कॉल, बैटरी, नेटवर्क, जीपीएस और बहुत कुछ प्रबंधित करने के लिए समृद्ध नई सुविधाएँ हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.