2012-01-05 16 views
8

द्वारा कौन से देशी साझा पुस्तकालयों को लोड किया गया है, यह पता लगाने के लिए कि मेरा एप्लिकेशन देशी साझा लाइब्रेरी (.so) का उपयोग करता है, मैं इसे System.loadLibrary("xxx") पर कॉल करके लोड कर रहा हूं। यह ठीक लोड करता है और मैं देशी तरीकों को बुला सकता हूं।एंड्रॉइड एप्लिकेशन

मुझे आश्चर्य है कि साझा पुस्तकालयों के अनुप्रयोगों का पता लगाने के लिए कोई संभावना है या नहीं। मैं PackageManager से भरी हुई पुस्तकालयों की सूची करने की कोशिश की:

PackageManager pm = getPackageManager(); 
String applicationPackage = this.getApplicationInfo().packageName; 
ApplicationInfo ai = pm.getApplicationInfo(applicationPackage, PackageManager.GET_SHARED_LIBRARY_FILES); 
String[] soFiles = ai.sharedLibraryFiles; 

लेकिन यह एक खाली सूची देता है। यह केवल तभी काम करता है जब मेरा एप्लिकेशन com.google.android.maps जैसे कुछ .jar पुस्तकालयों का उपयोग करता है जिसे मैं मैनिफेस्ट के अनुप्रयोग टैग में uses-library द्वारा निर्दिष्ट करता हूं।

मैं पुस्तकालयों को कैसे सूचीबद्ध कर सकता हूं?

उत्तर

13

समाधान सरल, करने के लिए बहुत धन्यवाद है @ praetorian-ड्रायड

try { 
     Set<String> libs = new HashSet<String>(); 
     String mapsFile = "/proc/" + android.os.Process.myPid() + "/maps"; 
     BufferedReader reader = new BufferedReader(new FileReader(mapsFile)); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      if (line.endsWith(".so")) { 
       int n = line.lastIndexOf(" "); 
       libs.add(line.substring(n + 1)); 
      } 
     } 
     Log.d("Ldd", libs.size() + " libraries:"); 
     for (String lib : libs) { 
      Log.d("Ldd", lib); 
     } 
    } catch (FileNotFoundException e) { 
     // Do some error handling... 
    } catch (IOException e) { 
     // Do some error handling... 
    } 
1

उपयोग साझा देशी पुस्तकालयों, जो आपके ऐप्लिकेशन से लोड किया जा सकता सूचीबद्ध करने के लिए इस कोड:

final File nativeLibraryDir = new File(getApplicationInfo().nativeLibraryDir); 
final String[] primaryNativeLibraries = nativeLibraryDir.list(); 
संबंधित मुद्दे