好贷网好贷款

Android 开发 NDK从入门到精通

发布时间:2016-12-4 12:03:07 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Android 开发 NDK从入门到精通",主要涉及到Android 开发 NDK从入门到精通方面的内容,对于Android 开发 NDK从入门到精通感兴趣的同学可以参考一下。

http://blog.csdn.net/shulianghan/article/details/18964835 NDK详解 1. 交叉编译库文件 C代码执行 : C代码被编译成库文件之后, 才能执行, 库文件分为动态库 和静态库 两种; -- 动态库 : unix环境下.so 后缀的是动态库, windows环境下.dll 后缀的是动态库; 动态库可以依赖静态库加载一些可执行的C代码; -- 静态库 :.a 后缀是静态库的扩展名; 库文件来源 : C代码 进行 编译 链接操作之后, 才会生成库文件, 不同类型的CPU 操作系统 生成的库文件是不一样; -- CPU分类 : arm结构, 嵌入式设备处理器; x86结构, pc 服务器处理器; 不同的CPU指令集不同; -- 交叉编译 :windows x86编译出来的库文件可以在arm平台运行的代码; -- 交叉编译工具链 : Google提供的 NDK 就是交叉编译工具链, 可以在linux环境下编译出在arn平台下执行的二进制库文件; NDK作用 : 是Google提供了交叉编译工具链, 能够在linux平台编译出在arm平台下执行的二进制库文件; NDK版本介绍 : android-ndk-windows 是在windows系统中的cygwin使用的, android-ndk-linux 是在linux下使用的; 2. 部署NDK开发环境 (1) 下载Cygwin安装器 下载地址 : http://cygwin.com/setup-x86.exe , 这是下载器, 可以使用该下载器在线安装, 也可以将cygwin下载到本地之后, 在进行安装; 安装器使用 : Cygwin的下载, 在线安装, 卸载 等操作都有由该安装器进行; -- 本地文件安装 : 选择安装文件所在的目录, 然后选择所要安装的安装包; -- 在线安装 : 选择在线安装即可, 然后选择需要的安装包; -- 卸载 : windows上使用其它软件例如360, 控制面板中是无法卸载Cygwin的, 只能通过安装器来卸载; (2) 安装Cygin 双击安装器 setup-x86.exe 下一步 :  选择安装方式 :  -- 在线安装 : 直接下载, 然后安装; -- 下载安装文件 : 将安装文件下载下来, 可以随时安装, 注意安装文件也需要安装器来进行安装; -- 从本地文件安装 : 即使用下载的安装文件进行安装; 选择Cygwin安装位置 :  选择下载好安装文件位置 : 之前我下了一个完全版的Cygwin, 包括了所有的Cygwin组件, 全部加起来有5.23G, 下载速度很快, 使用网易的镜像, 基本可以全速下载; 选择需要安装Cygwin组件 : 这里我们只需要以下组件 : binutils , gcc , gcc-mingw , gdb , make , 不用下全部的组件; 之后点击下一步等待完成安装即可; . 安装完之后, 打开bash命令窗口, 可以设置下显示的字体, 使用 make -version 查看是否安装成功 :  (3) Cygwin目录介绍 以下是Cygwin安装目录的情况 : 该安装目录就是所模拟的linux 的根目录; 对应的linux目录 : 这两个目录进行对比发现, 两个目录是一样的, Cygwin的安装目录就是 linux根目录; cygdrive目录 : 该目录是Cygwin模拟出来的windows目录结构, 进入该目录后, 会发现windows的盘符目录, 通过该目录可以访问windows中的文件; (4) 下载NDK工具  从Google的Android开发者官网上下载该工具, 注意NDK工具分类 : 下载地址 -http://developer.android.com/tools/sdk/ndk/index.html -; -- windows版本NDK:android-ndk-r9c-windows-x86.zip (32位),android-ndk-r9c-windows-x86_64.zip (64位) 该版本是用在windows上的Cygwin下, 不能直接在windows上直接运行; -- linux版本NDK :android-ndk-r9c-linux-x86.tar.bz2(32位) , android-ndk-r9c-linux-x86_64.tar.bz2 (64位) , 该版本直接在linux下执行即可; 在这里下载windows版本的NDK, 运行在Cygwin上; (4) NDK环境介绍 NDK工具的文件结构 :  ndk-build脚本 : NDK build 脚本是 gun-make 的简单封装, gun-make 是编译C语言代码的工具, 该脚本执行的前提是linux环境下必须安装 make 程序; NDK安装在Cygwin中 : 将NDK压缩文件拷贝到Cygwin的根目录中, 解压 : android-ndk-r9c 目录就是NDK目录; 执行以下NDK目录下的 ndk-build 命令 : ./ndk-build ; 执行结果 : [plain] view plaincopy <span style="font-family: 'Courier New';">Android NDK: Could not find application project directory !   Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.   /android-ndk-r9c/build/core/build-local.mk:148: *** Android NDK: Aborting    。 停止。</span>   三. 开发第一个NDK程序 1. 开发NDK程序流程 a. 创建Android工程:  首选创建一个Android工程, 在这个工程中进行JNI开发; b. 声明native方法 :  注意方法名使用 native 修饰, 没有方法体 和 参数, eg : public native String helloFromJNI(); c. 创建C文件 :  在工程根目录下创建 jni 目录, 然后创建一个c语言源文件, 在文件中引入 include <jni.h> , C语言方法声明格式 jstring Java_shuliang.han.ndkhelloworld_MainActivity_helloFromJNI(JNIEnv *env) , jstring 是 Java语言中的String类型, 方法名格式为 : Java_完整包名类名_方法名(); -- JNIEnv参数 : 代表的是Java环境, 通过这个环境可以调用Java里面的方法; -- jobject参数 : 调用C语言方法的对象, thiz对象表示当前的对象, 即调用JNI方法所在的类; d. 编写Android.mk文件 :  如何写 查看文档, NDK根目录下有一个 documentation.html 文档, 点击该html文件就可以查看文档, 查看 Android.mk File 文档, 下面是该文档给出的 Android.mk示例 :  [plain] view plaincopy LOCAL_PATH := $(call my-dir)      include $(CLEAR_VARS)      LOCAL_MODULE    := hello-jni   LOCAL_SRC_FILES := hello-jni.c      include $(BUILD_SHARED_LIBRARY)   -- LOCAL_PATH : 代表mk文件所在的目录; -- include $(CLEAR_VARS) : 编译工具函数, 通过该函数可以进行一些初始化操作; -- LOCAL_MODULE : 编译后的 .so 后缀文件叫什么名字; -- LOCAL_SRC_FILES: 指定编译的源文件名称; -- include $(BUILD_SHARED_LIBRARY) : 告诉编译器需要生成动态库; e. NDK编译生成动态库 :  进入 cygdrive 找到windows目录下对应的文件, 编译完成之后, 会自动生成so文件并放在libs目录下, 之后就可以在Java中调用C语言方法了; f. Java中加载动态库 :  在Java类中的静态代码块中使用System.LoadLibrary()方法加载编译好的 .so 动态库; NDK平台版本 : NDK脚本随着 android-sdk 版本不同, 执行的脚本也是不同的, 不同平台会引用不同的头文件, 编译的时候一定注意 sdk 与 ndk 版本要一致; so文件在内存中位置 : apk文件安装到手机上之后, .so动态库文件存在在 data/安装目录/libs 目录下;

上一篇:block与堆栈的恩怨情仇
下一篇:网卡驱动4-做一个与外界交互的虚拟网卡3(调用真实网卡接收数据以及napi使用)

相关文章

相关评论