AndroidNDK开发,没有你想象的那么难_第1页
AndroidNDK开发,没有你想象的那么难_第2页
AndroidNDK开发,没有你想象的那么难_第3页
AndroidNDK开发,没有你想象的那么难_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android NDK 开发,没有你想象的那么难DK : Native Development Kit 原生开发工具NDK 能干什么: NDK 使得在 android 中, java 可以调用 C 函数库。为什么要用 NDK :我们都知道, java 是半解释型语言, 很容 易被反汇编后拿到源代码文件,在开发一些重要协议时,我 们为了安全起见,使用 C 语言来编写这些重要的部分,来增 大系统的安全性。还有,在一些接近硬件环境下,相信大家 都清楚 C 与 java 的优劣。顺带提一下: NDK 并不能显著提 升应用效率。why ?我们都觉得C语言比起java来说效率要 高出很多,一方面,随着 j

2、dk 的不断更新, java 的效率也随 之提高;另一方面,即便使用 C 语言编码提高了应用效率, 但是在 java 与 C 相互调用时平白又增大了开销。 对于这些问题,这里就不多说了,希望详细了解的,请各位 自行搜索。NDK 开发,第一步,当然是搭建环境首先,去 下载你对应平台的开发工具接着,我们需要实现 linux 环境 下载 cygwin (对于 64 位的用户, 可以直接下载 我已经下载好的,百度的链接应该比在线安装快一些,正在上传到我的网盘,稍后将地址放在回复里面)是国内的)选择在线下载的朋友,建议选择下图的地址, 选择好下载源以后就是选择下载目录了。我们用鼠标点开组 件列表中的“

3、Devel ”分支,在该分支下,有很多组件, 我们必须的是: binutils ,gcc, gcc-mingw ,gdb 选好这四个目录了以后,就是漫长的等待了,可以去吃顿饭差不多了下面该配环境变量了:NDK 环境变量需要将 NDK 根目录(其实就是 ndk-builder.cmd 文件的目录)加入系统环境变量cygwin 环境变量需要将 bin 目录加入系统环境变量 例如我的路径是: C:javaandroid-ndk-r7b 和 C:javacygwinbin 这两个 配置好环境后就可以开始编码了1、新建一个 android 工程2、在工程目录下添加名为 jni 的文件夹(必须)3、在 j

4、ni 文件夹下新建你的 .c 文件(我的叫 Hello.c )4、在 jni 文件夹下新建名字为 Android.mk 文件.mk 文件中加入/当前路径(如果你了解 include $(CLEAR_V ARS) /要生成的 .so 库名/你的.c文件名字LOCAL_PATH := $(call my-dir) shell 语言,应该可以很轻松的理解) LOCAL_MODULE := Hello LOCAL_SRC_FILES := Hello.cinclude $(BUILD_SHARED_LIBRARY)现在可以开始写我们的 C 代码了,当然这里不能再去从 main 函数开始写,而是有固定的

5、命名方式如图,我的函数名为:Java_com_example_testndk_MainActivity_helloWorldFromC(Java_包名类名_函数名)呵呵,写 C 的朋友可能要抱怨了,我什么时候写过这么长的函数名了。没办法,这是jni的规范,以Java_开头,后跟java应用的包名加上类名,都是以下划线分割,最后才是跟我们的 C 函数名至于参数形式以及返回值类型,我们可以去 jdk 目录下翻阅jni.h 文件(我的 jni 文件目录:C:javajdk170_25includejni ), 有很多函数模板(不同于C+模板)由于源码太多大家自己去查看吧,我就不贴图了在jni.h文件

6、的第104行这里可以看到我们返回的jstring本质上就是一个结构体指针, 从 C 代码里面可以看到就是一个指 向字符串的指针,在 java 里也就是一个数组。好了, C 代码讲解完毕,回到我们 android 工程。从刚才的 C 代码函数名, 大家应该就可以知道我的 java 类名 了(这是必须的,因为要一一对应嘛)需要注意的是图中红色方框中的静态代码块 学过 java 大家都知道,一个 类在初始化的时候最先执行的 不是构造方法而是静态代码块,没错也就是这里之所以把 System.loadLibrary() 放到静态代码块的原因。从名字我们就 可以猜到了,加载库( “Hello ”) 还记得

7、我们在 Android.mk 中声明的那个 Hello 吗, 就是那里 的名字紧接着,看到第12行代码,回忆java知识了,用native修 饰的方法,表示 java 的本地方法,也就是我们的 C 函数了。 (其实这样的函数在 android SDK )中并不少见,比如我们 常用到的多媒体类 MediaPlayer ,大家可以去看看源码, 这里 我就不发了,里面有很多native方法,因为要调用音 频驱动 嘛。至此, NDK 工程就结束了, 来测试一下吧。 首先编译我们的C代码。打开cmd,切换到工程目录下(工程目录?右键工 程名,properties,如上图)输 入ndk-builder (当时的环境变 量设置成功了吗?去看看安卓工程的 libs 文件夹里面是不是 多出来了个 libHello.so 文件) 然后我们再运行我们的安卓工程吧。最后,我再说一点自己的看法吧,首先就是 C 语言的基础, 结构体指针一定要掌握的好, 好好看看 jni.h 文件给出了哪些 函数,其中还有支持 C与java交互的函数,要想用好NDK , 先用好 JNI【编辑推荐】构建iOS风格移动Web应用程序的8款开发框架让你明白, Android 常用组件四大天王Android 开源项目第一篇:个性化控件 (View

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论