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

环境配置

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中的方法复制过来,补充方法体。内容不在赘述(注意参数补充完整)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容