android jni开发

来源:互联网 发布:牛群 冯巩 知乎 编辑:程序博客网 时间:2024/06/08 00:39
——————————————————————————————————————————————————————————————————————
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");    
}
0 0
原创粉丝点击