2010-04-08 10 views
9

साझा लाइब्रेरी। इसलिए फ़ाइलों को एपीके फ़ाइल में lib/armeabi में रखा गया है।किसी स्थापित पैकेज के लिए lib फ़ोल्डर के पथ को कैसे प्राप्त करें

मैं स्थापना libs/डेटा/आंकड़ों के निकाले हो जाता है के बाद पढ़ा है/application_package lib/

मैं कैसे रन टाइम पर अपने आवेदन में इस निर्देशिका के लिए सटीक मार्ग मिल सकता है? क्या यह निर्देशिका एप्लिकेशन द्वारा पठनीय है? या केवल निष्पादन योग्य पहुंच की अनुमति है? यदि यह पठनीय है - क्या यह अभी भी कॉपी संरक्षित अनुप्रयोगों के लिए सच है?

उत्तर

11

आप के साथ सटीक पथ प्राप्त कर सकते हैं:

String libraryPath = getContext().getApplicationInfo().dataDir + "/lib"; 

निर्देशिका और उसकी फ़ाइलें आवेदन द्वारा पठनीय हैं।

यूनिक्स अनुमतियां rwxr-x--x पर सेट की गई हैं। तो के साथ अनुप्रयोग एक ही समूह फ़ाइलों को पढ़ सकते हैं।

+6

और जब हम इसमें हैं, वहां ApplicationInfo.nativeLibraryDir है :-) – Ilya

28
एपीआई स्तर में

जोड़ा 9

getContext().getApplicationInfo().nativeLibraryDir;

0
String libraryPath = context.getFilesDir().getParentFile().getPath() + "/lib"; 

बेहतर अनुकूलता के लिए, निम्न फ़ंक्शन का उपयोग करें:

@TargetApi(Build.VERSION_CODES.GINGERBREAD) 
public static String getLibraryDirectory(Context context) { 
    int sdk_level = android.os.Build.VERSION.SDK_INT; 

    if (sdk_level >= Build.VERSION_CODES.GINGERBREAD) { 
     return context.getApplicationInfo().nativeLibraryDir; 
    } 
    else if (sdk_level >= Build.VERSION_CODES.DONUT) { 
     return context.getApplicationInfo().dataDir + "/lib"; 
    } 

    return "/data/data/" + context.getPackageName() + "/lib"; 
} 
+0

क्या आप निश्चित हैं कि आप इस स्थान से मूल पुस्तकालय लोड कर सकते हैं? – lhunath

+0

हां, मैंने इसे अपने ऐप में चेक किया है। समस्या क्या है? – Verdigrass

+0

एचटीसी एम 9 + 5.1.1 चल रहा है पर काम नहीं करता है। Lib लिंक वहाँ है, लेकिन सही निर्देशिका को इंगित नहीं करता है। क्रॉसी का समाधान करता है (getContext()। GetAplicationInfo()। देशी लाइब्रेरीडिर;) – kshepherd

0

हो सकता है कि एक युक्ति समर्थन अलग CPU_ABIs, तो यह nativeRootLibraryDir प्राप्त करने के लिए बेहतर है जिसमें सभी उप lib निर्देशिकाएं शामिल हैं:

public static String getNativeLibraryDirectory(Context context) { 
    int sdk_level = android.os.Build.VERSION.SDK_INT; 

    if (sdk_level >= Build.VERSION_CODES.GINGERBREAD) { 
     try { 
      String secondary = (String) ApplicationInfo.class.getField("nativeLibraryRootDir").get(context.getApplicationInfo()); 
      return secondary; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    else if (sdk_level >= Build.VERSION_CODES.DONUT) { 
     return context.getApplicationInfo().dataDir + "/lib"; 
    } 

    return "/data/data/" + context.getPackageName() + "/lib"; 
} 
संबंधित मुद्दे