首页 > 解决方案 > 在哪里放置我的 android 应用程序所需的 c++ .so 库

问题描述

我制作了一个基于 ndk 的 android 应用程序,当我通过单击 Android Studio 中的运行按钮运行它时,我发现该应用程序已安装并在我连接的 android 设备上运行。但它抱怨它无法加载一些 .so 文件,例如libc++_shared.soand libomp.so,我做了一些研究,并jniLibs在我的app\src\main文件夹中创建了一个,并将这两个 .so 文件复制到其中,现在一切正常。

但是,我仍然不清楚到底发生了什么:

  1. 当我单击运行按钮时,应用程序安装/保存在设备上,.so 文件是否复制到同一位置?
  2. 我怀疑将 .so 文件复制到 .so 文件是否是一种好习惯jniLibs,这样的 .so 文件可以由许多应用程序共享,如果每个应用程序都有自己的副本,更新它们变得很困难。有没有办法将它们存储在一个共同的地方以供应用程序共享?
  3. 我还可以在不同的应用程序之间共享 android 设备上的 .so 文件吗?

标签: androidandroid-ndk

解决方案


  1. 当我单击运行按钮时,应用程序安装/保存在设备上,.so 文件是否复制到同一位置?

应用程序保存在/data/app/your.app.name-cert-hash==同一位置,.so 库存储在同一位置,例如/data/app/your.app.name-cert-hash==/lib/x86(如果android:extractNativeLibs="true"在 AndroidManifest.xml/application 中,否则库直接压缩为 .apk)。

要发现 Android 文件系统,您可以使用 ADB(也可以使用模拟器):

  1. 从 AS 运行您的应用程序

  2. 在 su 模式下运行 adb shell:

    adb shell
    su
    ls -als /data/app
    
  1. 我怀疑将 .so 文件复制到 jniLibs 是否是一种好习惯,这样的 .so 文件可以由许多应用程序共享,如果每个应用程序都有自己的副本,更新它们变得很困难。有没有办法将它们存储在一个共同的地方以供应用程序共享?

由于 Android 安全方法,这是不可能的。

  1. 我还可以在不同的应用程序之间共享 android 设备上的 .so 文件吗?

不。


推荐阅读