आर्मएबी कोड पर आर्मेबी-वी 7 ए कोड का उपयोग क्यों करें?


141

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

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

मेरे परीक्षण उपकरणों पर यह सब ठीक काम करने लगता है। इनमें ARM v7 CPU है। क्या यह मान लेना सुरक्षित है कि अब सब कुछ काम करता है?


2
आप इस ब्लॉगपोस्ट को अभी पढ़ सकते हैं। यह पूरी तरह से अप-टू-डेट है: androidbycode.wordpress.com/tag/armeabi-v7a
IgorGanapolsky

2
और अब डॉक्टर कहते हैं:armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
अमीर रेजादेह

1
बाद में आने वालों के लिए, यहाँ देखिए ।
अमीर रेजादेह

जवाबों:


163

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


1
मैं कहां दोनों एबीआई के बीच अंतर पा सकता हूं? मैं वास्तविक अंतर को समझने के लिए बहुत
सहज


1
किसी भी विचार के लिए गूगल प्ले पाने के लिए एक ग्यारह समाधान पर आपको इन दो अलग-अलग एपीके को अपलोड करने की अनुमति है? प्रकट में अंतर करने का कोई तरीका नहीं है कि वे अलग-अलग हैं इसलिए Google Play बस एक को दूसरे के साथ बदलना चाहता है (उनके पास अलग-अलग संस्करण कोड हैं)
डीन वाइल्ड

11
@DeanWild Google ने अब Play Store के कई एपीके फीचर में विभिन्न CPU आर्किटेक्चर को लक्षित करने के लिए समर्थन जोड़ा है: developer.android.com/guide/google/play/publishing/…
चार्ल्स हार्ले

1
@IgorGanapolsky, यह इंगित करने के लिए धन्यवाद। अब यह सही लिंक है: developer.android.com/google/play/publishing/…
चार्ल्स हार्ले

60

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

आर्मेबी एप्लिकेशन ARMv5 (जैसे ARM9) और ARMv6 (जैसे ARM11) पर चलेगा। यदि आप उचित GCC विकल्प -mfpu = vfpv3 -mfloat-abi = softfp का उपयोग करके अपने एप्लिकेशन का निर्माण करते हैं, तो आप फ्लोटिंग पॉइंट हार्डवेयर का उपयोग कर सकते हैं, जो कंपाइलर को VFP हार्डवेयर के लिए फ्लोटिंग पॉइंट निर्देश उत्पन्न करने के लिए कहता है और सॉफ्ट-फ्लोट कॉलिंग कन्वेंशन को सक्षम करता है। armeabi हार्ड-फ्लोट कॉलिंग सम्मेलनों का समर्थन नहीं करता है (इसका मतलब है कि एफपी रजिस्टरों का उपयोग किसी फ़ंक्शन के लिए तर्क देने के लिए नहीं किया जाता है), लेकिन एचडब्ल्यू में एफपी संचालन अभी भी समर्थित हैं।

armeabi-v7a एप्लिकेशन Cortex A # डिवाइस पर जैसे Cortex A8, A9 और A15 पर चलेगा। यह मल्टी-कोर प्रोसेसर का समर्थन करता है और यह -mfloat-abi = हार्ड का समर्थन करता है । इसलिए, यदि आप -mfloat-abi = हार्ड का उपयोग करके अपने एप्लिकेशन का निर्माण करते हैं, तो आपके कई फ़ंक्शन कॉल तेज हो जाएंगे।


1
के अनुसार developer.android.com/ndk/guides/abis.html : The armeabi-v7a ABI uses the -mfloat-abi=softfp switch। तो क्या आप समर्थन से मतलब है -mfloat-abi = कठिन ?
इगोरगानापोलस्की 13

8

एक मोटी APK फ़ाइल होने के बजाय, मैं केवल armeabi फ़ाइलों का उपयोग करना और armeabi-v7a फ़ोल्डर को निकालना चाहूंगा।

इसके विपरीत एक बेहतर रणनीति है। यदि आपके पास minSdkVersion14 है और अपने एपीके को प्ले स्टोर पर अपलोड करना है, तो आप देखेंगे कि आप उन्हीं उपकरणों का समर्थन करेंगे, जिनका आप समर्थन करते हैं armeabiया नहीं। इसलिए, एंड्रॉइड 4 या उच्चतर के साथ कोई उपकरण नहीं हैं जो armeabiसभी से लाभान्वित होंगे ।

शायद यही कारण है कि एंड्रॉइड armeabiएनडीके रिवीजन आर 17 बी के अनुसार अब भी समर्थन नहीं करता है। [ स्रोत ]

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