我有多个架构(armeabi,mips,x86等)的本机库(.so文件)位于网络驱动器\\ network \ android \ [architecture] \ *。所以
我想在此文件夹中引用个人 .so文件链接 ,同时在Android Studio项目中指定架构。
示例:
我们假设我有以下库文件:
我可以通过在我的项目的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]中,然后在构建后删除它们?我宁愿不必移动文件并创建不必要的冗余。
感谢您的任何信息!
答案 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'
}
}