jniLibs.srcDirs与jni.srcDirs的配置区别是什么?
区别解析:
jni.srcDirs vs jniLibs.srcDirs 刚好对这两个Gradle配置很熟悉,给你掰扯清楚它们的核心区别:
sourceSets { main { jni.srcDirs = ["libs"] } }
这个配置是用来指定JNI原生源码(C/C++代码)的存放目录。默认情况下,Android项目会去src/main/jni目录找需要编译的JNI源码,你把它改成["libs"]后,Gradle就会到libs目录下读取C/C++代码,然后调用NDK把这些源码编译成对应架构的.so库,最后打包进APK。简单说,这是给需要自己编译JNI代码的场景用的。sourceSets { main { jniLibs.srcDirs = ["libs"] } }
这个配置则是指定已经编译好的JNI库(.so二进制文件)的存放目录。这些.so文件是已经编译完成的成品,Gradle不会再对它们进行编译操作,只会在构建APK的时候,把这些库复制到APK的lib/[架构名]目录下。默认的预编译库目录是src/main/jniLibs,改成libs后,就会从这个目录读取现成的.so文件。这个是给直接使用第三方预编译JNI库的场景用的。
一句话总结
- 自己写C/C++要编译?用
jni.srcDirs指定源码位置; - 拿现成的
.so库直接用?用jniLibs.srcDirs指定预编译库位置。
内容的提问来源于stack exchange,提问作者Khemraj Sharma
相关产品推荐
相关产品推荐

