您的位置:首页 > 移动开发 > Android开发

Android JNI入门编辑之Hello world

2016-12-17 23:11 183 查看

Android JNI入门编辑之Hello world

环境搭建 开发环境为Android studio1.5,window10操作系统,在开发中发现1.5版本在编译生成NDK的命令行与2.0以上版本有点区别,在下面会具体说明,至于具体原因,现在还不清楚(欢迎知道的朋友留言告诉),下面具体进行第一个android JNI调用C++代码的程序,我会以图片的形式具体来显示,方便不懂的朋友快速了解。

创建Android调用C++程序 首先用Android studio创建一个新的Android Demo,这里我新建一个名为AndroidJni的项目,如图所示:


创建一个Java类,名字为JniTest,在JniTest类中,声明会使用到的一些native接口方法,以及自定义so:


JniTest中方法之所以显示错误,是还没有在JNI头文件中生成对应的函数,这里可以先不用管。 创建JNI文件,生成JNI层C/C++头文件


对于生成的com_tanggua_androidjni_JniTest.h,需要将其一定到JNI文件中,并且生成对应的C或者C++ 的.c或者.cpp文件,生成.h文件需要在Triminal中切换到Android项目的java目录下,并且使用javah生成.h文件。在具体实现中,我发现Android 1.5版本生成.h文件需要使用 javah -classspath . -jni 包名+类名的形式才可以,在Android studio2.0以上使用javah -d ../jni 包名+类名形式,而且这个命令在1.5中不能生成,具体原因还没有搞懂。好了现在生成了JNI层文件。
4000
完成之后需要在gradle.properties目录下加上 android.useDeprecatedNdk = true如下图


然后在build.gradle中添加ndk所包含的库,名字必须与创建的一样,最后在Sync Now或者build一下项目,就会发现前面的错误完全消失,项目创建成功,如图:


下面我们可以具体在JNI层对native方法进行操作了:


然后返回Java层,在MainActivity中对native方法进行调用,并获取JNI层数据,在这个时候我们出现了一个错误,如图:


根据所查到的资料显示这个错误是因为NDK的原因,需要在JNI中创建一个空的文件,在这里创建的是empty.c文件,然后编译,成功:


好了,第一个Android Jni到此编译完成,后续我继续更新Android Jni使用,以及各种类型的转换,调用,Java与C/C++调用。 - - 代码下载地址:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: