这几天一直在研究JNI的开发过程,顺便把NDK环境搭建一起总结下。在windows环境下开发jni需要c/c++编译器的支持,网络上我看很多人使用cygwin。呵呵我不是很喜欢使用它,感觉安装起来挺麻烦的。我使用GNUStep,下载地址
http://www.gnustep.org/experience/Windows.html
。
![](https://i-blog.csdnimg.cn/blog_migrate/b7a2d85f2ea525c0728d8583c8c8591a.png)
下载安装后,验证是否成功。打开GNUstep->Shell,输入make -v 和 gcc -v命令,如图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/3a846f795d29bdb39c216eda03223dfb.png)
下载NDK,地址http://developer.android.com/tools/sdk/ndk/index.html。下载完后解压即可。
配置ndk环境变量,gnustep是模拟linux的环境的,打开gnustep的安装目录下的G:\softinstall\GNUstep\GNUstep\GNUstep.conf文件,添加以下内容:
说明如果不知道ndk目录在linux下应该是在哪里,你可以打开gnustep的命令窗口,输入mount,就可以找到对应的盘符。
验证环境变量,如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/e4f428f97541241330ba0e05167ddadf.png)
以上就配置成功了。
下载进入正题啦。Jni的开发步骤。
打开eclipse,新建工程名为testJni。在activity中添加以下代码 编译后的文件在bin目录下,通过javah命令生成c/c++的文件头。如下图
会在项目目录下生成jni/com_xzw_jni_TestJni.h。
头文件代码如下: 这里我们可以根据头文件编写c代码 接下来编写 Android.mk,该文件可以直接从NDK的samples下的hello-jni的jni文件下直接靠过来改改就可以了。也贴下代码哈。 其中你只需要该LOCAL_MODULE和LOCAL_SRC_FILES就可以了。
说明:LOCAL_MODULE是描述模块的,用来给java调用的模块名,会生成对应的libtestJni.so
LOCAL_SRC_FILES就是源文件啦,多个文件空格隔开即可。
接下来,我们要开始编译生成so文件咯。
打开gnustep的命令窗口,进入到项目底下,输入$NDK/ndk-build命令,即可自动生成libs/armeabi/libtestJni.so文件。
接下来就是java调用了。直接上代码 运行结果如下
以上就是jni的开发步骤了。
在这里我还要补充下:
在我们开发过程中,改一个c/c++的文件,我们都要手动去编译一下有点儿麻烦。这里我们可以使用让eclipse帮助我们自己编译。
右击jni工程的properties-->Builders-->NEW -->;Program 可以看到以下内容:
argument:--login -c "cd /e/myWorkSpace/android/hellJni && $NDK/ndk-build"
切换到Refresh 标签页
切换到Build Options标签页
这样就完成了配置,点击确定可看到控制台自动编译程序了
能力有限,请大家多多指教。附上源码
hellJni.rar (682.35 KB)
。欢迎关注我的博客:
http://home.51cto.com/index.php?s=/space/978424
![](https://i-blog.csdnimg.cn/blog_migrate/b7a2d85f2ea525c0728d8583c8c8591a.png)
下载安装后,验证是否成功。打开GNUstep->Shell,输入make -v 和 gcc -v命令,如图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/3a846f795d29bdb39c216eda03223dfb.png)
下载NDK,地址http://developer.android.com/tools/sdk/ndk/index.html。下载完后解压即可。
配置ndk环境变量,gnustep是模拟linux的环境的,打开gnustep的安装目录下的G:\softinstall\GNUstep\GNUstep\GNUstep.conf文件,添加以下内容:
说明如果不知道ndk目录在linux下应该是在哪里,你可以打开gnustep的命令窗口,输入mount,就可以找到对应的盘符。
验证环境变量,如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/e4f428f97541241330ba0e05167ddadf.png)
以上就配置成功了。
下载进入正题啦。Jni的开发步骤。
打开eclipse,新建工程名为testJni。在activity中添加以下代码 编译后的文件在bin目录下,通过javah命令生成c/c++的文件头。如下图
![](https://i-blog.csdnimg.cn/blog_migrate/8af9565cadd517312d98425361f9af79.png)
会在项目目录下生成jni/com_xzw_jni_TestJni.h。
头文件代码如下: 这里我们可以根据头文件编写c代码 接下来编写 Android.mk,该文件可以直接从NDK的samples下的hello-jni的jni文件下直接靠过来改改就可以了。也贴下代码哈。 其中你只需要该LOCAL_MODULE和LOCAL_SRC_FILES就可以了。
说明:LOCAL_MODULE是描述模块的,用来给java调用的模块名,会生成对应的libtestJni.so
LOCAL_SRC_FILES就是源文件啦,多个文件空格隔开即可。
接下来,我们要开始编译生成so文件咯。
打开gnustep的命令窗口,进入到项目底下,输入$NDK/ndk-build命令,即可自动生成libs/armeabi/libtestJni.so文件。
![](https://i-blog.csdnimg.cn/blog_migrate/31aec463107ee4a1163b1c71ac56b3cc.png)
接下来就是java调用了。直接上代码 运行结果如下
![](https://i-blog.csdnimg.cn/blog_migrate/ea2baae45ee3e3acd7ad1d77f0be19f4.png)
以上就是jni的开发步骤了。
在这里我还要补充下:
在我们开发过程中,改一个c/c++的文件,我们都要手动去编译一下有点儿麻烦。这里我们可以使用让eclipse帮助我们自己编译。
右击jni工程的properties-->Builders-->NEW -->;Program 可以看到以下内容:
![](http://s3.51cto.com/wyfs02/M02/35/84/wKioL1OriTLAmjfIAAOR2uwGUoo174_small.jpg)
argument:--login -c "cd /e/myWorkSpace/android/hellJni && $NDK/ndk-build"
切换到Refresh 标签页
![](http://s3.51cto.com/wyfs02/M02/35/84/wKioL1OriTKhxv38AAGyylREVA4880_small.jpg)
切换到Build Options标签页
![](http://s3.51cto.com/wyfs02/M02/35/85/wKioL1OriTKg978qAAJsWKWGV_o879_small.jpg)
这样就完成了配置,点击确定可看到控制台自动编译程序了
![](https://i-blog.csdnimg.cn/blog_migrate/6afb8f874c71ac22befb2ee13703d378.jpeg)
能力有限,请大家多多指教。附上源码
![](http://bbs.51cto.com/images/attachicons/rar.gif)
http://home.51cto.com/index.php?s=/space/978424