ᴛʜᴇᴘᴀᴛᴇʟ..
16
好的,你有很多问题.其中一些问题是个人偏好类型,但我会将它们作为我个人的选择.
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运行时将找到并打开库,并在您加载的库中查找这些方法.在这里查看更多