6

में ग्रेडल प्रयोगात्मक प्लगइन 0.2.0 का उपयोग करके एपीके के साथ स्टेटिक लाइब्रेरीज़ (.a फाइलें) को कैसे लिंक करें मेरी परियोजना में दो चीजें हैं।एंड्रॉइड स्टूडियो

  1. मैं का उपयोग कर ndk-build
  2. लिंक एक स्थिर पुस्तकालय बनाने रहा हूँ कि एंड्रॉयड स्टूडियो में मौजूदा आवेदन करने के लिए स्टेटिक पुस्तकालय।

कई प्रश्नों का संदर्भ दिया और कई उत्तरों की कोशिश की। लेकिन उनमें से कोई भी मेरे लिए काम नहीं करता है।

यहाँ मेरी संदेह कर रहे हैं,

  1. स्थिर पुस्तकालयों कहाँ वास्तव में रखा जाना चाहिए ..?
  2. ग्राडल बिल्ड सिस्टम को कैसे निर्दिष्ट करें कि मैं स्थिर पुस्तकालय को जोड़ रहा हूं ..?

कृपया मुझे अनुसरण करने के लिए आवश्यक चरणों के साथ मदद करें।

+0

आप सीधे एक स्थिर पुस्तकालय का उपयोग कर सकते एक एंड्रॉइड एप्लिकेशन के अंदर। मूल पुस्तकालय हमेशा गतिशील पुस्तकालय (.so) होना चाहिए। क्या धीरे-धीरे सॉमे सी/सी ++ कोड संकलित किया गया है जिसे आपकी स्थिर लाइब्रेरी से लिंक करने की आवश्यकता है? यदि नहीं, तो आपको अपनी लाइब्रेरी को गतिशील लाइब्रेरी (.so) होने के लिए संकलित करना चाहिए। – sonic

+0

क्या आपके पास इन स्थिर पुस्तकालयों की शीर्षलेख फ़ाइलों तक पहुंच है? –

उत्तर

3

अंत में मुझे जवाब मिला।

आवेदन की build.gradle फ़ाइल संशोधित करें ... नीचे

android.ndk { 
    moduleName = "AEC" 
    ldLibs += ["android", "OpenSLES", "log"] 
    ldFlags += "/home/lone/AndroidStudioProjects/AcousticEchoCanceller/app/src/main/jni/prebuilt/libToneDetect.a" 
    ldFlags += "/home/lone/AndroidStudioProjects/AcousticEchoCanceller/app/src/main/jni/prebuilt/libAec.a" 
    CFlags += ['-std=c99'] 
} 

नोट के रूप में: यह केवल तभी कारगर साबित पुस्तकालय और वास्तुकला एक ही हैं। और एपीके केवल 1 प्लेटफार्म

0

स्थिर संरचना लाइब्रेरी का संदर्भ देते समय फ़ोल्डर संरचना अपेक्षाकृत महत्वपूर्ण है, मैं अपनी संरचना का संकेत देने जा रहा हूं, जाहिर है कि यह आपके लिए थोड़ा अलग होगा लेकिन उम्मीद है कि यह चीजों को थोड़ा सा साफ़ कर देगा। सबसे पहले:

मेरे (सी :) ड्राइव में मेरे पास प्रोजेक्ट नामक एक फ़ोल्डर है जो मेरे सभी एंड्रॉइड स्टूडियो प्रोजेक्ट्स का घर है, इस फ़ोल्डर में मेरे पास मेरी लाइब्रेरी है, जिस पर मैं काम कर रहा हूं चालू (जो लाइब्रेरी का उपयोग करता है)

अगला चरण उस प्रोजेक्ट को खोलना होगा जिसमें आप लाइब्रेरी का उपयोग करना चाहते हैं और कोड की इन पंक्तियों को शामिल करना चाहते हैं।

विस्तृत "Gradle स्क्रिप्ट" और खुला 'build.gradle (मॉड्यूल: एप्लिकेशन)' और तहत निर्भरता इस ऐड - परियोजना संकलन (पथ: ": पुस्तकालय")

अगला ओपन 'settings.gradle (परियोजना सेटिंग्स) 'और आपको यह देखना चाहिए -' ऐप '

पढ़ने के लिए उपर्युक्त पंक्ति को संपादित करें' एप ',' लाइब्रेरी ' और नीचे दी गई रेखा पर इसे जोड़ें -' प्रोजेक्ट (": लाइब्रेरी") .projectDir = नई फ़ाइल ("../ (yourlibraryfoldernamehere)/लाइब्रेरी") '

यह चाल चलाना चाहिए, उम्मीद है कि यह मदद करता है, अगर कुछ अस्पष्ट मुझे चिल्लाता है और मैं सहायता या बेहतर व्याख्या करने की कोशिश करूंगा! सौभाग्य!

+0

yourlibraryfoldernamehere यह लाइब्रेरी फ़ोल्डर का पूर्ण पथ है ..? –

+0

हां, मेरे मामले में मेरे पास यह है ("../Library/library") –

+0

मैंने प्रोजेक्ट फ़ोल्डर में एक फ़ोल्डर लाइब्रेरी बनाई है और उसमें मेरी लाइब्रेरी libnative.a plcaed है। निर्भरता 'संकलन परियोजना (': लाइब्रेरी ') में इसे और सेटिंग्स में शामिल किया गया है .gradle' शामिल करें ': ऐप', 'लाइब्रेरी' प्रोजेक्ट (": लाइब्रेरी")। ProjectDir = नई फ़ाइल ("लाइब्रेरी/libandroid_vajra एए ") 'यह किया। अब जब मैं प्रोजेक्ट को सिंक करने का प्रयास करता हूं तो यह त्रुटि दे रहा है ** ग्रैडल सिंक विफल: नाम 'डिफ़ॉल्ट नहीं मिला' के साथ कॉन्फ़िगरेशन ** –

1

Hello-libs वह है जो सहायक भी हो सकता है: यह 2 libs बनाता है और ऐप में उनका उपयोग करता है। बिल्डिंग libs और libs का उपयोग डी-युग्मित किया जा सकता है; उपयोग के लिए, ऐप/build.gradle

नमूना साझा lib के लिए हैं; उस build.gradle में स्थैतिक lib के लिए gperf के ऊपर टिप्पणी का पालन करें [jniLibs फ़ोल्डर में स्थिर lib नहीं डालें, कोई ज़रूरत नहीं है], यह काम करेगा।

CMake + android स्टूडियो समान और सरल है [वे गुरु-cmake शाखा में हैं]

2

Gradle-प्रयोगात्मक 0.2.0 अब के लिए बहुत पुराना है। मेरे पास 0.7.2 का समाधान है।

डाल एंड्रॉयड {}

repositories { 
    libs(PrebuiltLibraries) { 
     yourlib { 
      headers.srcDir "src/main/jni/prebuilts/include" 
      binaries.withType(SharedLibraryBinary) { 
       sharedLibraryFile = file("src/main/jni/prebuilts/${targetPlatform.getName()}/libyourlib.so") 
      } 
     } 
    } 
} 

के इस बाहर और एंड्रॉयड {}

sources { 
     main { 
      jni { 
       dependencies { 
        library "yourlib" linkage "shared" 
       } 
      } 
     } 
    } 

कोड से लिया अंदर इस कोड: Xavier Hallade post

+0

मदद नहीं मिली यह केवल 'साझा लाइब्रेरीफ़ाइल' के लिए काम करता है। स्थिर libs के बारे में क्या ?? –

+1

इगोर। क्या आपने "ShareLibraryBinary" को "StaticLibraryBinary", "sharedLibraryFile" में "staticLibraryFile" और "साझा" करने के लिए "स्थिर" में बदलने का प्रयास किया है? – Arkady

+0

@ अर्कडी, मैंने 'स्टेटिक लाइब्रेरी बाइनरी 'के साथ प्रयास किया है लेकिन यह काम नहीं करता है। कोई सुझाव ? –

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