ऐप में 32 और 64-बिट .so फ़ाइलों को कैसे मिलाएं

Carmelo M 09/15/2017. 1 answers, 84 views
java android android linux android-ndk android-ndk ndk-build

सबसे पहले, मुझे पता है कि एक ऐप में .so फ़ाइल के विभिन्न आर्किटेक्चर के मिश्रित उपयोग की अनुमति नहीं है (भाग केवल 32 का उपयोग करता है, दूसरा भाग केवल 64 का उपयोग करता है)

इसलिए, मैंने 64 और 32-बिट फ़ाइलों को गतिशील रूप से लोड करने के लिए एक नई प्रक्रिया खोलने का प्रयास किया, लेकिन System.load() त्रुटि को फेंक दिया और ऐप क्रैश हो गया! एकाधिक प्रक्रियाओं के माध्यम से इस समस्या को कैसे हल करें? या क्या इसे हल करने का कोई और तरीका है?

5 Comments
Markus 07/27/2017
एसओ में आपका स्वागत है! सहायता पृष्ठों को पढ़ने के लिए कृपया कुछ समय दें, विशेष रूप से "मैं किस विषय के बारे में पूछ सकता हूं?" नामक अनुभाग और "मुझे किस प्रकार के प्रश्न पूछने से बचना चाहिए?" । कृपया यात्रा करें और अच्छे प्रश्न पूछने के बारे में पढ़ें। आखिरकार कृपया सीखें कि न्यूनतम, पूर्ण और सत्यापन योग्य उदाहरण कैसे बनाएं। त्रुटि के बारे में विवरण बहुत मदद करेगा।
Alex Cohn 07/27/2017
यह एक अच्छा विचार है! लेकिन आप किस तरह की बाल प्रक्रिया शुरू करना चाहते हैं? एक सेवा? मुझे नहीं लगता कि यह काम कर सकता है, क्योंकि सिस्टम यह तय करता है कि आपके एपीके के विश्लेषण के आधार पर 32-बिट मोड चालू करना है या नहीं, और JVM तदनुसार सेटअप है।
Alex Cohn 07/27/2017
Stackoverflow.com/a/31879900/192373 देखें: एप इंस्टॉल करते समय एबीआई एबीआई को मजबूर कर सकता है।
Carmelo M 07/28/2017
@AlexCohn धन्यवाद! मैं आपसे सहमत हूं, एक बच्चे की प्रक्रिया (गतिविधि) इस समस्या को हल नहीं कर सकती है। [Stackoverflow.com/a/31879900/192373] काम नहीं कर रहा है, क्योंकि मुझे लगता है कि फ़ंक्शन का हिस्सा 32-बिट का उपयोग करता है। इसलिए, और इसका हिस्सा फ़ंक्शन एक ही ऐप में 64-बिट .so का उपयोग करता है।
Carmelo M 07/28/2017
@AlexCohn क्या आपके पास कोई अन्य विचार है? स्वामी

1 Answers


Alex Cohn 07/30/2017.

खैर, मैंने कोशिश की। इसके चेहरे पर, यह काम करता है: armeabi साझा libs 'सामान्य तरीके से साझा करें' का उपयोग करें, और जावा से Runtime.exec () या सी से सिस्टम () के साथ एक arm64-v8a निष्पादन योग्य चलाएं।

आप निष्पादन योग्य संपत्तियों में डाल सकते हैं और इसे मैन्युअल रूप से अनपैक कर सकते हैं, या आप इसे धोखा दे सकते हैं और उसका नाम बदल सकते हैं ताकि यह lib साथ शुरू हो और समाप्त हो। अब आप इस फाइल को jniLibs/armeabi निर्देशिका में डाल सकते हैं।

विपरीत तरीका भी काम करता है: 64-बिट ऐप से लॉन्च 32-बिट निष्पादन योग्य ( -fPIE )।

सुनिश्चित करें कि लाइब्रेरी खोज पथ संघर्ष नहीं करते हैं।

2 comments
Carmelo M 08/04/2017
यह एक अच्छा विचार है !!! मेरा प्रोजेक्ट वीडियो ट्रांसकोडिंग पृष्ठभूमि ऑपरेशन के समान नहीं है, लेकिन उपयोगकर्ता जेस्चर के साथ इंटरैक्ट करने के लिए SurfaceView के माध्यम से त्रि-आयामी ग्राफिक्स को लोड करने की आवश्यकता है। इन यूआई इंटरैक्शन से निपटने के लिए कैसे एक बड़ी समस्या है, मुझे आशा है कि आप मुझे कुछ विचार दे सकते हैं, धन्यवाद
Alex Cohn 08/04/2017
मुझे नहीं लगता कि आप यूआई को संभाल सकते हैं या इंटरप्रोसेस संचार के माध्यम से लाइव ग्राफिक्स कर सकते हैं

Related questions

Hot questions

Language

Popular Tags