2011-08-16 15 views
120

मेरी वर्तमान परियोजना में मैं एकाधिक .so फ़ाइलों का उपयोग करता हूं। ये armeabi और armeabi-v7a फ़ोल्डर में स्थित हैं। दुर्भाग्य से .so फ़ाइलों में से एक 6 एमबी है और मुझे फ़ाइल आकार को कम करने की आवश्यकता है। एक वसा एपीके फ़ाइल होने के बजाय, मैं केवल armeabi फ़ाइलों का उपयोग करना चाहता हूं और armeabi-v7a फ़ोल्डर को हटा देना चाहता हूं।armeabi कोड पर armeabi-v7a कोड का उपयोग क्यों करें?

एनडीके दस्तावेज के अनुसार, आर्मेबी-वी 7 ए कोड आर्मेबी कोड बढ़ाया गया है जिसमें अतिरिक्त सीपीयू निर्देश हो सकते हैं। यह सब मेरी विशेषज्ञता से परे है, लेकिन मुझे सवाल है कि क्यों कोई armeabi-v7a और armeabi कोड होना चाहता है। दोनों के पास एक अच्छा कारण होना चाहिए, है ना?

मेरे परीक्षण उपकरणों पर यह सब ठीक काम करने लगते हैं। इनमें एआरएम वी 7 सीपीयू है। क्या यह मानना ​​सुरक्षित है कि सबकुछ अब काम करता है?

+1

शायद आप इस ब्लॉगपोस्ट को अभी पढ़ना चाहेंगे। यह पूरी तरह से अद्यतित है: https://androidbycode.wordpress.com/tag/armeabi-v7a/ –

उत्तर

139

आपके मूल कोड पर निर्भर करता है, लेकिन v7a में हार्डवेयर फ़्लोटिंग पॉइंट ऑपरेशंस के लिए समर्थन है, जो एक बड़ा अंतर बनाता है। आर्मेबी सभी उपकरणों पर ठीक काम करेगा, लेकिन बहुत धीमी होगी, और नए उपकरणों की सीपीयू क्षमताओं का लाभ नहीं उठाएगी। अपने विशेष आवेदन के लिए कुछ मानक लें, लेकिन armeabi-v7a बाइनरी को हटाने आमतौर पर एक अच्छा विचार नहीं है। यदि आपको आकार कम करने की आवश्यकता है, तो हो सकता है कि आप पुराने (आर्मेबी) और नए (आर्मेबी-वी 7 ए) उपकरणों के लिए दो अलग-अलग एपीके लेना चाहें।

+0

आपके स्पष्ट उत्तर के लिए धन्यवाद। 2 एपीके फाइलों में आवेदन को विभाजित करने के साथ-साथ बेंचमार्किंग करना भी एक अच्छा विचार होगा। उत्तरार्द्ध वास्तव में एक बहुत अच्छा विचार है! बहुत धन्यवाद! – PaulT

+1

मुझे एबीआई दोनों के बीच अंतर कहां मिल सकता है? मैं वास्तविक मतभेदों को समझने के लिए बहुत उत्साहित हूं ... – webshaker

+7

एआरएम मैनुअल? http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344c/Cacciced.html –

55

ईएबीआई = एम्बेडेड एप्लीकेशन बाइनरी इंटरफेस। यह ऐसे विनिर्देश हैं जिनके लिए निष्पादन योग्य को एक विशिष्ट निष्पादन वातावरण में निष्पादित करने के लिए अनुरूप होना चाहिए। यह एआरएम आर्किटेक्चर के लिए उपयोग किए गए टूलचेन्स के बीच बातचीत के लिए आवश्यक संकलन और लिंकेज के विभिन्न पहलुओं को भी निर्दिष्ट करता है। इस संदर्भ में जब हम armeabi के बारे में बात करते हैं तो हम एआरएम आर्किटेक्चर और जीएनयू/लिनक्स ओएस के बारे में बात करते हैं। एंड्रॉइड छोटे-एंडियन एआरएम जीएनयू/लिनक्स एबीआई का पालन करता है।

आर्मेबी एप्लिकेशन एआरएमवी 5 (उदा। एआरएम 9) और एआरएमवी 6 (उदा। एआरएम 11) पर चलाएगा। यदि आप उचित जीसीसी विकल्पों जैसे -mfpu = vfpv3 -mfloat-abi = softfp का उपयोग करके अपना एप्लिकेशन बनाते हैं तो आप फ्लोटिंग प्वाइंट हार्डवेयर का उपयोग कर सकते हैं जो वीएफपी हार्डवेयर के लिए फ़्लोटिंग पॉइंट निर्देश उत्पन्न करने के लिए कंपाइलर को बताता है और सॉफ्ट-फ्लोट कॉलिंग सम्मेलनों को सक्षम बनाता है। आर्मेबी कठोर फ्लोट कॉलिंग सम्मेलनों का समर्थन नहीं करता है (इसका मतलब है कि एफपी रजिस्ट्रारों का उपयोग किसी फ़ंक्शन के लिए तर्क रखने के लिए नहीं किया जाता है), लेकिन एचडब्ल्यू में एफपी ऑपरेशंस अभी भी समर्थित हैं।

armeabi-v7a एप्लिकेशन कॉर्टेक्स ए # डिवाइस जैसे कॉर्टेक्स ए 8, ए 9 और ए 15 पर चलाएगा। यह बहु-कोर प्रोसेसर का समर्थन करता है और यह -mfloat-abi = hard का समर्थन करता है। इसलिए, यदि आप -mfloat-abi = hard का उपयोग करके अपना एप्लिकेशन बनाते हैं, तो आपके कई फ़ंक्शन कॉल तेज़ होंगे।

+0

https://developer.android.com/ndk/guides/abis.html के अनुसार : 'armeabi-v7a एबीआई -mfloat-abi = softfp switch' का उपयोग करता है। तो ** ** समर्थन -mfloat-abi = hard ** द्वारा आपका क्या मतलब है? –