——————————————————————————————————————————————————————————————————————
1:下载NDK、安装cygwin
2:配置cygwin
3:测试cygwin
4:编写JAVA端的native方法,并创建jni目录
5:使用JAVAH命令生成H文件
6:使用C语言或者C++语言调用H文件完成各种操作
7:制作makefile文件,使用CYGWIN环境下的NDK生成SO库文件
8:最后使用JAVA调用SO库文件
——————————————————————————————————————————————————————————————————————
1:cygwin下载地址:http://www.cygwin.com/,安装cygwin时选择所需库:
点击Devel的Default,使其变成Install
点击Shell的Default,使其变成Install
2、Search是可以输入你要下载的包的名称,能够快速筛选出你要下载的包。那四个单选按钮是选择下边树的样式,默认就行,不用动。View默认是Category,建议改成full显示全部包再查,省的一些包
被隐藏掉。左下角那个复选框是是否隐藏过期包,默认打钩,不用管它就行,下边开始下载我们要安装的包吧,为了避免全部下载,这里列出了后面开发NDK用得着的包:autoconf2.1、automake1.10、
binutils、gcc-core、gcc-g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12个包。不要问为什么,照做吧。
3、下面测试一下cygwin是不是已经安装好了。
运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令,会打印出当前cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。
然后依次输入gcc –version,g++ --version,make –version,gdb –version进行测试,如果都打印出版本信息和一些描述信息,非常高兴的告诉你,
你的cygwin安装完成了!
4、配置NDK环境变量
4-1、 首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件(新版本cygwin在C:\cygwin64\etc\skel),
(本人安装的时候home文件夹下面神马都没有,解决的办法:首先打开环境变量,把里面的用户变量中的HOME(C:\Users\admin)变量删掉,在C:\cygwin64\home文件夹下建立名为admin的
文件夹(是用户名),然后把C:\cygwin64\etc\skel\.bash_profile拷贝到该文件夹下)。
4-2、 打开bash_profile文件,添加NDK=/cygdrive/<ndk-build文件的目录> 例如:
NDK=/cygdrive/d/android-ndk-r11c/build
export NDK
NDK这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存
4-3、打开cygwin,输入cd $NDK,如果切换到NDK路径,则表明环境变量设置成功了。
5、使用Javah命令生成JNI头文件
5-1、在MainActivity中声明Native方法:
public native int add (int a, int b);
public native int sub (int a, int b);
5-2、打开命令行cmd,切换至工程的src目录,输入如下命令:
javah -d ../jni com.testjni.MainActivity【指定类名】
java的命令我也不熟,这个命令的含义这里简单解释下:
其中 -d:建立一个目录;
其中../jni :在上级目录的jni文件下生成头文件;
原理:.java文件也不用编译可以直接生成.h文件;
之后工程下会有的jni目录,里面就是生成的头文件。
6、配置Android.mk
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=test-jni
LOCAL_SRC_FILES := test-jni.c
include $(BUILD_SHARED_LIBRARY)
7、用NDK来编译程序
7-1、现在我们用安装好的NDK来编译一个简单的程序吧,我们选择ndk自带的例子hello-jni,我的位于E:\android-ndk-r5\samples\hello-jni(根据你具体的安装位置而定),
7-2、运行cygwin,输入命令cd /cygdrive/e/android-ndk-r5/samples/hello-jni,进入到E:\android-ndk-r5\samples\hello-jni目录。
7-3、输入$NDK/ndk-build APP_ABI="armeabi armeabi-v7a x86 x86_64 arm64-v8a mips",执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。($NDK是调用我们之前配置好的环
境变量,ndk-build是调用ndk的编译程序)
7-4、此时去hello-jni的libs目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!
8、调用.so文件
public native int add (int a, int b);
public native int sub (int a, int b);
static {
System.loadLibrary("test-jni");
}
android jni开发
于 2016-04-21 09:58:15 首次发布