2015-06-22 12 views
6

पर असंतुष्ट लिंक्स त्रुटि मेरे पास एंड्रॉइड प्रोजेक्ट (एनडीके नहीं) है। इस प्रोजेक्ट में मैं अपनी खुद की मूल लाइब्रेरी myLib.so को जोड़ रहा हूं। मैंने अपनी लाइब्रेरी को संकलित किया: armeabi-v7a और x86। तो jniLibs फ़ोल्डर में मेरे पास मेरे lib के साथ दो फ़ोल्डर्स हैं: armeabi-v7a, x86।सैमसंग एस 6

उपयोगकर्ता सैमसंग S6 पर मेरे ऐप चलता है, मैं अगले क्रैश लॉग है:

> java.lang.UnsatisfiedLinkError: 
> dalvik.system.PathClassLoader[DexPathList[[zip file 
> "/data/app/com.mycompany.test-2/base.apk"],nativeLibraryDirectories=[/data/app/com.mycompany.test-2/lib/arm64, 
> /vendor/lib64, /system/lib64]]] 


> couldn't find "myLib.so" at java.lang.Runtime.loadLibrary(Runtime.java:366) at 
> java.lang.System.loadLibrary(System.java:989) 

क्या चल रहा? क्यों 64 बिट डिवाइस मेरे lib के साथ नहीं चल रहा है?

उत्तर

15

यदि आपके पास केवल x86 और armeabi-v7a लाइब्रेरी हैं, तो आपका ऐप स्वचालित रूप से "32-बिट मोड" में स्थापित होना चाहिए।

क्या आप सुनिश्चित हैं कि आपके पास कोई अन्य लाइब्रेरी नहीं है जिसमें आपके एपीके के lib/arm64-v8a फ़ोल्डर के अंदर फ़ाइलें शामिल होंगी? उस स्थिति में केवल इस फ़ोल्डर के अंदर libs इंस्टॉल हो जाएगा (आपके बिना)।

संपादित करें: केवल x86 और armeabi-v7a libs शामिल करने के लिए, आप abiFilters उपयोग कर सकते हैं:

android { 
    .... 
    defaultConfig { 
     .... 
     ndk { 
      abiFilters "armeabi-v7a", "x86" 
     } 
    } 
} 
+0

वाह, मैं apk अंदर देखा, और वास्तव में मैं फ़ोल्डर arm64-V8A देख !! एंड्रॉइड क्यों मेरे लिए उत्पन्न करता है? मैं इसे कैसे हटा सकता हूं ? – Jim

+0

संकलित करें 'pl.droidsonroids.gif: android-gif-drawable: 1.1। + मैं इस प्रोजेक्ट में इस लाइब्रेरी का उपयोग कर रहा हूं..और इस लाइब्रेरी की तरह दिखता है। इसलिए lib/arm64-v8a में फ़ाइलें। मैं कैसे ब्लॉक कर सकते हैं कि – Jim

+1

आप ऐसा कर सकते हैं: एंड्रॉयड { .... defaultConfig { .... NDK { abiFilters "armeabi-v7a", "86" } } } – ph0b

-3

32-बिट पुस्तकालय 64-बिट कोड से लोड नहीं किए जा सकते हैं। आपको अपनी लाइब्रेरी के 64-बिट संस्करण को संकलित करने या अपने जावा ऐप को 32-बिट बनाने की आवश्यकता है।

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