android - एंड्रॉइड ऐप में प्रीबिल्ल्ट नेटीव बाइनरी का उपयोग करना



android-ndk jni (1)

यह प्रश्न अलग-अलग जगहों पर उठाया गया है लेकिन कोई भी इसकी जरुरत नहीं है।

अब तक मैंने एंड्रॉइड में उपयोग करने के लिए एक देशी बाइनरी एफएफपीएपी का निर्माण किया है, बिल्ड ठीक है।

मैंने अपनी प्रोजेक्ट / लिब / अरमेबी-वी 7 ए / डाइरेक्टरी में द्विआधारी को रखा है और इसे बदले में libffmpeg। इसलिए इसे पैकेजिंग सिस्टम द्वारा उठाया जा सकता है, जैसा कि अन्य पदों में सलाह दी गई है

अब मुद्दा यह है कि libffmpeg.so या ffmpeg को कुछ अन्य पुस्तकालयों की आवश्यकता होती है जो सामान्य रूप से अपनी (ffmpeg) स्वयं की lib निर्देशिका में होती है जब मैं इसे रनटाइम के साथ चलाता हूं। मेटाइनटा ()। exec (कमांड), यह उन अन्य पुस्तकालयों के लिए कॉल करता है जो या तो सही जगह पर नहीं हैं या एंड्रॉइड पैकेजिंग सिस्टम द्वारा नहीं उठाए गए हैं।

इसलिए मैंने सभी पुस्तकालयों की प्रतिलिपि बनाई है जो कि ffmpeg को उसी / lib / armeabi-v7a / में की आवश्यकता है, लेकिन फिर भी कोई सफलता नहीं है।

स्टैकवॉवरफ्लो में खोजना, मुझे jani aproach का उपयोग करने की पोस्ट मिलती हैं और दूसरों का कहना है कि ये बिना जेनी के कर सकते हैं पूर्व निर्मित बाइनरी का उपयोग करने का सबसे आसान तरीका क्या है जो एंड्रॉइड में अन्य लाइब्रेरी की आवश्यकता है?

तो एंड्रॉइड। एमके और एपीसी.एमके फाइलों का सवाल भी है, जब उन्हें इसकी आवश्यकता होती है, तो क्या यह केवल तभी होता है जब कोई एंड्रॉइड में देशी सी / सी ++ कोड तैयार करने की कोशिश कर रहा हो या इसे पहले से निर्मित पुस्तकालयों और बाइनरी में भी इस्तेमाल किया जाना चाहिए लिप्त हैं। और अगर मुझे इस मामले की आवश्यकता है तो इन फ़ाइलों को परियोजना में क्यों रखा जाना चाहिए?

मैं एंड्रॉइड के लिए बहुत ही नया हूँ, कृपया स्पष्ट और कंसोल, अपने कुछ ज्ञान को साझा करने के लिए धन्यवाद।


मैं आपको कुछ लिंक दे सकता हूं:

जेएनआई के साथ काम करते समय बाहरी सी / सी + लाइब्रेरी फ़ाइल का उपयोग कैसे करें
.h फ़ाइल में एस.एस फ़ाइल के रूप में जेनी का उपयोग करके एंड्रॉइड में जावा फ़ाइल में।
एंड्रॉइड एनडीके में एकाधिक (मेरी और तृतीय-पक्ष) देशी लाइब्रेरी
एंड्रॉइड एनडीके - एक दूसरे को कॉल करने के लिए दो देशी साझा लाइब्रेरी बनाएं

सबसे पहले, आप देशी कोड कैसे कॉल करना चाहते हैं?

आपके पास 2 विकल्प हैं:

1) एक आवरण के माध्यम से पुस्तकालय फ़ंक्शंस कॉल करें: एक वर्ग जो मूल कार्यों का एक सेट परिभाषित करता है आपको जावा संरचना और सी प्रतिनिधित्व के बीच डेटा स्ट्रक्चर को बदलना होगा। एक जावा ऑब्जेक्ट मैप्स का एक बहुत विशिष्ट प्रकार की सी डाटा स्ट्रक्चर है, और सी स्ट्रक्चर सामान्यतः जावा से एक्सेस नहीं किया जा सकता है। इसलिए प्रत्येक लागू सी / सी ++ फ़ंक्शन के लिए एक आवरण है जो जावा नेटिव फ़ंक्शन का उपयोग करता है।

2) आप एक शेल कमांड खोल सकते हैं। एंड्रॉइड लिनक्स है, और आप इसे adb shell माध्यम से संवाद कर सकते हैं। आप कमांड लाइन आर्गुमेंट्स पास कर सकते हैं, आरंभिक प्रक्रिया के stdin / stdout से लिख सकते हैं / पढ़ सकते हैं। आप फ़ाइल सिस्टम के माध्यम से शुरू की गई प्रक्रिया में / से डेटा पास कर सकते हैं। उदाहरण के लिए, यह एक रूट डिवाइस पर su उपयोग करने के तरीके है: एंड्रॉइड से शेल कमांड निष्पादित करें





android-shell