美文网首页
JNI学习笔记(二)——windows下的环境搭建+helloW

JNI学习笔记(二)——windows下的环境搭建+helloW

作者: 熊雅慧 | 来源:发表于2016-10-18 12:37 被阅读0次

环境配置

1、一个概念:java调用C的代码并不是直接调用C的源代码,它是调用由C编译链接生成的二进制文件。

那么生成可执行二进制文件需要用到的工具有哪些:

  • cygwin ,在windows平台下模拟成Linux的开发环境。(有插件组成的)
  • Linux环境编辑的插件
  • NDK(Native Develop Kit) ndk-build 交叉编译
  • cdt安装包

2、cygwin安装

  • 1、如果插件下载到本地就选第三个,如果没有就选第一个在线安装(可能还需要翻墙)。
Paste_Image.png
  • 2、选择安装路径(避免空格和中文)和可以使用的用户


    Paste_Image.png
  • 3、选择插件的路径(路径要选择到release文件夹的上级目录)


    Paste_Image.png
  • 4、选择编译插件,点击Devel,后面出现install,点击确定,执行下一步
Paste_Image.png
  • 5、打开cygwin根目录下面的.bat文件,进行初始化的操作,输入make -v,如果出现下图,表示编译环境搭建完成。
Paste_Image.png

3、配置ndk 环境边境

  • 1、在cygwin的.bat文件中,cd /cygdrive/。。。(。。。处为ndk的具体路径),-->ls 确认显示的文件名是否与ndk-build文件下的目录一样。复制路径(cd /cygdrive/。。。)
  • 2、打开cygwin根目录下etc/profile文件,添加路径,在path值的最后面(最后半个引号前面加分号,加刚才复制的路径,保存)
  • 3、在cygwin的.bat中,退到根目录,输入ndk-build,出现下图表示配置完成。
Paste_Image.png

4、为eclipse安装c/c++开发插件

  • 1、eclipse help-->install new softwore-->add-->cdt路径选择-->next
  • 2、到此,开发环境就搭建完成了。

JAVA调用C语言输出HelloWorld

  • 1、新建一个android项目NDK_HelloWorld
  • 2、编辑布局文件,添加一个button.
  • 3、在activity里面添加按钮的点击事件。
  • 4、声明一个native方法, public native String helloFromJNI();//本地方法,由c实现
  • 5、在项目的根目录下新建一个jni目录(名字是固定的)//关于c的代码放在该文件夹
  • 6、在jni文件夹下新建一个Hello.c文件。
//导入相关的类库
include<stdio.h>
include<jni.h>
jstring JAVA_包名_类名_方法名(JNIEnv* env,jobject obj){
//包名,类名中的"."改成成_“”
char * cstr="hello from jni";//c中的字符串
return (**env).NewStringUTF(env,cstr);//返回一个java的字符串
}
  • 7、新建一个Android.mk文件,用来告诉交叉编译器如何编译的。
//指定Android.mk文件的路径 
LOCAL_PATH := $(call my-dir)
call my-dir 得到当前所处位置的文件夹的绝对目录

初始化参数
include $(CLEAR_VARS)
CLEAR_VARS  清空参数信息

指定 交叉编译后 生成的2进制文件的名称
LOCAL_MODULE    := Hello

指定  都有C源代码 参与 交叉编译的操作
LOCAL_SRC_FILES := hello.c xx.c xx1.c xx2.c#asaaaaaa(注释方式#)

指定 交叉编译后 生成的2进制文件的类型
include $(BUILD_SHARED_LIBRARY)
BUILD_SHARED_LIBRARY  动态链接库
BUILD_STATIC_LIBRARY  静态链接库


动态链接库 和  静态链接库 区别
    后缀名 文件大小
动态  .so 小       windows .dll文件  xx.dll  Windows\System32  dll之家

静态  .a  大

  • 8、交叉编译.c文件
    • 1、在.bat文件中 cd /cygdrive/.....(项目下的jni路径)
    • 2、输入ndk-build,显示下图,表示生成动态链接库成功。
Paste_Image.png
  • 9、在java代码中加载库文件,进行调用。
static{
System.loadLibrary("Hello");
}
public void click(View view){
Toast.makeText(this,helloFromJNI(),o).show();
}
  • 9、运行项目,点击按钮,弹出 hello from jni。

用javah生成头文件

上面的步骤中.c文件里面的头文件是自己手动输入的,既麻烦又容易出错。我们可以用javah生成。

  • 1、在activity里面声明好native方法以后,打开dos命名行,cd到指定路径(jdk 1.6 到项目的bin/classes jdk 1.7 到项目的src文件夹下)
  • 2、输入javah 包名.类名
  • 3、刷新项目,到对应路径下查看是否有新生成的.h文件
  • 4、将.h文件剪切到jni文件夹下
  • 5、导包的时候# include “.h文件名”;(include 不在同一个文件夹下用<>,在同一个文件夹下用“”)
  • 6、将.h中的方法复制过来,补充方法体。内容不在赘述(注意参数补充完整)

相关文章

网友评论

      本文标题:JNI学习笔记(二)——windows下的环境搭建+helloW

      本文链接:https://www.haomeiwen.com/subject/oqzzyttx.html