【问题标题】:Why the manually added .so file in libs is automatically deleted by running the Android project?为什么运行Android项目会自动删除libs中手动添加的.so文件?
【发布时间】:2014-02-21 23:52:08
【问题描述】:

我有一个 Android 项目 A,具有 ndk 和 jni 功能。 它还链接到另一个库项目 B。

为了让事情更简单,我删除了链接库项目B, 并将编译后的 .jar 文件及其 .so 文件添加到 B 的 /libs 中。

我放了一条线 System.loadLibrary("libfromB.so");

现在我清理并重建项目 A。一切都很好。 我发现每次运行项目时,/libs 中的 libfromB.so 都会被删除。 所以它会抱怨: 02-21 17:47:26.493: E/AndroidRuntime(24086): java.lang.UnsatisfiedLinkError: 无法从加载器 dalvik.system.PathClassLoader [DexPathList [[zip 文件“/data/app/com.android. askquestion.app-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.android.askquestion.app-1, /vendor/lib, /system/lib]]]: findLibrary 返回 null

但是,我看到一些来自开源的 Android 项目,它们在 /libs 中有一些 .so 文件,它们不会自动删除。

【问题讨论】:

    标签: android android-library


    【解决方案1】:

    您不应将 .so 文件直接放在 libs/ 目录下,而应放在适合体系结构的子目录下,例如

    project/libs/armeabi/libfromB.so
    

    如果您的 IDE 认为您的项目具有本机代码,则它可能正在运行正在清理该目录的 NDK 构建子系统。

    System.loadLibrary() 采用短库名,而不是文件名。因此,如果您的库名为“libfromB.so”,您应该使用

    System.loadLibrary("fromB");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多