第7章-Android-NDK-《Android程序设计教程》ppt课件

上传人:202****8-1 文档编号:243916466 上传时间:2024-10-01 格式:PPT 页数:46 大小:1.14MB
返回 下载 相关 举报
第7章-Android-NDK-《Android程序设计教程》ppt课件_第1页
第1页 / 共46页
第7章-Android-NDK-《Android程序设计教程》ppt课件_第2页
第2页 / 共46页
第7章-Android-NDK-《Android程序设计教程》ppt课件_第3页
第3页 / 共46页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,七,章,Android NDK,1,主要内容,7.1 Android NDK,简介,7.2,构建,NDK,系统,7.3 NDK,开发过程详解,2,Android NDK,是在,SDK,前面又加上了“原生”二字,即,Native Development Kit,,因此又被,Google,称为“,NDK”,。,Android NDK,是,Android SDK,的伴随工具,可以让用户用诸如,C/C+,原生编程语言开发,Android,应用程序。,原生,SDK,的公布可以让开发者更加直接的接触,Android,系统资源,并极大地提高了,Android,应用程序开发的灵活性。,Android NDK,需要安装全部,Android SDK1.5,或以上版本,到目前为止,Android NDK,已经修订了,9,版本。,Android NDK,集成了交叉编译器,支持,ARM,、,x86,及,MIPS,处理器指令集、,JNI,接口和一些稳定的库文件。,7.1 Android NDK,简介,3,Android NDK,的构建系统是基于,GNU Make,的,提供了头文件、库和交叉编译器工具链,可以在,Microsoft Windows,、,Apple Mac OS X,和,Linux,三种操作系统平台上运行。,在安装前要确保已经最新版的,Android SDK,和升级应用程序和环境。,本书仅介绍,Microsoft Windows,系统的,NDK,系统构建,请按照下列步骤操作:,7.2.1 Android NDK,开发环境构建,6,第一步,在安装完成,SDK,工具后,下载并安装,Cygwin,。,安装完成后,要把,Cygwin,二进制路径添加到系统可执行搜索路径中。操作如下:,在“系统属性”界面打开环境变量对话框;,在系统变量部分单击,New,按钮定义一个新的环境变量,将变量名设置成,CYGWIN_HOME,,将变量值设置成前面记下的,Cygwin,安装目录;,单击,OK,按键保存新环境变量;,在环境变量对话框中的系统变量列表中,双击,PATH,变量,并将,;%CYGWIN_HOME%bin,追加到变量值后面,。,7.2.1 Android NDK,开发环境构建,7,第二步,下载最新版,Android NDK,开发包,目前本书编写时,最新版本是,R9,,请根据需要到,Google,的官方网站下载,Android NDK,。,http:/ NDK,的二进制路径加到系统可执行搜索路径中,具体方法同上。,第三步是配置,Cygwin,的,NDK,开发环境。修改在用户目录下的,.bash_profile,文件,在该文件的末尾处添加如下代码:,ANDROID_NDK_ROOT=/cygdrive/d/android/android-nkd-r9d,Export ANDROID_NDK_ROOT,上述代码说明,Android NDK,安装的目录,即,d,盘的,android/android-nkd-r9d,目录下。,7.2.1 Android NDK,开发环境构建,8,7.2.1 Android NDK,开发环境构建,所有的,Android NDK组件都被安装在目标目录下,下面介绍一些重要文件和子目录。,ndk-build:该shell脚本是Android NDK构建系统的起始点,。,ndk-gdb:该shell脚本允许用GNU调试器调试原生组件。,ndk-stack:该shell脚本可以帮助分析原生组件崩溃时的堆栈追踪。,build:该目录包含可Android NDK构建系统的所有模块。,platforms:该目录包含了支持不同Android目标版本的头文件和库文件。Android NDK构建系统会根据具体的Android版本自动引用这些文档。,9,7.2.1 Android NDK,开发环境构建,samples:该目录包含了一些示例应用程序,这些程序可以体现Android NDK的性能。示例项目对于学习使用Android NDK的特性很有帮助。,sources:该目录包含了可供开发人员导入到现有的Android NDK项目的一些共享模块。,toolchains:该目录包含目前Android NDK支持的不同目标机体系结构的交叉编译器。Android NDK目前支持ARM、X86和MIPS体系结构。Android NDK构建系统根据选定的体系结构使用不同的交叉编译器。,10,最后测试开发环境是否可以正常工作,首先双击,Cygwin,图标,出现,Cygwin,后运行,ndk-build,出现如图所示的运行结果,说明,Android NDK,的开发环境已经可以正常工作了。,7.2.1 Android NDK,开发环境构建,11,7.2.2,解析,hello-jni,例程,首先使用,import,向,Eclipse,中导入工程,本机目录为,F:android-ndk-r9dsampleshello-jni,。,导入工程之后我们会在项目目录下发现两个比较重要的文件一个是,src/com.example.hellojni/HelloJni.java,文件,一个是,jni/hello-jni.c,文件。,hello-jni.c,文件定义了输出字符串,Hello from JNI!Compiled with ABI ABI.,的方法,而,HelloJni.java,文件则通过调用上述,hello.c,的动态链接库来获取输出的字符串,并显示到模拟器上。,12,其中,c,文件内容如下,:,10 Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv*env,jobjectthiz),11 ,12#if defined(_arm_),13#if defined(_ARM_ARCH_7A_),14#if defined(_ARM_NEON_),15#define ABI armeabi-v7a/NEON“,16#else,17#define ABI armeabi-v7a,18#endif,19#else,20#define ABI armeabi,21#endif,22#elifdefined(_i386_),23#define ABI x86,24#elifdefined(_mips_),25#define ABI mips,26#else,27#define ABI unknown,28#endif,29 return(*env)-NewStringUTF(env,“Hello from JNI!Compiled with ABI”ABI,“.”);,这里主要的是定义了输出字符串,Hello from JNI!Compiled with ABI ABI.,的方法,13,7.2.2,解析,hello-jni,例程,其中,java,文件内容如下,:,5 public class HelloJni extends Activity,6 public void onCreate(Bundle savedInstanceState),7 super.onCreate(savedInstanceState);,8 TextViewtv=new TextView(this);,9 tv.setText(stringFromJNI();,10 setContentView(tv);,11 public native String stringFromJNI();,12 public native String unimplementedStringFromJNI();,13 static,14 System.loadLibrary(hello-jni);,15 ,16 ,通过调用上述,hello.c,的动态链接库来获取输出的字符串,并显示到模拟器上。,14,7.2.2,解析,hello-jni,例程,接着启动,Cygwin,命令行输入,cd f:/android-ndk-r9d/samples/hello-jni,进入到,NDK,主目录,然后编译,C,代码,其命令如下:,././ndk-build,,在,Cygwin,中显示如图所示。,15,7.2.2,解析,hello-jni,例程,此时表明已生成所需的动态链接库,接下来我们要对其进行加载。,在,Eclipse,的,Project Explorer,视图中右击,HelloJni,,依次选择,Android tools,、,Add Native Support,在弹出的对话框中显示信息如图所示。由于该项目已经包含了一个原生项目,所以库名可以保持不变,点击,finish,即可完成加载。,在,Android,模拟器上运行该项目,其运行效果如下:,16,7.3 NDK,开发过程详解,7.3.1,中间件概念,7.3.2 Android,系统的中间件,7.3.3,使用,C/C+,实现本地方法,7.3.4,依赖关系建立,7.3.5 NDK,程序的链接与运行,17,7.3 NDK,开发过程详解,Android NDK构建系统所提供的不同功能,例如,建立一个共享库,建立多种共享库,建立静态库,利用共享库通用模块,在多种NDK项目间共享模块,使用预建库,建立独立的可执行文件,其他构建系统变量和宏,定义新变量和条件操作,18,在进行,NDK,开发时,一般需要同时建立,Android,工程和,C/C+,工程,然后使用,NDK,编译,C/C+,工程,形成可以被调用的共享库,最后共享库文件会被拷贝到,Android,工程中,并被打包到,apk,文件中。其开发过程可分为以下几步:,设计,JNI,接口,用,C/C+,实现本地的方法,编译文件的实现,生成动态连接库。,7.3 NDK,开发过程详解,19,中间件(,Middleware,)是处于操作系统和应用程序之间的软件,它包括一组服务,以便于运行在一台或多台机器上的多个软件通过网络进行交互。,该架构通常用于支持分布式应用程序并简化其复杂度,它包括,web,服务器、事务监控器和消息队列软件。,中间件能够屏蔽操作系统和网络协议的差异,为应用程序提供多种通讯机制;并提供相应的平台以满足不同领域的需要。,中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。,7.3.1,中间件概念,20,中间件是操作系统与应用程序的沟通桥梁,并分为两层:函数层(,Library,)和虚拟机(,Virtual Machine,)。应用程序用,Java,语言开发,操作系统代码则是,C,代码,它们之间的通信需要用,JNI,来实现。,JNI,一般有以下一些应用场景:,高性能,在一些情况下因为处理运算量非常大,为了获取高性能,直接使用,java,是不能胜任的,如:一些图形的处理;,调用一些硬件的驱动或者一些软件的驱动,比如调用一些外部系统接口的驱动,如:读卡器的驱动,,OCI,驱动;,需要使用大内存,远远超过,VM,所能分配的内存,如:进程内,Cache,;,调用,C,或者操作系统提供的服务,如:,java,调用搜索服务,搜索是由,C/C+,实现的。,7.3.2 Android,系统的中间件,21,通常,JNI,的使用自上至下有,4,层,本地库,,JNI,库,声明本地接口的,Java,类,,Java,调用者,,JNI,在,Android,层次结构中的作用如图所示。,7.3.2 Android,系统的中间件,22,实现,JNI,需要在,C+,代码中实现,JNI,的各种方法,并注册到系统中,另外还要在,Java,源代码中声明。,例,7-2,实例实现
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!