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

  • 如何以编程方式终止android NDK(原生活动)应用程序?
  • 如何获取已安装软件包的lib文件夹的path
  • Android NDK - 只能用C / C ++编写
  • ndk-stack不工作
  • 使用Eclipse加载Android的本地库
  • Android应用程序在运行时突然崩溃?
  • 原生OpenGL渲染器故障
  • 链接第三方库(libs.a)与NDK
  • 解决方法很简单,非常感谢@ 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();