如何检测Android应用程序加载哪些本机共享库

我的应用程序使用本机共享库(.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指定。

我怎样才能列出.so库?

解决方案很简单,非常感谢@ praetorian-droid

  try { Set libs = new HashSet(); 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... } 

使用此代码列出可从您的应用加载的共享本机库:

 final File nativeLibraryDir = new File(getApplicationInfo().nativeLibraryDir); final String[] primaryNativeLibraries = nativeLibraryDir.list();