2011-06-06 9 views
11

मैं एक एंड्रॉइड प्रोजेक्ट पर काम कर रहा हूं और मैं मूल तरीकों को कॉल करने के लिए एनडीके का उपयोग कर रहा हूं। मेरे पास दो पुस्तकालय (.so फ़ाइलें) हैं और एक libs/armeabi फ़ोल्डर में स्थित है और दूसरा libs/armeabi-v7a lib फ़ोल्डर में स्थित है।armeabi और armeabi-v7a फ़ोल्डर

यदि मैं एप्लिकेशन को चलाने का प्रयास करता हूं तो यह लाइब्रेरी को /libs/armeabi फ़ोल्डर में लोड नहीं करेगा। यदि मैं लाइब्रेरी फ़ाइल को libs/armeabi-v7a फ़ोल्डर में ले जाता हूं, तो यह लाइब्रेरी लोड करता है लेकिन 5 से 10 मिनट के बाद यह क्रैश हो जाता है और सेगमेंटेशन गलती त्रुटि देता है।

मैं सोच रहा था कि लाइब्रेरी का स्थान (अलग फ़ोल्डर) इस समस्या का कारण बन सकता है या नहीं।

+1

हे .. क्या आपने इसे हल किया? मुझे एक शंका है। अगर मैं armv7-a arch के लिए ffmpeg का निर्माण करता हूं। क्या मैं इसे आर्मेबी उपकरणों पर उपयोग कर सकता हूं? मैं इसके लिए नया हूँ। मैंने इसे armv7 के लिए बनाया है - एक क्रॉस संकलित। –

उत्तर

-5

मैं अपने लिए नया हूं, लेकिन उसी पथ पर जा रहा हूं ... जहां तक ​​मुझे पता है, किसी के पास केवल साझा किया जा सकता है लाइब्रेरी; कई पुस्तकालयों का उपयोग करने के लिए, उन्हें स्थिर बनाएं और उन्हें एक साझा साझा करने के लिए एक साथ लिंक करें। बेशक, यह मानता है कि आप पुस्तकालयों का निर्माण कर रहे हैं ;-)

+1

यह सही नहीं है। कई साझा पुस्तकालयों के लिए यह काफी संभव है, हालांकि यह अतिरिक्त जटिलता पेश करता है जो गलत होने और समस्याओं में आसान है। – tomwhipple

5

लाइब्रेरी लोडर पुस्तकालयों की तलाश करने का प्रयास करेगा जो आपके द्वारा चल रहे आर्किटेक्चर से सबसे नज़दीकी से मेल खाते हैं। आम तौर पर, आपको प्रत्येक एबीस के लिए लाइब्रेरी के एक संस्करण को संकलित करना चाहिए जिसे आप समर्थन करने की योजना बना रहे हैं (armeabi, armeabi-v7a, x86, mips) ताकि संकलक सही ढंग से अनुकूलित कर सके।

निर्देशिका संरचना यह है कि एंड्रॉइड निर्धारित करता है कि कौन सी lib लोड हो सकती है, इसलिए यह महत्वपूर्ण है कि आप इसे परिवर्तित न करें।

19

किसी एप्लिकेशन को स्थापित करने, पैकेज प्रबंधक सेवा .apk स्कैन और प्रपत्र के किसी भी शेयर की गई लाइब्रेरी के लिए दिखेगा:

 lib/<primary-abi>/lib<name>.so 

यदि कोई मिलता है, तो यह $ APPDIR तहत नकल की जाती है/lib/lib.so, जहां $ APPDIR एप्लिकेशन की विशिष्ट डेटा निर्देशिका से मेल खाता है।

तो कोई भी पाया जाता है, और एक माध्यमिक ABI परिभाषित किया गया है, सेवा तो फार्म के साझा पुस्तकालयों के लिए स्कैन करेगा:

lib/<secondary-abi>/lib<name>.so 

तो कुछ भी पाया जाता है, तो यह $ APPDIR तहत नकल की जाती है/lib/lib.so.

प्राथमिक/माध्यमिक अबी के लिए,

एंड्रॉयड प्रणाली क्रम जो ABI (रों) इसका समर्थन करता है पर जानता है। दरअसल, अप करने के लिए दो निर्माण विशिष्ट प्रणाली गुण इंगित करने के लिए उपयोग किया जाता है:

  • 'प्राथमिक' डिवाइस के लिए ABI, मशीन सिस्टम छवि अपने आप में इस्तेमाल किया कोड के लिए इसी।

  • एक वैकल्पिक 'द्वितीयक' एबीआई, जो कि अन्य एबीआई के अनुरूप है, जो सिस्टम छवि द्वारा भी समर्थित है।

उदाहरण के लिए, एक ठेठ ARMv5TE आधारित डिवाइस केवल 'armeabi' के रूप में प्राथमिक ABI परिभाषित करेगा और एक माध्यमिक एक को परिभाषित नहीं।

दूसरी तरफ, एक सामान्य एआरएमवी 7-आधारित डिवाइस प्राथमिक एबीआई को 'आर्मेबी-वी 7 ए' और द्वितीयक एक 'आर्मेबी' में परिभाषित करेगा क्योंकि यह दोनों के लिए उत्पन्न मूल मूल बाइनरी चला सकता है।

यह तंत्र सुनिश्चित करता है कि लक्ष्य डिवाइस के लिए सबसे अच्छा मशीन कोड स्वचालित रूप से स्थापना समय पर पैकेज से निकाला जाता है।

+0

armeabi पुस्तकालय सीधे armeabi-v7a के साथ संगत हैं? मेरा मतलब है - क्या यह काम करेगा यदि आप अपने पुस्तकालयों को फ़ोल्डर armeabi से फ़ोल्डर armeabi-v7a में ले जाते हैं? ऐसा कुछ ऐसा होगा जो वह करेगा यदि वह पुस्तकालयों का उपयोग करता है जो केवल आर्मेबी में उपलब्ध हैं, और साथ ही वह उन पुस्तकालयों का उपयोग करना चाहता है जो केवल आर्मेबी-वी 7 ए में उपलब्ध हैं। – Stan

+1

@Stan armeabi पुस्तकालय v7a डिवाइस पर काम कर सकते हैं। – loveisbug

+1

धन्यवाद, मुझे यह पता है। मैं सोच रहा था कि क्या आर्मेबी लाइब्रेरी की अतिरिक्त चीजों की अपेक्षा की जाएगी यदि यह आर्मेबी फ़ोल्डर (आर्मेबी-वी 7 ए डिवाइस पर) के बजाय armeabi-v7a फ़ोल्डर में रखा गया है। मैंने सोचा कि कुछ मामलों में यह दुर्घटनाग्रस्त हो सकता है, अगर डिवाइस armeabi-v7a के लिए बनाया गया है। – Stan

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^