创新实践安卓软件开发报告.doc_第1页
创新实践安卓软件开发报告.doc_第2页
创新实践安卓软件开发报告.doc_第3页
创新实践安卓软件开发报告.doc_第4页
创新实践安卓软件开发报告.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

沈阳理工大学课程设计专用纸No18摘要从没有比现在更好的时机,能通过为Android编写程序,将我们的创意带人生活中。安卓App Store给了我们巨大的机会,程序的开发也从未像如今这样简单和广泛。你不仅能够拥有数百万的潜在客户还能拥有尖端的开发工具和硬件。2008年Google推出了一款名为Android的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。而很少受到早期手持设备的硬件和软件限制。本设计在对Android开发有初步了解的情况下,设计一个有代表性的Android商业App,通过对商业实例的学习,了解真实项目的系统构架、引擎设计,了解声音、视频、图片处理等相关的编程技术要点、以便在实际的游戏项目开发中借鉴和综合应用这些知识。关键字:Android;APP;目录1 开发工具与环境11.1 下载并安装eclipse11.2 下载并安装jdk11.3开发环境简介11.4开发环境搭建21.4.2安装Eclipse41.4.3 安装Android SDK41.4.4 ADT安装创建AVD42 系统的设计与分析52.1 Android系统的概述52.1.1应用层52.1.2应用程序框架52.1.3系统运行库62.1.4 Linux内核72.3 日历流程图73 系统详细设计83.1 日历其实是由3个预制的数据集组成83.2 视图的生成83.3当所示日期发生选择变更是的视图更新103.4 启动和运行134 运行结果144.1 系统启动144.2 进入日历144.4 退出应用155 结论16参考文献171 开发工具与环境1.1 下载并安装eclipseEclipse 版本有要求:The Eclipse Classic version is recommended. Otherwise, a Java or RCP version of Eclipse is recommended.1.下载eclipse只需登录到http://downlands/即可下载最新版本的eclipse安装程序。2.将下载好的eclipse解压到D:eclipse for android。3.双击D:eclipse for android目录下的eclipse.exe运行eclipse即可2。1.2 下载并安装jdk首先登录到SUN官方网站/javase/downloads下载最新的JDK安装程序。然后双击刚下载的JDK安装程序jdk-7u21-windows-i586,根据提示将JDK安装到默认目录。右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:Program FilesJavajdk1.7.0_21”的环境变量。再打开Path环境变量,在最后加上“C:Program FilesJavajdk1.7.0_21bin;”,单击“确定”按钮即可。1.3开发环境简介JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java诞生以来,JDK已经成为最广泛的Java SDK。JDK是整个Java的核心内容,包括了Java运行环境、Java工具和Java基础类库三部分。从Sun的JDK1.5开始,提供了一些非常使用的功能,其版本也不断更新,运行效率得到了非常大的提高。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组建构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。Android SDK即软件开发工具包(software development kit)。被软件开发工程师用于为特定的软件包、软件架构、硬件平台、操作系统等建立应用软件工具的集合。因此Android SDK是Android专属的开发工具包。其授权协议为Apache,开发语言为Java、需要Android操作系统的支持。1.4开发环境搭建下载安装Java开发包(JDK)。选择“windows offline installation,multi-language”,根据屏幕提示完成安装。打开计算机点右键属性高级系统设置环境变量,在系统变量中添加。图1.1环境变量新建JavaHome:C:Program FilesJavajdk1.6.0_10,如图1.2。图1.2JavaHome新建CLASSPATH:.;%JavaHome%libdt.jar;%JavaHome%libtools.jar;,如图1.3。图1.3 CLASSPATH编辑Path,在变量值前添加:%JavaHome%bin;,如图1.4。图1.4 Path在CMD窗体中输入java version,如果屏幕出现如图1.5一样的代码信息,说明JDK安装成功了。图1.5 CMD窗体1.4.2安装Eclipse选择标有eclipseIDEforjavadevelopers的文件进行安装。进入解压后的目录,就可以看到一个名为“eclipse.exe”的可执行文件,双击此文件直接运行,eclipse能自动找到用户先期安装的JDK路径1.4.3 安装Android SDK将下载的android-sdk压缩包解压为文件放于自选位置。在Eclipse中选择WindowsPreferencesAndroidBrowse找到解压文件ApplyOK。打开环境变量,编辑Path,在变量值前添加:C: javaadt-bundle-windows-x86-20130522sdktools;,如图1.6。图1.6 Path1.4.4 ADT安装创建AVD打开SDK Manager.exe,选择toolsManage AVDs,在Android Virtual Device Manager中点击New,输入AVD的信息,点OK完成AVD的创建。如图1.7。图1.7 AVD2 系统的设计与分析2.1 Android系统的概述Android是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。作为一个层次结构的软件集,一定有一个层次的系统构架,下图为Android的构架图:图2.1 Android 系统构架2.1.1应用层Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。2.1.2应用程序框架开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统, 其中包括:丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器; 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据:资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files );通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息; 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。2.1.3系统运行库系统运行库包括程序库和Android运行库。首先是程序库,Android 包含一些C/C+库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的;媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG ; Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合; LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图;SGL - 底层的2D图形引擎;3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速;FreeType -位图(bitmap)和矢量(vector)字体显示;SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。其次是Android 运行库,Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 dx 工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。2.1.4 Linux内核Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。2.3 日历流程图iPlanet日历S2erver2.xRun db_recover下载和安装Calender Server5.1.1运行db_upgrade运行les2milgrateSun ONE下载和安装Calender Server6.x运行cs5migrateSun Java System Calender Server 6Netscape Calender Server4.x下载和安装Calender Server5.1.1运行ncs4migrate图2.2 流程图3 系统详细设计3.1 日历其实是由3个预制的数据集组成日历整个系统是由3个GridView组成,3个GridView分别预制当前月、上个月和下个月当发生滑动事件的时候产生替换,同时在加载时重新生成。private Context mContext = BaseCalendar.this;private GridView title_gView;private GridView gView1;/ 上一个月private GridView gView2;/ 当前月private GridView gView3;/ 下一个月/ private GridView gView1;boolean bIsSelection = false;/ 是否是选择事件发生private Calendar calStartDate = Calendar.getInstance();/ 当前显示的日历private Calendar calSelected = Calendar.getInstance(); / 选择的日历private Calendar calToday = Calendar.getInstance(); / 今日private CalendarGridViewAdapter gAdapter;private CalendarGridViewAdapter gAdapter1;private CalendarGridViewAdapter gAdapter3;/ 顶部按钮private Button btnToday = null;private RelativeLayout mainLayout;/private int iMonthViewCurrentMonth = 0; / 当前视图月private int iMonthViewCurrentYear = 0; / 当前视图年private int iFirstDayOfWeek = Calendar.MONDAY;private static final int mainLayoutID = 88; / 设置主布局IDprivate static final int titleLayoutID = 77; / title布局IDprivate static final int caltitleLayoutID = 66; / title布局IDprivate static final int calLayoutID = 55; / 日历布局ID3.2 视图的生成 生成一个主视图/ 生成内容视图private View generateContentView() / 创建一个垂直的线性布局(整体内容)viewFlipper = new ViewFlipper(this);viewFlipper.setId(calLayoutID);mainLayout = new RelativeLayout(this); / 创建一个垂直的线性布局(整体内容)RelativeLayout.LayoutParams params_main = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);mainLayout.setLayoutParams(params_main);mainLayout.setId(mainLayoutID);mainLayout.setGravity(Gravity.CENTER_HORIZONTAL);LinearLayout layTopControls = createLayout(LinearLayout.HORIZONTAL); / 生成顶部按钮布局generateTopButtons(layTopControls); / 生成顶部按钮 (上一月,下一月,当前月)RelativeLayout.LayoutParams params_title = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);params_title.topMargin = 5;/ params_title.addRule(RelativeLayout.ALIGN_PARENT_TOP, 20);layTopControls.setId(titleLayoutID);mainLayout.addView(layTopControls, params_title);calStartDate = getCalendarStartDate();setTitleGirdView();RelativeLayout.LayoutParams params_cal_title = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);params_cal_title.addRule(RelativeLayout.BELOW, titleLayoutID);/ params_cal_title.topMargin = 5;mainLayout.addView(title_gView, params_cal_title);CreateGirdView();RelativeLayout.LayoutParams params_cal = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);params_cal.addRule(RelativeLayout.BELOW, caltitleLayoutID);mainLayout.addView(viewFlipper, params_cal);LinearLayout br = new LinearLayout(this);RelativeLayout.LayoutParams params_br = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, 1);params_br.addRule(RelativeLayout.BELOW, calLayoutID);br.setBackgroundColor(getResources().getColor(R.color.calendar_background);mainLayout.addView(br, params_br);return mainLayout;3.3当所示日期发生选择变更是的视图更新在主视图所示日期改变时更新,主要代码如下:/ 根据改变的日期更新日历/ 填充日历控件用private void UpdateStartDateForMonth() calStartDate.set(Calendar.DATE, 1); / 设置成当月第一天iMonthViewCurrentMonth = calStartDate.get(Calendar.MONTH);/ 得到当前日历显示的月iMonthViewCurrentYear = calStartDate.get(Calendar.YEAR);/ 得到当前日历显示的年String s = calStartDate.get(Calendar.YEAR)+ -+ NumberHelper.LeftPad_Tow_Zero(calStartDate.get(Calendar.MONTH) + 1);btnToday.setText(s);/ 星期一是2 星期天是1 填充剩余天数int iDay = 0;int iFirstDayOfWeek = Calendar.MONDAY;int iStartDay = iFirstDayOfWeek;if (iStartDay = Calendar.MONDAY) iDay = calStartDate.get(Calendar.DAY_OF_WEEK) - Calendar.MONDAY;if (iDay 0)iDay = 6;if (iStartDay = Calendar.SUNDAY) iDay = calStartDate.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY;if (iDay 0)iDay = 6;calStartDate.add(Calendar.DAY_OF_WEEK, -iDay);private Calendar getCalendarStartDate() calToday.setTimeInMillis(System.currentTimeMillis();calToday.setFirstDayOfWeek(iFirstDayOfWeek);if (calSelected.getTimeInMillis() = 0) calStartDate.setTimeInMillis(System.currentTimeMillis();calStartDate.setFirstDayOfWeek(iFirstDayOfWeek); else calStartDate.setTimeInMillis(calSelected.getTimeInMillis();calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);return calStartDate;public class TitleGridAdapter extends BaseAdapter int titles = new int R.string.Sun, R.string.Mon, R.string.Tue,R.string.Wed, R.string.Thu, R.string.Fri, R.string.Sat ;private Activity activity;/ constructpublic TitleGridAdapter(Activity a) activity = a;Overridepublic int getCount() return titles.length;Overridepublic Object getItem(int position) return titlesposition;Overridepublic long getItemId(int position) return position;Overridepublic View getView(int position, View convertView, ViewGroup parent) LinearLayout iv = new LinearLayout(activity);TextView txtDay = new TextView(activity);txtDay.setFocusable(false);txtDay.setBackgroundColor(Color.TRANSPARENT);iv.setOrientation(1);txtDay.setGravity(Gravity.CENTER);LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);int i = (Integer) getItem(position);txtDay.setTextColor(Color.WHITE);Resources res = getResources();if (i = R.string.Sat) / 周六txtDay.setBackgroundColor(res.getColor(R.color.title_text_6); else if (i = R.string.Sun) / 周日txtDay.setBackgroundColor(res.getColor(R.color.title_text_7); else txtDay.setText(Integer) getItem(position);iv.addView(txtDay, lp);return iv;3.4 启动和运行当你点击运行程序是的加载代码 TextView txtDay = new TextView(activity);/ 日期txtDay.setGravity(Gravity.CENTER_HORIZONTAL);/ 判断是否是当前月if (iMonth = iMonthViewCurrentMonth) txtToDay.setTextColor(resources.getColor(R.color.ToDayText);txtDay.setTextColor(resources.getColor(R.color.Text); else txtDay.setTextColor(resources.getColor(R.color.noMonth);txtToDay.setTextColor(resources.getColor(R.color.noMonth);int day = myDate.getDate(); / 日期txtDay.setText(String.valueOf(day);txtDay.setId(position + 500);iv.setTag(myDate);LinearLayout.LayoutParams lp = new Line

温馨提示

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

评论

0/150

提交评论