项目中经常会用到三方库,包括 jar 、arr 或者 so 文件,对于它们的使用,我们常是将 jar和arr 直接放到项目目录 \app\libs 下即可,对于so文件则是 \app\src\main\jniLibs\ 下面对应的 armeabi-v7a 、armeabi 等目录下,以上是默认的情况。我们如果想修改so文件的目录,可以通过 gradle 来修改,gradle 可以对 jni 的目录做个修改,比如我们想把 so 文件也放在 \app\libs 目录下,则可以
android{
……
sourceSet{
main{
jinLibs.srcDirs = ['libs'}
}
}
}
这样就把 main\jinLibs 的默认目录指向了 app\libs 。 以上操作比较简单,如果不巧碰上了马甲包怎么办?还是上面操作,没问题。
如果再进一步,比如说 app\libs\armeabi-v7a 目录下有五个so文件,分别是 a.so 、b.so 、c.so 、d.so 、e.so ,这五个so文件支持着app的某些功能;当项目开始增加马甲包时,由于某些原因,a.so 这个文件不适用了,需要替换为 a1.so 文件,其他四个文件不变,怎么办? 如果是 jar 包的话,可以通过 dependencies 中的命令来添加指定的 jar,但 so 文件似乎没有指定的命令。换个思路,既然 jni 的目录可以指定,那么我们把通用的 so 文件继续放在 app\libs\armeabi-v7a 下,把不同的 so 文件找个单独的目录放下,并且通过 gradle 来指定路径。由于 jni 的默认文件名为 jniLibs,我也就选它了,并且在 gradle 配置中 jinLibs.srcDirs 指定目录中添加它; 在马甲包中, 与 java 和 res 平级目录,创建 jniLibs 文件夹,在它里面添加 armeabi-v7a ,然后添加
so文件,这样就可以了。
android{
……
sourceSet{
main{
jinLibs.srcDirs = ['libs', 'jniLibs']
}
}
}