导入现有的c++;库(.a或.so文件)ndk android
我刚刚用android进行了原生开发。我成功地为本机开发做好了AndroidStudio 2.2.2准备 我还构建了示例hello jni项目 我正在努力实现的目标 我尝试使用C++中设计的一个现有的库(我将提供静态库<强> .<强>扩展名> <强> .SO 文件 关于本土发展的一些困惑导入现有的c++;库(.a或.so文件)ndk android,android,android-ndk,java-native-interface,.a,.so,Android,Android Ndk,Java Native Interface,.a,.so,我刚刚用android进行了原生开发。我成功地为本机开发做好了AndroidStudio 2.2.2准备 我还构建了示例hello jni项目 我正在努力实现的目标 我尝试使用C++中设计的一个现有的库(我将提供静态库 .扩展名> .SO 文件 关于本土发展的一些困惑 1)我是否应该使用现有C++库的.CPP和.h文件来代替 > < >或>强> 2) 我是否需要制作CMakeLists.text:我在谷歌上搜索了我的。文件不是使用ndk build生成的,所以我需要制作它 如果我使用.cp
1)我是否应该使用现有C++库的.CPP和.h文件来代替<强> > < <强> >或>强> 2) 我是否需要制作CMakeLists.text:我在谷歌上搜索了我的。文件不是使用ndk build生成的,所以我需要制作它
如果我使用.cpp和.h文件,我应该使用Android.mk&Application.mk CMakeLists.text是否将我新开发的android项目编译为库或现有的.a文件 3) 在我的项目中,.a文件放在哪里。它在jni文件夹下吗?注释:这个答案不显示在编写本机(C++)代码后如何使用CMASE。对于该设置,请阅读下面的答案以充分了解该设置,然后查看
好的,你有很多问题。其中一些问题属于个人偏好类型,但我将提供它们作为我的个人选择 #一, 这是你的选择。一、 我个人会使用编译的
.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号
这些都与该选项无关
#四,
无论您使用的是文件还是已编译的库,都必须执行以下操作:
@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);
}
然后,您可以从活动
/片段
调用这些方法
希望这足够清楚
编辑(基于下面的评论):
.so
或.a
文件是您的本机库
.cpp
、.c
等文件只是您的本地源代码文件。如果要在项目中使用这些文件,则必须使用生成系统(例如,CMake)来使用它们。CMake将获取您的源代码文件并创建一个。因此
库,它又是本机库。这就是为什么我建议使用.so
文件的原因,因为为什么不需要在项目中实现CMake
System.loadLibrary(“my_native_lib”)代码>:这里告诉Java运行时添加这个给定的库。这样,你就可以在java和C++内部的代码之间创建链接。该行下面的方法应该与它们在C++/C代码中的名称相同。这样,Java运行时将查找并打开库,并在加载的库中查找这些方法。看更多
非常感谢你的回答。我对“本地图书馆”这个词感到非常困惑。1)我从.so文件(在'jn'文件夹中)访问C++方法时编写的代码称为本地库,或者我从C++库(如数学函数)使用的方法称为本地库或My .so或.file。这行写的是System.loadLibrary(“my_native_lib”);我正在加载什么?我已编辑了我的答案,以向您提供更多详细信息。查看我的本地项目是否使用VisulaStudio完成。任何方式将C++源文件添加到Android Studio并生成。这将是伟大的,如果这发生是这样做,看看这个链接。这是最简单的解决方案。你能帮我看看我的Android.mk文件应该是怎样的吗?根据你的模式,我很好地浏览了这个链接,然后我感到困惑。