【问题标题】:Add seperate jniLibs reference for different module dependencies in Android Studio project在 Android Studio 项目中为不同的模块依赖添加单独的 jniLibs 引用
【发布时间】:2018-11-07 08:46:58
【问题描述】:

我正在开发一个具有两个不同模块依赖项的 android 项目:

  1. 第三方 jar 依赖项。
  2. 我自己创建的一个 Android 库依赖项。

这两个模块都使用不同的 C++ 库。 jar 依赖是指它的库/ .so 文件本身。

我只是将它作为 jar 依赖项添加到我的项目中。但是,对于 android 库依赖,我在 libs/armeabi-v7a/ 文件夹中添加了 .so 文件,并在模块级别 build.gradle 文件中添加了它们的引用,如下所示:

android {
 defaultConfig {

        ndk {
            abiFilters 'armeabi-v7a'
        }
    }


    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

如果不将此代码添加到我的 android 库依赖项的 build.gradle 文件中,则 .so 文件不会包含在构建中,并且当我尝试加载 .so 文件时出现错误。另一方面,当我将上述代码添加到我的 android 库依赖项的 build.gradle 中时,当 jar 依赖项尝试引用其自己的 .so 文件时,它会引发错误。

我已经用谷歌搜索了这个问题,但没有找到任何东西。有没有办法明智地引用 jniLibs 目录模块来解决这种冲突?

【问题讨论】:

  • 在build.gradle中添加ndk相关块时请分享错误日志
  • @aminography 当我在 build.gradle 中添加 ndk 相关块时,我没有收到任何错误!当我使用 ndk 块运行它时,应用程序会卡在 System.LoadLibrary(".so filename")
  • @aminography 当这行代码实际为第三方.jar依赖执行时。

标签: android android-gradle-plugin build.gradle


【解决方案1】:

这可以通过重新包装第三方.jar来实现:

  • 不要将 (C) jniLibs 路径设置为 (Java) libs 目录。

  • 但从.jar.zip 格式)中提取(并删除).so 本机库

  • 然后将它们放入jniLibs/armeabi

【讨论】:

  • 我已经尝试将 so 文件放在 armeabi 和 armeabi-v7a 目录中。还提取了 .jar 以获取 so 文件并手动添加它,但它不起作用。
猜你喜欢
  • 1970-01-01
  • 2014-12-27
  • 2015-12-09
  • 2014-03-14
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
相关资源
最近更新 更多