JNI NDK Cygwin 从无到有

来源:互联网 发布:淘宝哪里改收货地址 编辑:程序博客网 时间:2024/05/07 10:30

最近做项目,顺带学习了一下jni的基本用法,这里记录一下。概念介绍忽略,直接上操作和代码。

一:Cygwin

首先在官网http://cygwin.com/install.html上下载Cygwin,根据操作系统的位数下载对应的版本的Cygwin,都是简单英语,接下来便是安装。

步骤:(只取关键步骤,其他都是简单的下一步)

    1、这个页面(网上截得图,比较懒)


选择163的那个资源,下载最新版本选择第一个资源就行。

2、接下来是选择要下载要安装的工具界面


这时点击Devel和Default中间的那个圆圈,这里面的东西全部下载下来。后面就是一贯的下一步。

3、之后桌面上会有图标,点击出现下面这个界面,输入gcc -v可以看到版本号。


4、运用Cygwin编译自带的一个例子,产生.so文件

这时在Cygwin的安装目录下会有个home文件夹,要进去修改.bash_history文件,我的路径是C:\cygwin\home\003888,记得先备份

打开后在最后一行加上下面两句话。

ANDROID_NDK_ROOT=/cygdrive/c/cygwin/android-ndk-r9c
export ANDROID_NDK_ROOT

上面的c/cygwin/android-ndk-r9c是我的ndk路径,下载最新版的Cygwin是自带ndk的,export可以自己随便命名。

在系统环境变量中配置path,我的是C:\cygwin\bin;

编译一下自带的例子,在C:\cygwin\android-ndk-r9c\samples中(根据实际安装目录选择),有很多自带的例子可以试着编译一下。

打开Cygwin 输入 cd C:/cygwin/android-ndk-r9c/samples,注意与windows的斜杠是相反的,进入cd hello-jni/jni,输入$ANDROID_NDK_ROOT/ndk-build,注意美元符号也不能少。这是就会看到一大堆生成命令,同事在外面的lib文件夹下也会生成3个对应的.so文件所在的文件夹。

二:Eclipse配置NDK

1、在Eclipse下新建项目MyNdk,在底下新建jni目录,在project-->properpties-->new -->program --> ok

在弹出的框中的main标签中,location是选择ndk所在的地址,可以用下面的Browse File system来选择,我的是C:\cygwin\android-ndk-r9c\ndk-build.cmd

在working dictionary中点击Browse workspace选择要工作的项目,这里选择MyNdk。

在refresh标签中勾选Refresh resources upon completion,The entire workspace,Recuresively include sub-folders。

在Build options标签中勾选After a “clean",During manual builds,During auto builds,Specify working set of relevant resources。点击Specify Resources…,勾选MyNdk中的jni目录。

2、在MyNdk项目中新建类

这是在工作空间中,MyNdk的bin下就应该有PortJni.class文件,定位到cd D:\WorkSpace\MyNdk\bin\classes目录下,运行javah com.xuyang.com_xuyang_myndk_PortJni命令,这时就会生成com_xuyang_myndk_PortJni.h文件,打开可以发现他是一个简单的头文件。

之后就是根据这个头文件编写实现的c文件了,直接贴代码

自己根据两个文件的不同之处就能比较出来c文件的具体写法,至于类型转换就要后面自己学习了。

之后就是编写Android.Mk文件了,在jni目录下新建Android.mk文件,填写如下代码

保存后运行就会在lib目录下生成armeabi/libPortJni.so文件,然后再在activity中调用

static{
        System.loadLibrary("PortJni");
    }

这句代码对应的就是Android.mk文件中的LOCAL_MODULE的值,后面就是调用PortJni.java中的方法啦。

三、在别的项目中调用已经写好的so文件

1、把生成的.so文件拷贝到对应项目的lib中

2、把对应的.java文件考到项目中,注意:如果直接拷贝记得新建一个包,包名和生成.so文件项目中这个.java文件一样的包,否则找不到方法,最好是将.java文件打成jar包

3、调用就是和上面的activity中调用一样了。


0 0