1、摘 要 Android是基于Linux的自由和开源的操作系统, 2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。但其系统的碎片化严重困扰着手机用户,不同的系统版本,在体验上都有所不同,让用户很难适应,特别是刚接触Android智能手机的用户,面对一些稍微复杂一点的手机设置,如网络APN的设置则无从下手。通过设计基于Android平台的远程维护助手,提供可视化的远程设备维护、FTP文件管理、程序和进程管理、用户信息备份等,方便Android用户远程维护手机。基于Android平台的远程维护助手网络数据传输模块。在开发过程中,借助Eclip
2、se工作平台,完成软件的编码,调试,测试和发布。利用Java和Android技术以C/S(客户端/服务器)架构构建远程控制平台。关键词 Android;远程控制;网络数据传输IABSTRACT Android is based on free and open-source Linux operating system, the data show that in November 2012, Android occupies 76% share of the global smartphone operating system market, the Chinese market share
3、 of 90%. The fragmentation of the system has serious problems with mobile phone users, a different version of the system, different experience, so it is difficult to adapt, especially new to Android smartphone users, in the face of a little more complicated mobile phone settings network APN settings
4、 no from the start. The design is based on the Android platform remote maintenance assistant, remote visualization equipment maintenance, FTP file management, program and process management, user information backup convenience Android users remote maintenance phone.Android platform-based remote main
5、tenance assistant - network data transmission module. In the development process, with the Eclipse workbench, complete system coding, debugging, testing and release. C / S (client / server) architecture to build a remote control platform using Java and Android technology.KEY WORDS Android;Remote Con
6、trol;Network data transferII目录前 言11 开发环境与技术及工具介绍21.1 Socket技术介绍21.2客户端/服务器结构21.3 开发工具介绍31.4 开发语言介绍32 软件可行性分析42.1 可行性研究的前提42.1.1 要求42.1.2 技术可行性52.1.3 操作可行性52.1.4 经济可行性52.2 可行性分析结论53 软件需求分析63.1 软件功能需求63.2 软件的用例图63.2.1 普通用户的用例图73.2.2 维护者用例图83.3 软件运行环境94 详细设计与实现104.1 模块设计104.1.1 模块描述104.2 模块功能及实现105 模块测
7、试165.1测试标题175.2 测试平台环境175.3测试表17项目总结18参考文献19致谢20III广州大学华软软件学院 软件工程系 潘晓群 基于Android平台的远程维护助手数据传输与管理模块前 言随着Android系统的日趋普及和不断更新,越来越多的手机用户选择使用Android系统的手机,智能机的出现,为人们的工作、生活带来无限的好处。但由于Android是基于开源的Linux系统,其系统碎片化很严重,导致市场上出现各式各样的Android系统版本。近年来,Android平台占据了移动终端大半比例,与PC一样,用户会在使用过程中遇到各种无法解决的系统性问题。Android是一个使用很
8、广泛的开源平台,其实际应用不仅限于手机领域。未来,Android平台将逐步普及到平板电脑,个人电脑,家电等领域。面对如此广阔的市场,开发一款基于Android平台的远程维护软件十分有必要。1 开发环境与技术及工具介绍1.1 Socket技术介绍所谓socket通常也称作套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络
9、连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请
10、求。连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。1.2客户端/服务器结构客户端/服务器结构又叫主从式架构,简称C/S结构,是一种网络架构,它把客户端 (Client) (通常是一个采用图形用户界面的程序)与服务器 (Server) 区分开来。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。图11 C/S简单结构图1.3 开发工具介绍Eclipse 是一个开放源代
11、码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。1.4 开发语言介绍Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java
12、applet。另一方面,Java技术也不断更新。 Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能
13、优异、多线程的动态语言。2 软件可行性分析2.1 可行性研究的前提2.1.1 要求1. 功能:用户通过USB连接手机能让另一个的用户看到手机界面以及操作,方便的管理手机进程,程序,以及相关设置,达到远程维护手机的效果。2. 性能:软件能在异地使用并达到及时显示连接手机的屏幕信息。3. 输出:软件上及时显示手机屏幕,列出手机的基本信息,所有进程及程序。4. 输入:维护人员能在应用上操作用户的手机屏幕,并管理其手机进程及程序。5. 基本数据流程:图21 基本数据流图2.1.2 技术可行性本应用技术采取成熟的Java技术,拥有规范、完整的官方文档与详细的网络教程,加上已经有一定的使用经验,所以能够应
14、用于开发相关功能应用。数据传输也是很成熟的Socket技术,所有相关资料与经验会比较欠缺,但是可以参考官方详细文档,并通过实验验证效果,所以也可以对这些新技术新框架进行使用。2.1.3 操作可行性本应用基于Java Se和Android SDK开发,在主流的平台都有较好的适应性。另外在体验上再增加一定的优化,使框架能满足应用的需求。良好的用户体验为操作可行性提供了保证。2.1.4 经济可行性应用的技术Android SDK是开源的框架,能免费使用并获得一定的支持服务。费用支出主要集中于开发与维护人员的工资,以及服务器运行与网络流量的费用。2.2 可行性分析结论通过可行性分析,远程维护助手在技术
15、、操作、经济三个方面的可行性都达到要求,具备进行开发的价值,并能在开发完成上线,为用户提供服务。3 软件需求分析 3.1 软件功能需求软件的功能需求包括以下几个方面。PC端:(一) 远程操控手机:能远程实时动态地全屏查看被协助方或个人手机屏幕,并能通过鼠标对屏幕进行点击、双击、拖拽以及滚动滑轮来实现对真机的触摸、滑动以及滚动操作。(二) 画板演示:在演示手机应用时,能在PC端屏幕上实现画板功能,方便一边进行触控演示,一边使用画板进行辅助解释说明。(三) 应用管理:通过已安装应用列表,能够远程批量程序的卸载与安装,批量导出程序包,安装位置转存。(四) 进程管理:能获取当前手机活动进程,能批量结束
16、进程,检测进程的敏感权限,并列明敏感权限以及相应说明告知用户。(五) 文件管理:用户可以远程对手机上的文件进行复制、剪切、移动、删除、新建、搜索等操作,同时可以在手机端架设FTP服务器,远程实现文件的上传下载。Android手机端:(一) 程序数据及通讯录进行网络或本地备份与恢复。(二) 扫描可能会泄露您的隐私,后台发送短信的软件,列出危险软件的所有权限,判断可能造成的危害。(三) 在获取ROOT权限下,直接对软件及普通应用进行直接卸载而无需进入系统卸载界面。3.2 软件的用例图创建用例图之前首先需要确定参与者(1) 作为一个远程维护助手软件,首先需要用户的参与,用户可以打开软件选择个人使用或
17、者发起求助向另一方请求帮助。(2) 作为一个远程维护助手软件,还需要一个维护人员,即在服务器端远程帮用户操控其手机帮其维护,当然普通用户可以作为维护者为自己维护手机。由以上分析可以看出,软件的参与者有两类,普通用户,维护者。3.2.1 普通用户的用例图用例说明(1) 手机基本信息查看。可以查看到手机的基本信息如:IMEI码。(2) 手机进程管理。可以在客户端直接对手机进程进行管理。(3) 手机应用管理。可以在客户端直接对手机应用进行管理。(4) 屏幕显示。实时的显示手机屏幕到维护者的客户端。(5) 个人信息备份。可以将个人信息如通讯录备份到网络。(6) FTP文件管理。可以在手机架设FTP让维
18、护者方便管理文件。图31 普通用户用例图 3.2.2 维护者用例图用例说明(1) 手机基本信息查看。可以查看到手机的基本信息如:IMEI码。(2) 手机进程管理。可以在客户端直接对手机进程进行管理。(3) 手机应用管理。可以在客户端直接对手机应用进行管理。(4) 屏幕显示。实时的显示手机屏幕到维护者的客户端。(5) 个人信息备份。可以将个人信息如通讯录备份到网络。(6) FTP文件管理。可以在手机架设FTP让维护者方便管理文件。图32 维护者用例图3.3 软件运行环境硬件环境(1) 客户端因为客户端主要用于浏览和操作数据,所以对客户端的硬件要求不高,不过现在的电脑有很高的性价比,因此需要的配置
19、应该高于下面的配置:处理器:Inter Pentium(Celeron) 4 1.6GHz 或更高。内存:256MB或以上硬盘空间:1GB或以上显卡:SVGA显示适配器或更高软件环境a) 手机端:操作系统:Android2.1以上4 详细设计与实现4.1 模块设计通过Socket建立PC客户端端与手机客户端的数据传输:4.1.1 模块描述项目采用请求与响应的交互机制来进行数据通信。服务器除总调度服务器(CommandHandlerService)外,其余功能服务都需要客户端发送开启请求进行开启。客户端将用户操作命令化,发送命令向服务器进行请求。服务器再将接收到的请求信息解释执行,调度相应的服务
20、器响应客户端的请求。4.2 模块功能及实现进程管理界面如下:图41 进程管理界面图主要功能:维护者通过操作列表上的选项控制用户手机的进程。public class ProcessService implements IServicepublic static final String TAG = ProcessService;/* * 杀进程 */public static final String MSGTYPE_KILLPROCESS = killprocess;/* * 杀死所有进程 */public static final String MSGTYPE_KILLALLPROCESS
21、= killallprocess;/* * 进程指令 */public static final String MSGTYPE_PROCESS = process;/* * 字符信息 */public static final String MSGTYPE_INFO = info;/* * 图像信息 */public static final String MSGTYPE_IMAGE = image;/* * 操作完成 */public static final String MSGTYPE_FINISH = finish;private Socket mSocket;private Data
22、InputStream mStreamReader;private BufferedWriter mStreamWriter;private Thread mMessageThread;private boolean isRunning = false;private PhoneDataControl dataControl;private Runnable mProcessRunnable = new Runnable()Overridepublic void run()while (isRunning & mSocket.isConnected()try/ 获取本次数据类型String r
23、esult = mStreamReader.readUTF();String type = result.split(;);if (MSGTYPE_FINISH.equals(type0)if (MSGTYPE_INFO.equals(type1)Log.v(TAG, 完成字符信息获取);dataControl.refreshProcessInfos(); else if (MSGTYPE_IMAGE.equals(type1)Log.v(TAG, 完成图片信息获取);dataControl.refreshProcessIcons();dataControl.cleanPhoneProgram
24、s();else if(MSGTYPE_KILLPROCESS.equals(type1) else/ 获取本次数据流长度int bufLen = mStreamReader.readInt();byte bufBytes = new bytebufLen;int curPosition = 0;while (curPosition != bufLen)curPosition += mStreamReader.read(bufBytes,curPosition, (bufLen - curPosition);if (MSGTYPE_INFO.equals(type0)String m = ne
25、w String(bufBytes, gb2312);/Log.v(TAG, get: + m);String message = m.split(;);BasicProgramUtil program = new BasicProgramUtil();program.setProgramName(message0);program.setProcessName(message1);program.setMemoryOccupy(message2);program.setCpuOccupy(message3);dataControl.mPhonePrograms.add(program);if
26、 (MSGTYPE_IMAGE.equals(type0)int id = (int) mStreamReader.readLong();BasicProgramUtil program = dataControl.mPhonePrograms.get(id);ImageIcon icon = new ImageIcon(bufBytes);program.setIcon(icon); catch (IOException e)Log.v(TAG, 无法从服务端接收数据包);break;Overridepublic void handleMessage(String message)Overr
27、idepublic void restartService()Log.v(TAG, 重新启动当前服务.);stopService();startService();Overridepublic void startService()CommandHandlerService commandHandlerService = (CommandHandlerService) CServerService.getService(CServerService.COMMAND_HANDLE_SERVICE);if (ServerInfo.STATUS_OK = commandHandlerService.
28、readStatus()trymSocket = new Socket(ServerInfo.SERVER,ServerInfo.CLIENT_PROCESS_SERVICE_PROT);if (mSocket.isConnected()mStreamReader = new DataInputStream(mSocket.getInputStream();mStreamWriter = new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream();isRunning = true;mMessageThread = ne
29、w Thread(mProcessRunnable);mMessageThread.start(); catch (Exception e)e.printStackTrace();elseLog.v(TAG, 无法得到服务器准备响应);Overridepublic void stopService()disconnectClient();public void writeMessage(String message)tryString action = message2;mStreamWriter.write(action + n);mStreamWriter.flush(); catch (
30、Exception e)e.printStackTrace();private void disconnectClient()tryisRunning = false;if (mStreamReader != null)mStreamReader.close();mStreamReader = null;if (mStreamWriter != null)mStreamWriter.close();mStreamWriter = null;if (mSocket != null)mSocket.close();mSocket = null; catch (Exception e)e.print
31、StackTrace();public void setDataControl(PhoneDataControl dataControl)this.dataControl = dataControl;5 模块测试软件测试是使用人工或者自动手段来运行或测试某个项目的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness) 、完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。 Gren
32、ford J.Myers曾对软件测试的目的提出过以下观点: (1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的错误的测试。 然而,这种观点指出测试是以查找错误为中心,而不是为了演示软件的正确功能.但是只从字面意思理解,可能会产生误导,认为发现错误是软件测试的唯一目的,查找不出错误的测试就是没有价值的测试,实际上并非如。 (1)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者 发现当前软件开发过程中的缺陷,以便及时改进; (2)这种分析也能帮助测试人
33、员设计出有针对性的测试方法,改善测试的效率和有效性; (3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法 5.1测试标题基于Android平台的远程维护助手管理手机应用测试5.2 测试平台环境a) 客户端软件:操作系统:Windows XPb) 手机端软件:操作系统:Android2.25.3测试表测试目标 测试程序代码,清除无效代码,清除测试用代码,避免软件发生错误;优化网络数据传输代码,保证软件的稳定性;测试网络数据传输是否能达到预期效果,保证网络数据传输模块所有的功能的正常使用。测试方法 使用不同版本的Android系统手机,观察软件能否正常运作; 查看手机应用是否
34、能随着维护者的操作变化测试结论 软件达到预期效果,通过测试。项目总结在这个软件设计的过程中,我在实践中提升了理论水平,深刻体验了理论与实践的重要性。对于一些平时忽视的问题,以及一些在实践过程中解决遇到的难题,这些是在以前理论知识学习中很难接触到的。回想起自己在做这个软件的全过程,收获还是很多的。首先,要熟悉应用的工具,以及一些基础知识,为软件的实现做好准备。其次是要注重总体设计。不要忙于某个模块的详细设计,先要进行总体设计,形成总体框架,这样在详细设计时才会有条理。特别是设计一些大型的软件时,这一部显得尤为重要,否则将耗费大量的精力做一些无用的工作。还有一点是要注重理论知识,理论知识是基础,并
35、要善于查阅资料,多向其他人请教。做完这个设计,我Socket有了一个比较深刻的了解,同时对软件开发设计、软件编程及开发工具应用上也都有了深一层次的了解,并积累了一定的工程实践经验,为今后从事的工作研究奠定了一定的基础。另外,由于时间仓促,在许多方面还有考虑不周的地方,在以后的工作中,我将继续努力,不断地使之完善。参考文献1 JAVA编程思想.北京: 机械工业出版社,2007.62 刁成嘉.UML系统建模与分析设计.北京: 机械工业出版社,2007.7 3 李刚.疯狂Android讲义.北京:电子工业出版社,2011.74 罗杰.Android应用开发.北京:人民邮电出版社,2010.95 余志
36、龙.Google Android SDK开发范例大全(第二版).北京:人民邮电出版社,2010.66 Wallace Jackson. Learn Android App Development. Berkeley: Apress,2012.47 Satya Komatineni. Android. Berkeley: Apress,2009.68 Mark Murphy. Beginning Android. Berkeley: Apress,2009.69 Jeff Friesen. Learn Java for Android Development. Berkeley: Apress,2010.11致谢在论文完成之际,要在这感谢比赛指导老师聂常红老师,感谢她在项目开发中对我们提供技术性指导,也诚心感谢毕业设计指导老师陈孝如老师在课题以及论文的书写过程中对我的指导和教育,两位老师认真的工作态度和严谨的治学作风一直是我生活、学习中的榜样。也要感谢在大学四年中曾经教育和教导我的老师们。是你们的不辞劳苦,使得我们从对软件一无所知的大学生,成长到现在能独立开发属性自己的软件,实现自己的梦想。最后,要多谢三位队员。谢谢你们对我的包容和对项目的热情让这款软件顺利完成,从你们身上,我学到很多东西。与你们一起开发这个项目是我人生中一段难忘、珍贵的经历。 20