Android Eclipse配置NDK开发

前期准备

1.下载NDK开发需要的工具包:https://developer.android.com/ndk/downloads/index.html,我使用的是r9d的开发包

2.配置ndk环境变量(后面要使用ndk-build命令,编译项目)


编译ndk目录下的demo项目

首先我们来看下ndk下载下来后自带的demo来运行一次,ndk下载下来后,解压,目录下有个sample目录,在Eclipse中导入hello-jni这个项目

打开cmd命令窗口,进入Eclipse工作空间中的hello-jni项目目录下(如果在导入Eclipse的时候,没有勾选复制到工作区空间,就要进入ndk下,反正就是进入hello-jni目录下),然后执行ndk-build命令(这就是前面说的先配置好ndk的环境变量,没配置的话,进入ndk解压目录在路径栏直接cmd然后回车)

OK,现在刷新一下Eclipse中的helloJni项目,你就能看到多了一个obj文件夹,下面就是so文件,然后就可以运行了,运行后的截图:


新建NDK项目

主要步骤:

     1.在Java文件中编写JavaNative代码

     2.使用javah命令根据native方法生成头文件

     3.新建.c文件实现头文件

     4.新建Android.mk文件

     5.加载动态链接库



一:在Java文件中编写JavaNative代码

新建项目,在MainActivity中写上一句native代码

二:使用javah命令根据native方法生成头文件

在项目上右键-->新建文件夹名字为jni,打开cmd,进入项目所在目录(我的目录E:\eclipse4.5workspace\NDKProject),执行javah命令,可以先看下javah命令的一些参数:


OK,然后我们输入:javah -classpth bin/classes -d jni com.lhq.ndkproject.MainActivity,我们来解释下这句命令:

使用javah命令,指定你要加载的类的文件目录(-classpath),然后指定头文件文件输出目录(-d jni,指定到jni目录,因为我们前面新建了jni的文件夹,不新建也行,它会自动创建,在你执行javah命令的目录下),然后加上JavaNative代码所在类的完整类名(包名+类名,所以,上面的classpath的参数注意了,输入到你要生成的头文件的源文件所在的目录,不然会找不到),然后回车

但是出错了,说找不到activity,因为我们这个native方法是写在MainActivity里面的,但是MainActivity是继承了Activity的,它找不到Activity这个类(如果native方法是写在一个单独Java文件中,不会出这个错),我们更改下命令在bin/classes目录后加一个分号,然后去把Activity加进来,那怎么加进来呢?,去你的sdk目录下的platforms中随便找一个版本的然后进去,比如我进入的是android-21,然后目录下有个android.jar文件,我们要的就是它,复制下文件路径,在刚才命令classes的分号后面粘贴(如果是单独的Java文件就不需要这样),然后执行命令


再进入Eclipse刷新一下,在jni目录下多了一个.h的头文件

三:新建.c文件实现头文件

现在我们要实现这个头文件,新建一个.c为后缀的文件,随便叫啥,我取个hello.c

hello.c文件现在是空的,我们来实现它,在hello.c中需要新引入c的一些库的头文件:stdio,stdlib,当然还有自己的com_lhq_ndkproject_MainActivity.h头文件

然后到.h文件中找到我们开始在MainActivity中写的那个native方法所对应的头文件中的方法,到.h中找到这个方法,然后复制到刚修改过的.c文件中,做好相应修改保存

四:新建Android.mk文件

现在已经实现了头文件,接下来我们到ndk中的demo,就是我们前面运行的那个demo中,复制Android.mk这个文件到我们自己项目的jni目录下,并做相应修改:LOCAL_MODULE为编译后的so库名字(这个你想叫什么都行),LOCAL_SRC_FILES为你要编译的这个文件的路径

现在我们打开cmd命令窗口,进入当前项目目录下执行ndk-build命令,然后Eclipse中刷新项目,会发现多了一个obj文件夹,里面有我们刚编译的so动态链接库

五:加载动态链接库

编译好的so文件会在前面加上lib前缀,但是我们在加载的时候不需要写,直接写Android.mk中指定的文件名就行了


运行成功!!!

配置自动编译

到目前为止,我们的ndk项目就能正常运行了,但是,我们每改一次c代码都要手动的用ndk-build编译,那我们来配置下自动编译:

在项目上右击,然后选择properties,然后在弹出窗口中选择Builders,再点击new


然后选择Program点击ok

然后点击Browse File System

选择ndk目录下的ndk-build.cmd文件


OK,再配置下Working Direcroty,点击Browse Workspace选择自己的项目


OK,然后点击Build Optionsg勾选During auto builds然后点击OK,到此为止,项目就不用每次都手动ndk-build了

****************************************如果转载请注明出处***********************************************

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

推荐阅读更多精彩内容