




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android程序开发后续方案设计一Android介绍Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Android因为开放性的特点而受到开发软件者的大力支持,它的开发是基于Eclipse平台,借助于面向对象的JAVA语言进行程序开发的。2 JAVA语言与C语言的对比 JAVA主要采用纯面向对象的思想,而C是面向过程的; JAVA和C都是可以跨平台的,C基于编译技术,JAVA基于虚拟机,两个语言跨平台的机制不同; JAVA对于语言做了很多精简,比如去除了基本数据类型的指针,去除了函数指针,去除了对象(复合数据类型)的传值。但也正是这样,他的很多解决方案就不如C语言直观了; JAVA虽然是精简化的,但是由于删除指针和函数的原因,其实比C还要复杂;但是从framework的角度说,JAVA就比C强很多了,JAVA由于限制多,导致问题和陷阱也少。3 Android程序后续开发(1) 基于JAVA语言的程序编写基于JAVA语言的特点和Android开发的要求以及目前程序的开发进度,整个界面的布局形式均采用JAVA代码进行编写,包括:界面的展示方式、界面中文本是否隐藏和不可编辑、单位换算、界面的跳转、数据的保存和传输等都使用JAVA语言来进行程序的编写和功能的实现,具体如下:1. 界面的展示方式: 横屏和竖屏的切换; 新工程案例的保存和删除; 通过按钮或者手指移动来对界面进行缩放和跳转; 下来菜单的格式; 功能按钮的动态生成; 各个按钮的功能的实现; 以趋势图的形式反映计算结果; 界面底色及文字大小颜色。2. 界面中文本是否隐藏和不可编辑,此部分主要包括根据计算需要进行表格中某一行的隐藏和是否可编辑的设置;3. 单位换算: 直接转换,例如从m到km; 需要借助于密度进行转换,例如从kg/s到m3/s; 需要借助于转换函数,例如摄氏温度和绝对温度T的转换需要借助 于转换函数T=t+273.15。4. 数据的保存和传输。 (二)从JAVA中调用C函数NDK是Google公司推出的帮助Android开发者通过C/C+本地语言编写应用的开发包,包含了C/C+的头文件、库文件、说明文档和示例代码。NDK的全称是:Native Development Kit。Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C+之类的原生代码语言执行部分程序,它有以下特点: NDK提供了一系列的工具,帮助开发者快速开发C(或C+)的动态库,并能自动将so和JAVA应用一起打包成apk。这些工具对开发者的帮助是巨大的 NDK集成了交叉编译器,并提供了相应的mk文件隔离平台、CPU、API等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so NDK可以自动地将so和JAVA应用一起打包,极大地减轻了开发人员的打包工作 由于C是编译型的,直接将源码编译成机器代码,而JAVA是解释型,源码被编译成二进制伪代码,由JAVA虚拟机解释执行,C的执行效率明显要比JAVA高。因此借助于Eclipse平台调用本地C语言函数,使得后续开发人员只需掌握JAVA语言的编程机理和基本的语法结构而不必继续深化JAVA语言的学习,加上C语言强大的掌握群体,在完成平台的搭建后便可快速提高程序编写速度,最终按时完成整个项目。但是,要想顺利调用C语言函数,必须先进行调用平台的搭建,包括Cygwin安装和NDK的安装及路径配置,以下是平台搭建过程中遇到问题的解决方法及成功调用本地C语言函数的几个步骤:1. JNI基本知识介绍 JNI是JAVA Native Interface的缩写,中文为JAVA本地调用。JAVA Native Interface(JNI)标准成为JAVA平台的一部分,它允许JAVA代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C+而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了,如果你想将一个方法做为一个本地方法的话,那么你就必须声明该方法为native的。在使用JNI时应该注意以下的问题:1) JNI接口函数命名如下:Java_包名_类名_方法名。2) JNI使用的基本要点: JNIEnv:env指针是一个包含了JVM接口的结构,它包含了与JVM进行交互以及与Java对象协同工作所必需的函数 ; jobject:指向在此JAVA代码实例化的JAVA对象LocalFunction的一个句柄,相当于this指针(如果是static则传进来的是jclass) ; jclass:在JNI中表示的JAVA类; jmethodID:在JNI中表示的JAVA类中的方法; jfieldID:在JNI中的JAVA类中的域(属性、字段)3) 由于C和C+本身存在差异性,JNI在调用本地C库函数时,所有的env-都要被替换成(*env)-,而且后面的函数中需要增加一个参数env,例如(*env)-GetStringUTFChars()是用来在JAVA和C之间转换字符串的,对于C和C+他有不同的调用形式: C代码: (*env)-GetStringUTFChars(env,string,0); C+代码: env-GetStringUTFChars(string,0);4) 在JNI函数中访问JAVA类中的对象实例域,由于JNI函数的实现部分是在C语言中实现的,如果想访问JAVA中定义的类对象的实例域需经过三步: 调用GetObjectClass()得到该对象的类,该函数返回一个jclass类型值 调用GetFieldID()得到要访问的实例域在该类中的id 调用GetXXXField()得到要访问的实例域的值,其中XXX和要访问的实例域的类型相对应 5) 在JNI中JAVA编程语言和C语言数据类型的对应关系为JAVA原始数据类型前加j表示对应C语言的数据类型,例如boolean为jboolean,int为jint,double为jdouble等。对象类型的对应类型为jobject。6) C/C+数据类型与JNI本地类型之间的转化过程,这个过程某些数据的转换需要使用JNIEnv对象的一系列方法来完成 ,以下是我们经常会用到的字符串类型处理的函数: 建立字串 jstring NewString(JNIEnv*,const jchar *,jsize) 获得字串长度jsize GetStringLength (JNIEnv*,jstring ) 得到java类中的参数ID GetFieldID(jclass clazz, const char *name, const char *sig)第一参数是Java 类对象。第二个参数是参数(或方法名),第三个参数是该参数(或方法)的签名 获得字串 const jchar* GetStringChars (JNIEnv*,jstring ,jboolean*) 释放字串 void ReleaseStringChars(JNIEnv*,jstring,const jchar* ) 获得UTF字串 const char* GetStringUTFChars (JNIEnv*,jstring ,jboolean*) 释放UTF字串 void ReleaseStringUTFChars(JNIEnv*,jstring,const jchar* ) 建立UTF字串 jstring NewStringUTF(JNIEnv*,const char *utf) 获得UTF字串长度 jsize GetStringUTFLength (JNIEnv*,jstring ) 对于上述类型数组,有一组函数与之对应,以下函数中Xxx为对应类型。xxx* GetXxxArrayElements(xxxArray array, jboolean *isCopy)产生一个指向Java数组元素的C指针。不再需要时,需将此指针传给ReleaseXxxArrayElements参数:array 数组对象,isCopy 如果进行拷贝,指向以JNI_TRUE填充的jboolean,否则指向以JNI_FALSE填充的jboolean。 例如:jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) void ReleaseXxxArrayElements(xxxArray array,xxx *elems, jint mode)通知虚拟机不再需要从GetXxxArrayElements得到的指针。 参数:array 数组对象,elems 不再需要的指向数组元素的指针 mode 0在更新数组元素后释放elems缓冲器 JNI_COMMIT在更新数组元素后不释放elems缓冲器 JNI_ABORT不更新数组元素释放elems缓冲器 例如:void ReleaseBooleanArrayElements(jbooleanArray array,jboolean *elems, jint mode) xxxArray NewXxxArray(jsize len)产生一个新的数组,通常在反值类型为数组型时用到。2. Cygwin安装及路径配置 进入google搜索界面输入Cygwin回车,按照提示进行安装地址的下载,保证下载文件是最新版本; 双击安装图标进行Cygwin的安装,由于Cygwin安装需要的插件比较多,建议选择安装文件时选择“All install”,然后就是等待安装下载; 安装Cygwin时一定记住在线安装时的地址,以便后期出问题时只需Reinstall即可,在就是记住所安装的路径; 如果安装时生成的快捷方式不能用,可以打开安装文件将Cygwin.bat发送桌面快捷方式即可; 对于生成文件中没有home文件的问题,可以打开Cygwin,输入代码命令pwd便会在安装文件的home文件里面生成需要的bsah等文件; 如果在Cygwin中运行出现如下图的问题:即make v,g+ -v,gdb v不能正常运行的情况,可重新打开Cygwin安装文件进行重新安装只需要在下图中输入你不能正常运行的指令即可,但是要保证所用到的下载地址和刚开始的地址一致,下载的目录和以前一致;3. NDK安装及路径配置: 在google直接连接http://search/index.html#q=Cygwin进行适用于你电脑的android-ndk版本下载,并进解压即可; 启动Cygwin,输入cd $NDK(此处NDK为home文件中file最后添加ndk路径时的名字),如果成功便会出现ndk的安装路径。否则,使用EditPlus对根目录文件进行文件格式的修改,转换为unix,重新打开Cygwin在一次输入cd $NDK;如下图: JNI文件需要自己创建,里面的Android.mk文件可以复制已有的文件,但需要修改里面的LOCAL_MODULE:= native LOCAL_SRC_FILES := native.c,其中native为所要调用的本地函数名。修改JNI文件里面的.c文件,注意函数命名格式为:JAVA_packagename_classname_methodname. 先输入cd $NDK,找到ndk的安装路径,然后通过命令指令cd找到所创建文件的具体位置,执行$NDK/ndk-build,便会在生成libs和obj两个文件文件,通过右击当前工程点击refresh,便会将生成的libs和obj展示在eclipse所对应的工程下面; 创建build编辑器,右键工程propertiesBuildersnew,配置路径见下图: 通过修改.c文件实现想要的功能,在进行本地函数的编写时需要注意函数命名格式及数据的传递方式,此时注意需要引入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人外汇政策培训大纲
- 辽宁省培训安全平台课件
- 工商银行2025玉树藏族自治州信息科技岗笔试题及答案
- 2025城市气候模型的预测精度
- 交通银行2025本溪市秋招半结构化面试题库及参考答案
- 交通银行2025金昌市信息科技岗笔试题及答案
- 农业银行2025孝感市秋招笔试性格测试题专练及答案
- 农业银行2025临沧市秋招英文面试题库及高分回答
- 中国银行2025杭州市信息科技岗笔试题及答案
- 建设银行2025宿州市秋招笔试创新题型专练及答案
- 护理人员同理心
- 肿瘤科常见药物及注意事项
- 2025-2030水务工程行业并购重组机会及投融资战略研究咨询报告
- 2025年呼伦贝尔农垦集团有限公司招聘笔试参考题库含答案解析
- 象棋入门教学课件
- 风雨操场调研报告
- 2025年重庆市中考数学试卷真题(含标准答案)
- 旋挖钻机地基承载力验算2017.7
- 机组资源管理(CRM)训练指南
- 建立隐患闭环管理制度
- T/CECS 10026-2019绿色建材评价建筑门窗及配件
评论
0/150
提交评论