摘 要
随着智能手机的普及,人们越来越依赖手机进行一系列操作。
由于Android系统是一款免费的操作系统,导致了使用Android系统的手机占到7成左右。为了让Android手机用户体验更好,就需要让Android手机用户更加方便的下载所需要的软件。如何让用户更加方便的下载想使用的应用呢?这就需要在手机端安装一个应用市场软件。
应用市场软件目的就是让用户更加方便下载应用,管理应用。也可以通过应用市场软件对应用做推广。
软件基于Android SDK,实现了展示、下载、登录等功能。
关键词 Android 应用市场 下载
Abstract
With the popularity of smart phones, people more and more dependent on mobile phones for a series of operations.
Because the Android system is a free operating system, led to the Android system of mobile phone account for around http://7.In order to make Android user experience better, you need to make the Android mobile phone user downloads the software she'll need more conveniently.How to let the user more convenient download to use the application?This will need to install an application on the mobile end market software.
Application market objective is to make users more convenient to download application software management application.Can also through the corresponding application market software used for promotion.Software based on the Android SDK, realized the display, download, login, and other functions.
Key words : Android AppMarket download
目录
摘 要33
Abstract4
目录55
第一章 绪论77
1.1 课题背景、目的及意义77
1.1.1 课题背景77
1.1.2 课题目的和意义77
1.2 国内外研究现状77
1.2.1 国外的研究现状77
1.2.2 国内的研究现状88
第二章 可行性分析88
2.1 社会可行性88
2.2 技术可行性88
2.3 操作可行性88
2.4 软件技术和系统组件的介绍88
2.4.1 Activity8
2.4.2 View9
2.4.3 Intent9
2.4.4 AndroidManifest.xml9
2.4.5 Viewpager10
2.4.6 Fragment10
2.4.7 XUtils11
2.5 软件开发平台及运行环境1212
2.5.1 系统开发平台1212
2.5.2 运行环境1212
第三章 需求分析1212
3.1 系统功能模块概述和分析1212
3.2 系统功能模块设计1313
3.3 实体对象分析1313
第四章 程序界面设计与实现1515
4.1 首页设计1515
4.2 应用模块界面1616
4.3 游戏模块界面1717
4.4 专题界面1717
4.5 分类界面1818
4.6 排行界面1919
4.7 应用详情界面2020
4.8 菜单界面2121
第五章 应用和服务器交互的实现2121
5.1 请求网络2121
5.2 线程池2121
5.3 协议的获取2222
第六章 系统测试2323
6.1 测试的目的与目标2323
6.2 测试方法2323
6.3 测试结论2424
第七章 结论2424
第八章 致谢2525
第九章 参考文献2525
第一章 绪论
1.1 课题背景、目的及意义
1.1.1 课题背景
随着时代的发展,人们对于信息的获取有着强烈的需求。智能手机作为一种非常重要的通讯工具,功能越来越强大,相对电视、互联网络等方式,智能手机凭借其可以随时随地获取和处理信息的优势,逐渐成为人们获取信息的一种重要手段。
近年来由于Android平台良好的开放性和便捷性等特点,采用Android平台的智能手机越来越受到人们的青睐,Android平台在智能手机领域中所扮演的角色也越来越重要。考虑到Android广阔的市场前景,本文将Android平台作为课题的研究对象。
1.1.2 课题目的和意义
随着Android系统市场占有率越来越高,截止到14年底,Android操作系统在国内的市场份额已经超过7成。抢占用户下载应用的入口越来越重要,掌握了下载应用的入口,相当于占领了用户整个手机。
随着使用智能手机的人越来越多,很多IT公司也为了占领用户下载应用的入口,发布或准备发布各大应用市场软件。比如应用汇,安智市场,小米市场等等,因此发布一款基于Android操作系统的应用市场软件成为一个手机厂商或者IT公司的一个迫切的要求.本课题来源一个实际的商业项目,该应用可以实现展示应用,下载应用,安装应用等一系列功能.大大提高用户下载应用的体验,给用户提供放心的应用。
1.2 国内外研究现状
1.2.1 国外的研究现状
现在国外采用Google市场下载软件居多,Google市场下载软件安全性有保障,所有以后只要Android系统不倒,必然需要一款可以提供用户下载软件的应用程序。而Android系统也在一直维护,更新,性能不断提升,市场占有率不断升高,所以可以断言10年之内甚至更多时间,Android系统会一直存在,市场软件也不会消失。
1.2.2 国内的研究现状
现在国内各大手机厂商(小米、华为等)或者一些有一定规模的互联网公司(腾讯,360等)都用有自己对应的应用市场软件,用户打开这些软件都能下载各种应用。它们开发这些应用市场软件的原因就是想抓住智能手机的使用者,进一步提高其用户体验和自己应用的市场占有率,更方便的推广其它应用给用户,逐步占领用户的手机。这种软件也逐渐被消费者所认可,有越来越多的人都用市场软件下载新的应用。市场软件对发布的软件进行审核,进一步防止用户下载到有毒应用。
第二章 可行性分析
2.1 社会可行性
随着计算机技术的发展和网络人口的增加,网络世界也越来越广博,越来越丰富,人们也非常熟悉智能手机操作。市场软件也有一些成功案例,用户也接受在手机上下载应用。并且严格按照国家法律法规来进行研究和实践,并无法律和政策方面的限制。
2.2 技术可行性
本软件是基于Android SDK进行开发,用到 Activity,ActionBar,ViewPager,Fragment和自定义控件等技术,用于以上技术非常强大,使用起来比较简单,灵活,展示界面比较流畅,使用比较广泛,说明本技术具备可行性。
项目采用了观察设计模式,更加方便程序的设计与实现。
硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此软件的需要。
2.3 操作可行性
目前,大多数Android手机都能运行该软件,该软件的安装、调试、运行不会改变原手机系统的设置和布局,并且系统界面简单,稍加熟悉便能够方便的操作此软件。
2.4 软件技术和系统组件的介绍
2.4.1 Activity
Activity是一个有生命周期的对象。一个Activity就是完成某些工作的代码块,这部分工作还可能包括对用户UI界面的显示。这不是必须的,有些Activity不显示Ul界面。Activity是应用组件中最常用的一个。每个Activity都是Activity类的子类,并实现了一些特有的功能。
当一个新的Activity出现时,前一个Activity被中断并被放入到一个历史堆栈中。用户可以使用返回键使前一个Activity重现。当一个Activity不再需要时,可以将它从历史堆栈中移除。默认情况下,Android会为每个应用程序保留从主界面开始的历史堆栈。
Android通过一个被称作Intent的特殊类,来实现Activity与Activity之间的跳转。一个Intent描述了一个应用程序想要做什么。在Intent的描述结构中,含有两个重要的数据结构:动作和动作对应的数据。典型的动作类型包括MAIN、VIEW、PICK、EDIT等等,而动作对应的数据则以URI的形式表示。例如:修改一个联系人信息的界面,可以创建一个Intent,并将它的动作设置成EDIT,数据设置成表示这个人信息的URI。
除此之外,还有一个被称作意图过滤器(IntentFilter)的相关类。当发生一个有效的目的请求时,IntentFilter用来描述一个Activity能够处理什么样的Intent。
从一个Activity跳转到另一个Activity是由解析各种Intent实现的。例如:一个Activity使用startActivity(golntent)来调用其他Activity时,系统会查找所有已经安装的应用程序的IntentFilter,并从中挑选出能够匹配golntent意图的Activity。随后,这个新的Activity接收到Intent(golntent)的通知并开始运行。当StartActivity方法被调用,解析Inient的处理过程随之发生,这个机制有以下两个突出的优点:
- Activity可以通过一个以Intent形式产生的请求来重用其他组件的功能。
- Activity可以在任何时候被一个具有等价IntentFilter的新Activity所替代。2.4.2 ViewView可以将其自身绘制到屏幕上。Android的用户界面由一系列的视图树构成。接口都是由一组以树的形式出现的View组成的。开发者可以通过创建一个新的view来使用自定义的图形处理技术(比如开发游戏,或者是使用了自定义的用户图形窗口界面)。2.4.3 IntentIntent是一个简单的消息对象,它表示程序想做某事的“意图”。比如应用程序想要浏览图片,那么它可以通过创建一个Intent实例并将其传递给系统来表示意图浏览图片这个URI。系统将定位到能处理这一Intent的代码(在当前情况下就是图片浏览器),并运行之。Intent也可以用于广播系统范围内的有效事件(例如通知事件)。Intent在我们项目中大部分用来传递数据,跳转另一个Activity。2.4.4 AndroidManifest.xmlAndroidManifest.xml是系统的控制文件,它告诉系统如何处理所创建的所有应用组件,尤其是活动(Activity),服务(Service),.意图接收器(BroadcastRceiver)和内容提供者(ContentProvider)。2.4.5 ViewpagerViewPager是Android SDK 集成的v4包提供的Api其中之一,可以用来很方便的左右滑动切换界面,一般配合Fragment使用。2.4.6 FragmentAndroid是在Android 3.0 (API level 11)开始引入Fragment的。可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。 可以把Fragment设计成可以在多个Activity中复用的模块。当开发的应用程序同时适用于平板电脑和手机时,可以利用Fragment实现灵活的布局,改善用户体验。如图:
因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。 但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。Fragment生命周期如下图:
2.4.7 XUtilsXUtils开源框架提供了很多实用的android工具。XUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...XUitls最低兼容android 2.2 (api level 8)。目前XUtils主要有四大模块:
- DbUtils模块,封装了对数据库的增删改查操作。
- ViewUtils模块,可以通过注解对UI,资源和事件的绑定。
- HttpUtils模块,对联网、下载进行封装。
- BitmapUtils模块,支持加载网络或者本地图片,无需考虑内存溢出。
2.5 软件开发平台及运行环境
2.5.1 系统开发平台
系统的开发是在Eclipse+ADT+Android SDK的环境下进行的。
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
ADT,全称Android Development Tools,本身是集成在Eclipse中的插件,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级和下载。
SDK(Software Development Kit):在Android中,它为开发者提供了库文件以及其它开发所用到的工具。简单理解为开发工具包集合,是整体开发中所用到的工具包,如果你不用Eclipse作为你的开发工具,你就不需要下载ADT,只下载SDK即可开发。
2.5.2 运行环境
操作系统:Android2.2 以上。
第三章 需求分析
3.1 系统功能模块概述和分析
应用市场软件是手机必备的软件之一,通过该软件可以下载其它应用软件,所以该软件的核心功能是下载软件,安装软件。在Android应用中其实最难处理的是界面的展示,本应用集成了首页、应用、游戏、专题、分类、排行和菜单界面,让用户更加方便的寻找自己喜欢的应用。
数据都是通过请求服务器获取的,服务器和客服端是通过json数据交互的,系统的设计与开发过程中严格遵守软件工程的规范,运用软件设计模式,从而减少系统模块间的偶合,力求做到稳定性,可重用性和可扩充性。
应用市场软件主要功能如下:
3.2 系统功能模块设计
根据系统功能分析,可以画出系统的功能模块图。
界面功能展示图:
3.3 实体对象分析
Android软件的主要任务是通过请求服务器获取大量数据,显示到界面上。为了方便使用,这就需要需要封装一些对象。封装对象的目的就是为了更好的存储,解析服务器数据。封装的对象也叫着实体对象。
实体 (entity)对象具体概念:
客观存在并可相互区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系。例如,一个学生、一门课、一个供应商、一个部门、一本 书、一位读者等都是实体。
由于Android软件大部分功能是显示界面,对象之间没有联系,暂时也不需要数据库存储,设计起来比较简单。根据设计规划的主要实体有:应用程序、软件分类、下载信息、专题信息、用户信息。各个实体具体的描述属性图如下(实体属性在下图中并没有全部给出,因为属性过多的原因):
第四章 程序界面设计与实现
软件的整个界面部分是供用户浏览、下载软件的部分,一个好的界面部分一定非常精美,非常有条理,因此,界面的设计主要把握3点:简明扼要、条理清晰、层次分明。下面将一一介绍我的软件的界面部分的实现。
4.1 首页设计
首页模块包括3个主要的部分,采用分块处理。位置分别为上、中、下。
上部为图片上面灰色条目和导航条,内容包括:
- 应用标题;
- 应用图标。
- 条目的标题
上面的灰色条目部分采用ActionBar实现的, ActionBar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用ActionBar,因为ActionBar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观。
下面的导航条是PagerTabStrip控件实现的,可以点击切换界面.
整个上部是不仅体现在首页界面,后面的大部分界面都用顶部的条目和导航栏,这个部分也是所有界面都实现的。
下部分采用ListView实现,每个条目是一个相对布局,相对布局里面包含TextView,ImageView和RatingBar。
点击下部的每个条目,可以跳转到应用详情界面。点击下载按钮,可以进行该程序的下载,也可以暂停。
4.2 应用模块界面
应用界面和首页有点类似,只不过没有了中间ViewPager的部分。和首页相同的代码,可以抽取到父类,这样简化了代码。
4.3 游戏模块界面
游戏界面和应用界面,实现方式一样,只不过显示的数据不一样。
4.4 专题界面
专题界面上部分通过ActionBar实现的,和首页界面一样,下部分也是通过ListView实现的,ListView可以显示多个条目,每个条目上面是一张图片,用ImageView实现,下面是一个文本,用TextView实现。
由于服务器返回的图片并不是按照一定的宽高比例显示,所有当前模块对图片做了一些处理,其中写一个自定义布局包裹了显示图片的ImageView,这个自定义布局可以让ImageView按照宽高比例显示。
4.5 分类界面
分类界面上部分和之前的界面一样,都是ActionBar实现的,
分类界面下部分采用ListView实现的,其中又分为两种不同的条目,第一部分为标题,如图:
第二个部分为同一行的三个图片和三个文本,如图:
4.6 排行界面
整个排行界面最外层布局是一个ScrollView,ScrollView是可以上下滚动的容器。里面包裹着一个自定义的布局(Flowlayout),这个自定义布局可以让里面的每个条目一行一行排列,如果当前行排列满了,会自动换到下一行。
4.7 应用详情界面
应用详情界面分为6部分实现的,如上图序号。
4.8 菜单界面
点击ActionBar左侧的按钮,可以弹出一个菜单界面,整个菜单界面是用DrawerLayout实现的,里面用一个垂直方向的线性布局包裹图上显示的几个功能条目。
第五章 应用和服务器交互的实现
本应用所有数据都是通过请求服务器获取的,所以联网请求服务器是非常重要的。
5.1 请求网络
手机联网的方法还是很多,但是大部分都是通过HttpClient实现的。当前程序也是通过对该类进行包装,增加了一些功能,使用更方便。联网一共使用了三个类。
5.2 线程池
在Android4.0以上版本,是不允许在主线程中联网的,因为联网是一个相对耗时的操作,如果长时间阻塞主线程,程序就会报ANR异常(应用程序未响应的异常)。所以需要开子线程进行联网操作。
但是手机CPU运行效率相对慢,功耗比较低,所以在手机程序中最好不要开多个线程。
一般情况下,在Android应用中如果需要开多个线程的话,最好用一个线程池去管理多个线程。线城池可以把执行完的线程回收再利用,提高了效率。
具体代码如下:
参数说明:
当线程池中的线程小于coreSize,直接创建新的线程加入线程池执行任务,当线程池中的线程数目等于coreSize,将会把任务放入任务队列new LinkedBlockingQueue<Runnable>(10)这个集合中,当BlockingQueue中的任务放满了,将会创建新的线程去执行,但是当总线程数大于maxSize时,将会抛出异常。keepAliveTime是线程执行完任务后,且队列中没有可以执行的任务,存活的时间,后面的参数TimeUnit.MILLISECONDS是时间的单位,当前代表毫秒。
5.3 协议的获取
联网搞定了,剩下的就是通过读取服务器返回的数据。进行解析。这个分为四步进行操作。
代码如下:
其中T 是泛型,因为无论什么对象,这四步是不变的,但是返回的对象不一样,所以用一个泛型表示对象,泛型根据不同的代码可以表示的对象不一样。
第六章 系统测试
6.1 测试的目的与目标
在此系统进行初步实现之后,开始进行对系统进行测试,找出系统中存在的Bug,通过测试,用提交的Bug报告来为以后软件的改进提供标准和参考,能够在以后的系统改进中找到依据。
测试后的软件各模块基本功能可以顺利进行,尽可能的提高软件的健壮性。
6.2 测试方法
- 从是否关注软件内部结构和具体实现的角度划分:黑盒测试和白盒测试;
- 从是否执行程序的角度:静态测试和动态测试;
- 从软件开发的过程按阶段划分有:单元测试、集成测试、确认测试、系统测试、验收测试、回归测试、Alpha测试、Beta测试;单元测试又称模块测试,是针对软件设计的最小单位 ─ 程序模块(这里所说的程序模块在Java中一个模块就是一个方法),进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。集成测试 (组装测试、联合测试),通常在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:
- 在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
- 一个模块的功能是否会对另一个模块的功能产生不利的影响;
- 各个子功能组合起来,能否达到预期要求的父功能;
- 全局数据结构是否有问题;
- 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。
确认测试(Validation Testing),确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。
系统测试(System Testing),是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛盾的地方。
验收测试(Acceptance Testing),在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。验收测试是以用户为主的测试。软件开发人员和QA(质量保证)人员也应参加。由用户参加设计测试用例,使用生产中的实际数据进行测试。在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。
6.3 测试结论
把开始的代码写得越好,它出现的错误也就越少,你也就越能相信所做过的测试是彻底的。系统化测试以一种有序方式设法探测潜在的麻烦位置。同样,毛病最可能出现在边界,这可以通过手工的或者程序的方式检查。自动进行测试是最理想的,用得越多越好,因为机器不会犯错误、不会疲劳、不会用臆想某此实际无法工作的东西能行来欺骗自己。回归测试检查一个程序是否能产生与它们过去相同的输出。在做了小改变之后就测试是一种好技术, 能帮助我们将出现问题的范围局部化,因为新问题一般就出现在新代码里面。
测试和排错常常被说成是一个阶段,实际上它们根本不是同一件事。简单地说,排错是在你已经知道程序有问题时要做的事情。而测试则是在你在认为程序能工作的情况下,排错是在你已经知道程序有问题时要做的事情。而测试则是在你在认为程序能工作的情况下,为设法打败它而进行的一整套确定的系统化的试验。
Edsger Dijkstra有一个非常有名的说法:测试能够说明程序中有错误,但却不能说明其中没有错误。他的希望是,程序可以通过某种构造过程正确地做出来,这样就不再会有错误了,因此测试也就不必要了。这确实是个美好生活的目标,但是,对今天的实际程序而言,这仍然还只是一个理想。所以应该集中精力讨论如何测试,如何才能够更快地发现程序错误,如何才可以使得工作更有成效、效率更高。
第七章 结论
通过开发本应用,我较全面的掌握了Android的基本知识和编程技巧,并在开发过程中我的Android开发能力得到了进一步的提高。如:更进一步的深入了解Android控件,架构思想。在开发过程中我学到了一些经验:系统分析的好坏将决定着的系统开发成功与否,一份好分析设计将是成功开发主要因素。我们在着手开发之前不要急于编程,先应有较长的时间去把分析做好,做好对象的设计工作,写出相关的开发文档等。然后再开始编写程序代码,这样做到每写一步代码心底有数,有条不絮。
此外,我还觉得,我个人在这次设计中走了很多弯路。主要是因为平时很少接触软件开发工作,在应用方面缺乏经验,以后还需要更多的努力。
对我来说,这次设计的本身所产生的影响,还远远没有结束,我从本次毕业设计中学到了许多课本上没有的知识。通过自己的学习和努力;通过老师的指导和教育,使我不仅仅在知识水平和解决实际问题的能力上有了很大的提高。还从思想的深处体会到,要把自己的所学变成现实时所将面对的种种难题。
应用不免有错误和待改进之处,真诚欢迎各位师长、同行提出宝贵意见。
第八章 致谢
在论文完成之际,我首先要向尊敬的XXX老师表示最真挚的谢意。
在论文写作期间,为了保证我们毕业设计的正常进行,学院抽调了优秀的老师指导我们进行毕业设计,并且不时地询问我们毕业设计的进展情况。没有老师们的细心指导我的论文与系统就不可能顺利的完成,再次对你们表示衷心地感谢。老师认真负责的工作态度、严谨的治学风格,使我深受启发;同时也很感谢帮助过我和我一同探讨问题的同学们。为我们这次设计的正常开展提供了必要的基础。本次毕业设计,就要画上一个句号了。
感谢X学院给我提供学习的平台,让我在这里接受了四年正规系统的本科学习。
感谢所有关心、支持、帮助过我的良师益友。
最后,向在百忙中抽出时间对本文进行评审并提出宝贵意见的各位老师表示衷心地感谢!
第九章 参考文献
[1]张孝祥,Java 就业培训教程(附盘),清华大学,(2007-07)
[2]Android开发官网,http://developer.android.com
[3]卢潇.软件工程.北京:清华大学出版社;北京交通大学出版社,2005
[4]萨师煊,王姗.数据库系统概论.北京:高等教育出版社,2000
[5]马运涛.Eclipse精要与高级开发技术.北京:电子工业出版社,2003
[6] PaulJPerrone etal,张志伟,谭郁松,张明杰.J2EE构建企业系统[M] .北京:清华大学出版社,2001
[7] Chuck Cavaness.Programming Jakarta Struts,2002
[8] Bruce Shive.Research Direction in Object-Oriented Programming,2002
[9] Miao H.K.McDermid J.A.andTony Ian,Proving the existence of the initial state in Z specification,Chinese Journal of Advanced Software Research,2003
[10] Apache Software.The Struts User's Guide.http://Jakarta.Apache.org/struts.