如何在Android Studio中引用单个本机库(.so文件)BY LINK(gradle)

时间:2016-02-22 16:50:01

标签: android android-studio gradle

我有多个架构(armeabi,mips,x86等)的本机库(.so文件)位于网络驱动器\\ network \ android \ [architecture] \ *。所以

我想在此文件夹中引用个人 .so文件链接 ,同时在Android Studio项目中指定架构

示例:

我们假设我有以下库文件:

  • \\网络\机器人\ armeabi \ liba.so
  • \\网络\机器人\ armeabi \ libb.so
  • \\网络\机器人\ MIPS \ liba.so
  • \\网络\机器人\ MIPS \ libb.so

我可以通过在我的项目的build.gradle文件中添加以下行来引用liba.so和libb.so:

android{
    sourceSets{
        main.jniLibs.srcDirs += '\\network\android'
    }
}

但是,我不确定在排除libb.so时我应该如何引用JUST liba.so。

如果我这样做......

android{
    sourceSets{
        main.jniLibs.srcDirs += '\\network\android\armeabi\liba.so'
        main.jniLibs.srcDirs += '\\network\android\mips\liba.so'
    }
}

...我得到UnsatisfiedLinkErrors(文件没有被引用)。

这可以用gradle吗?或者我应该在构建时将文件复制到src / main / jniLibs / [architecture]中,然后在构建后删除它们?我宁愿不必移动文件并创建不必要的冗余。

感谢您的任何信息!

3 个答案:

答案 0 :(得分:0)

用gradle你可以做你必须尝试的东西;)

我不确定我明白你想做什么,但你可以尝试这样的例子:

configurations {
    providedCompile.extendsFrom(anyNameArmeabi)
    testRuntime.extendsFrom(anyNameMips)
    //add your own configuration
    anyNameArmeabi
    anyNameMips
}

您可以配置配置中的内容附加您的配置,您可以将其添加到上面提供的编译,或testRuntime等。

dependencies {
    ...
    anyNameArmeabifiles('${project.getPath()}\\network\android\armeabi\liba.so')
    anyNameArmeabi files('${project.getPath()}\\network\android\armeabi\libb.so')
    anyNameMips files('${project.getPath()}\\network\android\mips\liba.so')
    anyNameMips files('${project.getPath()}\\network\android\mips\libb.so')
}

您还可以在构建时添加环境以选择排除/包含的配置。例如,如果您在代码中的某处添加:

  if (env == 'armeabi') {
    from(configurations.anyNameArmeabi) {
      include '**'
      into 'somewhere'
    }
  }

我不知道你的项目是怎样的,所以很难提供更多帮助。

答案 1 :(得分:0)

我最终只是使用复制/删除任务来完成这项工作。我将共享库复制到构建的标准共享库文件夹结构中,然后在构建完成时删除。

{{1}}

答案 2 :(得分:0)

这应该是你要找的东西:

android{
    sourceSets{
        main.jniLibs.srcDirs += '\\network\android'
        // this should work but not 100% sure
        filter 'liba.so'
        // or this may also work, might need brackets []
        sourceFiles '\\network\android\armeabi\liba.so'
    }
}