如何检测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; 

但它返回一个空的列表。 它只适用于我的应用程序使用一些.jar库,比如com.google.android.maps,它是通过清单的application标签中的uses-library指定的。

我如何列出.so库?

Solutions Collecting From Web of "如何检测Android应用程序加载了哪些本地共享库"

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

  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... } 

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

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