- 首先明确两点:
Android Studio默认识别的jni目录在app下(此时生成的so在libs目录,所以需要在build.gradle中指明jniLibs.srcDir=['libs']),默认识别的so文件在src/main/jniLibs(这种情况,需要在main下面建立jni目录,但是AS识别不到,所以需要在build.gradle中指定jni目录)
externalNativeBuild { ndkBuild { path file("src/main/jni/Android.mk") } } ```
总结如下:
-
NDK配置的方式:
将jni目录放在app目录下,jni目录里写Android.mk、Application.mk以及各类C/C++和汇编源文件。然后跟原来一样,用ndk_build工具去编,然后工具会自动生成libs目录,里面还有每个你在Application.mk里所指定处理器架构的so文件。然后在Build.gradle中添加配置
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
-
如果是生成的jni目录在src/main/jni下,需要添加配置:
externalNativeBuild { ndkBuild { path file("src/main/jni/Android.mk") } }
-
如果so包放在libs下面,则需要在顶级的Project build.gradle中配置
sourceSets{ main{ jniLibs.srcDirs=['libs'] } }
-
程序默认会去找,新建一个 在src/main文件中新建 jniLibs文件夹,将.so文件都拷贝进去
-
自己定制目录
task copyJniLibs(type: Copy) {
from 'libs/armeabi'
into 'src/main/jniLibs/armeabi'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(copyJniLibs)
}
clean.dependsOn 'cleanCopyJniLibs'
总之,你要是添加了
externalNativeBuild {
ndkBuild {
path file("src/main/jni/Android.mk")
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
那么jni文件夹和生成的.so文件, 你爱放哪就放哪 !
不然就老老实实把jni文件夹放在app目录下面 , 把.so文件放在src/main/jniLibs目录下面(as默认在这个目录找)。
比较推荐的做法是上面的红字后面的步骤,该做法是把jni文件夹放在app目录下面,把.so文件放在app/libs下面(as默认的jar包也是放在该位置)