【问题标题】:Prebuilt C library in Android StudioAndroid Studio 中预构建的 C 库
【发布时间】:2015-07-10 15:51:26
【问题描述】:

几个月前,我开发了一个 Android 库,它使用 C 中的一些本机代码。我在 Eclipse 中开发了这样的库,因为 Android Studio 不支持 Android NDK。

为了分发库,我将项目编译为 .jar(不包括 AndroidManifest.xml)。如果有人想在 Eclipse 中使用该库,只需在文件夹 /libs 中添加 .jar 以及所有架构的预构建 C 代码 (.so)。这行得通,客户端项目最终得到以下文件:

MyProject
---| libs/
-------| Library.jar
-------| armeabi/
-------| x86/
-------| ...

现在我希望能够在 Android Studio 项目中以类似的方式使用我的库。

我尝试过的:

在应用模块的文件夹/libs 中添加Library.jar。然后,添加build.gradle 文件(在依赖项中)compile files('libs/Library.jar')。最后,在 jniLibs 中添加为所有架构编译的 C 代码 (.so)。 意思是,我有这些文件:

MyProject
---| app
-------| libs/
-----------| Library.jar
-------| jniLibs/
-----------| armeabi/
-----------| x86/
-----------| ...

但是,我总是以这个例外结束:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.app-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "lib.so"

我查过这个异常,是因为系统找不到编译好的C库而产生的。但是,我不知道可以将我的预构建 C 库放在哪里以便 Library.jar 找到。

感谢您的回答。

【问题讨论】:

    标签: android android-studio android-ndk java-native-interface


    【解决方案1】:

    看来您必须将 jniLibs 文件夹放入主模块下的 src 文件夹中。这样,Android Studio 应该能够选择 .so 文件。

    结构应该是这样的:

    MyProject
    ---| libs/
    -----| Library.jar
    ---| src/
    -----| main/
    -------| jniLibs/
    ---------| armeabi/
    ---------| x86/
    ---------| ...
    

    来源:https://stackoverflow.com/a/29508776/1691231

    【讨论】:

    • 感谢您的回复。但是,它不起作用。但是您的回答使我找到了解决方案,即将jniLibs 文件夹放入src/main
    【解决方案2】:

    您还可以在应用程序 build.gradle 中定义 jniLibs 位置 sourceSets { main { jniLibs.srcDirs = [ 'your/path/to/jniLibs')] } }

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多