好的,所以你有很多问题.其中一些问题是个人偏好类型,但我会将它们作为我个人的选择.
1
这是你的选择.我个人会使用已编译的.so文件.这样我就不必担心NDK和CMake和.mk文件了.如果您有该文件,您只需将该文件添加到libs文件夹(而不是lib文件夹)并对build.gradle文件进行微小更改.而已.
更改为build.gradle:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}
2& 3
这些与此选项无关.
4
无论您使用文件还是编译库,都必须执行此类操作:
@SuppressWarnings("JniMissingFunction")
public class MyNativeMethods {
static {
System.loadLibrary("my_native_lib");
}
public native int native_method_1(int fd);
public native int native_method_2(int fd);
public native void native_method_3(int fd, int arr[]);
public native int[] native_method_4(int fd);
}
然后,您可以从Activity / Fragment中调用这些方法.
希望这很清楚.
编辑(根据下面的评论):
1).so或.a文件是您的本机库.
2).cpp,.c等文件只是您的本机源代码文件.如果要在项目中使用这些文件,则必须使用构建系统(例如,CMake)来使用它们. CMake将获取您的源代码文件并创建一个.so库,这也是本机库.这就是我建议使用.so文件的原因,因为为什么在你不需要时在项目中实现CMake的工作呢?
3)System.loadLibrary(“my_native_lib”);:在这里,您要告诉Java运行时添加此给定的库.这样,您就可以在Java和库中的C代码之间创建链接.该行下面的方法应该与它们在C/C++代码中的名称相同.这样,Java运行时将找到并打开库,并在您加载的库中查找这些方法.查看更多here