摘要
I
摘要
伴随着Android智能移动设备的普及,其对网络系统和流量监控的要求越来越
高,因而,让用户有能力实现对移动设备网络流量的实时监控和显示,同时进一
步合理控制移动设备网络流量的使用状况,从长远来看,是Android系统研究领域
目前和未来的热门和趋势。
Android系统体系架构主要分为Linux内核层、Libraries系统库和Android运
行时环境层、应用程序框架层和应用程序层4个层次,其应用程序主要由Activity、
Service、BroadcastReceiver、ContentProvider以及Intent等组件组成。本文采用了
在Android系统平台上使用tcpdump工具捕获网络流量数据文件,然后在对其文件
格式分析说明的基础上进行解析并记录成流量日志形式的设计方案来实现
Android系统的网络流量监控设计研究课题。
本文中Android系统网络流量监控的具体实现涉及了主界面和相关控件的布
局配置,通过开启和关闭网络流量监控服务模式来进行获取通信流量数据的过程,
实现了将tcpdump工具捕获的网络流量数据文件进行解析并以流量日志的形式展
现出来的功能,同时还实现了统计每个应用进程的上行流量和下行流量数据并展
现出来的功能,最终成功完成了一个可以实现网络流量监控功能的Android应用程
序软件。
关键字:Android;流量监控;tcpdump;流量日志
ABSTRACT
II
Abstract
WiththepopularityofAndroidsmartmobiledevices,itsnetworktraffic
monitoringsystemshavebecomeincreasinglydemanding,thus,allowingurstohave
theabilitytorealizethemobiledevicenetworktrafficanddisplaysreal-time
monitoring,whilefurtherreasonablecontrolnetworktrafficformobiledevicesusage
inthelongrun,isthemostpopularandcurrentandfuturetrendsintheAndroidsystem
rearch.
AndroidsystemarchitectureisdividedintotheLinuxkernellayer,Libraries
systemlibrariesandAndroidruntimeenvironmentlayer,applicationframeworklayer
andapplicationlayer4level,anditsapplicationsaredominatedbyActivity,Service,
BroadcastReceiver,ContentProvider,
paper,theuoftheAndroidplatformtcpdumptooltocapturenetworktrafficdatafile,
andthenparthebasisofitsanalysisofthefileformatandrecordadescriptionofthe
designintheformoftrafficlogstoAndroidnetworktrafficmonitoringsystemdesign
rearch.
ConcreterealizationofthisarticleAndroidnetworktrafficmonitoringsystem
involvingthemaininterfacelayoutconfigurationsandassociatedcontrols,toobtain
trafficdatabyopeningandclosingprocessnetworktrafficmonitoringrvicemodelto
achievethetcpdumptooltocapturenetworktrafficdatafilesberesolvedintheformof
trafficlogsshowoutoffunction,butalsorealizedtheupstreamanddownstreamtraffic
statisticsperapplicationprocessandunfoldedfunction,andultimatelythesuccessful
completionofamonitoringnetworktrafficcanbeachievedAndroidapplications
software.
Keywords:Android;trafficmonitoring;tcpdump;trafficlogs
目录
III
目录
第一章绪论................................................................................................................1
1.1引言..................................................................................................................1
1.2课题研究背景与意义......................................................................................1
1.3课题研究现状与发展趋势..............................................................................2
1.4本文主要工作..................................................................................................2
1.5论文的结构安排..............................................................................................3
第二章Android系统相关技术介绍及分析..............................................................4
2.1Android系统体系架构....................................................................................4
2.1.1Linux内核............................................................................................5
2.1.2系统库和Android运行时环境...........................................................5
2.1.3应用程序框架层..................................................................................5
2.1.4应用程序层..........................................................................................6
2.2Android应用程序结构及原理分析................................................................6
2.2.1Activity.................................................................................................6
2.2.2Service..................................................................................................8
2.2.3BroadcastReceiver................................................................................8
2.2.4ContentProvider...................................................................................8
2.2.5Intent.....................................................................................................9
2.2.6进程......................................................................................................9
2.3开发环境IDE.................................................................................................11
2.4本章小结........................................................................................................12
第三章Android系统网络流量监控设计方案及相关分析....................................13
3.1tcpdump移植入Android系统......................................................................13
3.2Pcap文件格式...............................................................................................14
3.3Pcap文件的解析...........................................................................................16
3.4本章小结........................................................................................................18
第四章Android系统网络流量监控具体实现及相关分析....................................19
4.1主界面模块的实现........................................................................................20
4.2网络流量监控模块的实现............................................................................22
4.2.1网络流量监控模式的开启和关闭....................................................22
4.2.2网络流量监控Service类的实现......................................................23
4.3流量日志界面模块的实现............................................................................24
4.3.1启动LogActivity类...........................................................................24
4.3.2LogActivity类的数据适配................................................................25
4.4流量统计界面模块的实现............................................................................27
目录
IV
4.4.1流量统计的实现方法........................................................................27
4.4.2TrafficActivity类的数据适配...........................................................28
4.5本章小结........................................................................................................30
第五章结论..............................................................................................................31
5.1本文的主要工作............................................................................................31
5.2进一步研究的建议........................................................................................32
5.3感想与体会....................................................................................................32
致谢............................................................................................................................33
参考文献........................................................................................................................34
外文文献原文................................................................................................................35
外文文献翻译................................................................................................................39
第一章绪论
1
第一章绪论
1.1引言
移动互联网正逐渐渗透到人们生活、工作的各个领域,移动音乐、手机游戏、
视频应用、手机支付、位置服务等丰富多彩的移动互联网应用迅猛发展,正在深
刻改变信息时代的社会生活,移动互联网经过几年的曲折前行,终于迎来了新的
发展高潮。
随着互联网络和电子产品的飞速发展,手机智能终端对网络系统的要求越来
越高,特别是当前流行的Android系统智能手机由于后台应用程序联网偷流量常常
会给用户带来不必要的损失。因此,在无线互联网络提供的服务日益多样化和复
杂化的今天,对网络流量进行智能化的控制显得日益重要。然而Internet已经发展
成为一个复杂的海量非线性系统,对这一复杂系统的动态特性的研究还存在大量
待解决的问题。由于无线网络流量的复杂性,对于网络流量的控制无法象其它线
性、非线性系统一样方便地进行控制,国内外对于网络流量控制技术的研究仍有
许多难点。
1.2课题研究背景与意义
Android是一套真正意义上的开放性移动设备综合平台,它包括操作系统、中
间件和一些关键的平台应用。Android是由Linux+Java构成的开源软件,允许所
有厂商和个人在其基础上进行开发。Android平台的开放性等特点既能促进技术
(包括平台自身)的创新,又有助于降低开发成本,还可以使运营商能非常方便地制
定自己的特色化的产品。因此,它具有很大的市场发展潜力。
Android的最大特点在于它是一个开放的体系架构,具有非常好的开发和调试
环境,而且还支持各种可扩展的用户体验,且Android里面具有非常丰富的图形系
统和对多媒体的支持功能。
本次设计是基于Android的网络流量监控设计,其主要意义在于通过对
Android移动设备上的网络数据进行实时连续的采集来监测网络流量,对获得的流
电子科技大学学士学位论文
2
量数据进行统计计算,并记录进入日志中,从而分析得到网络连接相关的性能指
标。用户根据流量数据就可以对网络连接进行管理,发现性能变化趋势,并获知
影响网络性能的因素及问题所在,进而关闭不必要的网络进程,节省流量损失。
1.3课题研究现状与发展趋势
移动互联网的蓬勃发展促使手机终端产业链变化,应用和服务逐渐成为竞争
的焦点。无论是电信运营商,终端厂商还是应用开发商,目前都在向手机操作系
统领域进军,试图通过对内容的集聚和应用体系的掌控,稳固或加强自己在产业
链中的影响力。而在这一过程中,Android系统因低廉的成本和良好的用户体验等
多方面因素逐渐受到各方的青睐。
Android系统采用了开源的平台,给予了终端厂商和开发者更大的灵活性,开
发者在程序的开发移植上更为方便且不需要考虑厂商端内容审核等问题,终端厂
商则可以按需深度定制系统开发本地化应用环境。在终端厂商、电信运营商和第
三方应用开发商的推动下,用户可选择的应用资源进一步丰富,各大Android应用
商店呈现百花齐放的态势,Android平台的应用资源优势正在逐步的扩大。
然而,伴随着Android智能移动设备的普及,手机应用流量问题日渐凸显,越
来越多的手机应用在使用过程中经常发生偷跑流量现象,因此,关于如何控制手
机流量的使用,让用户有能力和权力决策手机应用的运行状况,成为广大消费者
的诉求。因而,实现对手机流量的实时监控和显示,便于用户了解自己的流量使
用情况,同时进一步合理控制流量的使用,从长远来看,是Android研究领域目前
和未来的热门和趋势。
1.4本文主要工作
本文在第一章主要介绍了本课题研究的相关背景与意义,在第二章主要介绍
了Android系统的相关技术和原理分析,第三章是本课题网络流量监控的核心实现
原理的阐述和分析,第四章是本课题网络流量监控的具体设计方案的阐述和分析,
最后在第五章对本文工作进行了一个总结,同时给出了该课题以后研究方向的一
些建议。
第一章绪论
3
1.5论文的结构安排
本文的结构安排如下:
第一章作为绪论部分,主要介绍了Android系统网络流量监控的研究背景,当
前的研究现状以及以后的发展趋势。
第二章集中介绍了Android系统的相关技术及原理分析,为本文后面的网络流
量监控设计的实现方案做好了一个基础的理论知识铺垫。
第三章是本文的理论核心,主要阐述了网络流量监控的核心方法原理。主要
介绍了使用tcpdump抓包工具在Android系统底层实现网络流量数据包的捕获的方
法步骤,分析了根据Pcap抓包文件的文件格式来解析出网络流量日志并存入文本
文件的原理和方法,是本次课题的核心研究点。
第四章是在第三章理论分析的基础上,给出了Android系统网络流量监控设计
的具体实现方案,介绍了主界面的布局设置,网络流量监控服务的开启和关闭,
流量日志显示界面和流量统计显示界面的实现,给出了相关的代码并进行了相应
的分析,还给出了应用程序的实现效果图。
第五章结论,总结了本文的主要工作,给出了一些进一步研究的建议。
电子科技大学学士学位论文
4
第二章Android系统相关技术介绍及分析
2.1Android系统体系架构
Android是基于Linux开放性内核的手机操作系统,Android系统由操作系统、
中间件、用户界面和应用软件组成。Android的系统架构采用分层架构的思想,架
构清晰,层次分明,协同工作,其体系构架图如下:
图2-1Android系统体系架构图
从图2-1中可以看出Android系统从下到上依次包括Linux内核层、Libraries
系统库和Android运行时环境层、应用程序框架层和应用程序层四层结构。底层以
Linux内核工作为基础,由C语言开发,只提供基本的核心功能;中间层包括系统
库Library和虚拟机DalvikVirtualMachine,由C或C++开发。而应用程序层、应
用程序框架层和运行时环境中的Android核心库则采用Java语言编写。
第二章Android系统相关技术介绍及分析
5
2.1.1Linux内核
Android核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、
网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。
2.1.2系统库和Android运行时环境
系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、
FreeType、WebKit、SGL、SSL和libc。Android运行时环境包括核心库和Dalvik
虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android
的核心库,比如、、等等。后者是一种基于寄
存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、
线程的管理、安全和异常的管理以及垃圾回收等重要功能。
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用
的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的
进程中。Dalvik虚拟机设计成在一个设备上可以高效地运行多个虚拟机。Dalvik
虚拟机的可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适
合处理器速度和内存容量有限的系统。
2.1.3应用程序框架层
该层是Android应用开发的基础,开发人员大部分情况是在和它打交道。应用
程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、
电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在
Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,
任何一个应用程序都可以发布自身的功能模块,而其它应用程序则可以使用这些
已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各
种应用程序组件。
通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用
程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设
置闹钟、向状态栏添加通知等等。
电子科技大学学士学位论文
6
2.1.4应用程序层
该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器
和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程
序,而这些程序与那些核心应用程序彼此平等、友好共处。
2.2Android应用程序结构及原理分析
一个Android应用程序是由Activity、Service、BroadcastReceiver、Content
Provider四个部分组成,但并不是每一个Android应用程序都必须由这四部分组成。
在应用程序中使用这些组件时,需要在配置文件中进行配置。
这个配置文件是每个Android应用程序所必需的,用于定义应用程序的组件、组件
的功能以及一些特性和要求等,它位于application的根目录,描述了package中的
全局数据,包括了package中暴露的组件(activities,rvices等等),它们各自的实
现类,各种能被处理的数据和启动位置。
2.2.1Activity
一个Activity通常展现为一个可视化的用户界面,是Android程序与用户交互
的窗口,也是Android组件中最基本也是最复杂的一个组件。从视觉效果来看,一
个Activity占据当前的窗口,响应所有窗口事件,具备控件、菜单等界面元素,实
际应用中,通常就是一个单独的屏,也就是一个运行在前台程序在某一时刻在屏
幕中所能展示的全部内容就是一个Activity。从内部逻辑来看,Activity为了保持
各个界面的状态,需要做一些持久化的事情,还需要妥善管理其自身的生命周期。
对于开发者而言,需要派生一个Activity的子类,进而编写代码实现各种功能方法,
如果一个应用中有多个Activity,虽然彼此结合形成一个应用在一起工作,但是每
个Activity是彼此独立的,每个都是继承于Activity基类的一个子类。
Activity在系统中以活动栈的形式进行管理。当一个新的Activity启动后,就
被放到了栈顶,成为了正在运行的Activity,而新Activity之前的Activity在活动
栈里总位于新Activity之下,直到新Activity退出才重新回到前台。而Activity的
生命周期也就是它所在进程的生命周期,Activity的生命周期如图:
第二章Android系统相关技术介绍及分析
7
图2-2Activity生命周期
从图2-2可以看出,Activity有三个关键的生命周期阶段:
(1)Activity的整个生命期:从首次调用onCreate()开始,到最终调用onDestroy()
结束。在onCreate()中进行所有初始化,在onDestroy()时进行清理工作,释放资源。
(2)Activity的可见生命期:从调用onStart()开始,到onStop()被调用为止。在
这段时间内,即使Activity不与用户进行交互,用户也可以在屏幕上看到它。在这
两个方法调用之间,可以维护Activity显示给用户的资源。onStart()和onStop()方
法可以多次调用,因为Activity随时可以在可见和隐藏之间进行转换。
(3)Activity的后台生命期:从调用onResume()开始,到onPau()被调用为止。
在这段时间内Activity处于其它所有Activity之前,并与用户进行交互。一个
Activity可以不断在resumed状态和paud状态之间变换。
电子科技大学学士学位论文
8
2.2.2Service
一个Service不是一个用户可见的组件,它在不确定的一段时间内运行在后台,
每个Service都继承自Service基类,它可以运行在它自己的进程,也可以运行在
其它应用程序的进程里,这取决于自身的需要。Android中的Service其实与
Windows中的服务类似,它执行长时间运行的操作,或运行进程执行工作。和
Activity或者其它组件一样,Service运行在应用进程的主线程中,所以它不会阻塞
其它的组件或者用户界面,它经常为那些耗时长的任务单独开一个线程。Activity
可以启动一个Service,并运行或者绑定到它,而其它的组件可以通过远程过程调
用(RPC)来绑定到一个Service上。
2.2.3BroadcastReceiver
BroadcastReceiver是这样一个组件,它只是接收广播事件并作出反应。在系统
中有很多已有的广播事件,比如反应时区变化的,电池变化的,用户修改了系统
语言时的广播事件,也可以由应用程序自己定义广播事件,比如定义这样一个广
播事件,让其它的应用知道某些数据已经下载完毕了可以使用了。
一个应用可以有任意多个BroadcastReceiver来对它所关心的广播事件进行监
听并作出反应,所有的receiver都继承自BroadcastReceiver基类。BroadcastReceiver
不显示在用户界面上,然而,它可以启动一个Activity来作为它接收到的信息的一
种反应,或者它可以使用NotificationManager来提示用户,Notifications可以通过
不同的方式获得用户的注意,比如点亮呼吸灯,震动电话,播放一个声音等等,
它们一般放一个图标在状态栏上,来让用户可以打开获得这些信息。
2.2.4ContentProvider
ContentProvider是一个应用程序数据的集合,可以让其它的应用访问这些数
据,这些数据可以被存放在文件系统中,SQLite数据库中,或者其它可以存储数
据的地方。ContentProvider是一个基本的方法集合,来使其它的应用可以获得和
存储这些数据,然而应用不直接调用这些方法,而是使用一个ContentResolver对
象来调用这些方法,一个ContentResolver可以和任何的ContentProvider交流,它
和ContentProvider协作来管理系统中任何进程间的通信。
ContentProvider提供数据操作的接口。其实对应用而言,也可以将底层数据
第二章Android系统相关技术介绍及分析
9
封装成ContentProvider,这样可以有效地屏蔽底层操作的细节,并且使程序保持
良好的扩展性和开放性。Android提供了一些主要数据类型的ContentProvider,比
如音频、视频、图片和私人通讯录等。
2.2.5Intent
在一个Android应用中,上述这四种组件是独立的,它们之间可以互相调用,
协调工作,最终组成一个真正的Android应用。而这些组件之间的通讯,主要是由
Intent协助完成的。Intent负责对应用中一次操作的动作、动作对应的数据、附加
数据进行描述,Android则根据此Intent的描述,负责找到相应的组件,将意图传
递给它,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门
提供组件之间互相调用的相关信息,实现调用者与被调用者之间的解耦。
针对每种组件分别有对应的方法来启动它:
(1)一个Activity是通过传递一个Intent对象到ctivity()或者
ctivityForResult()来启动的(或者去做一些新的任务),被启动的这个
Activity可以通过getIntent()来获得导致它启动的那个Intent。
(2)一个Service是通过传递一个Intent对象到ervice()来启动的
(或者给一些新的命令给正在运行的Service),Android调用Service的onStart()方法,
并且把Intent对象传递给它。同样的,一个Intent可以传递到rvice()
方法里来建立一个介于正在运行的Service和调用它的组件之间的连接,这个
Service通过onBind()方法来接收这个Intent对象。
(3)一个应用可以通过传递一个Intent对象给像oadcast(),
deredBroadcast(),ickyBroadcast()这样的方法来发送一
个广播,Android通过调用对应的onReceive()方法将Intent传递给所有对这个广播
感兴趣的BroadcastReceiver。
2.2.6进程
组件运行的进程是在文件里配置的,每个组件都有一个
process属性可以用来指定进程的运行方式,process属性可以设置为某个组件运行
在它自己的进程中,也可以设置为几个组件共享一个进程,或者不共享。如果两
个应用共享一个LinuxurID并且具有相同的权限,那么就可以使这两个应用中
电子科技大学学士学位论文
10
的组件运行在相同的进程中。
所有的组件都在指定的进程中的主线程中实例化,系统调用这些组件就是从
主线程里发出的,其它的线程将不会对每个组件再实例化,所有的回调方法,比
如说own()或者组件的生命周期方法等等都是运行在这个主线程中
的,这就意味着当系统调用这个组件时,这个组件不能长时间地阻塞线程(比如说
网络操作,循环计算),因为这样会阻塞这个进程中的其它组件,所以可以将耗时
的任务分到其它的线程中。
Android系统会尽量维持一个进程的生命,直到最终需要为新的更重要的进程
腾出内存空间。为了决定哪个该杀哪个该留,系统会根据运行于进程内的组件的
状态把进程置于不同的重要性等级,当需要系统资源时,重要性等级越低的就越
先被淘汰。系统有5种重要性等级,重要性从高到低如下:
(1)前台进程。通常,在任何时间点,只有很少的前台进程存在。它们只有在
达到无法调合的矛盾时才会被停止,如内存太小而不能继续运行时。通常,到了
这时,设备就达到了一个内存分页调度状态,所以需要停止一些前台进程来保证
用户界面的反应。
(2)可见进程。一个可见进程是一个没有任何前台显示的组件,但是仍然可以
影响到用户当前屏幕所看见的东西。一个可见进程是极其重要的,只有在为了显
示所有前台进程时,即显示前台进程都不够时,才会停止可见进程。
(3)服务进程。一个服务进程是一个通过startService()启动的但是没有在前两
个分类中的进程,虽然服务进程不是用户直接能看见的,但是它也总是做一些用
户很关心的事(如在后台播放音频,从网络上下载东西),所以系统会一直保持服务
进程运行,除非内存不足以运行服务进程,前台进程,可见进程。
(4)后台进程。一个后台进程是运行一个当前对用户是不可见的Activity(这个
Activity的onStop()被调用),这样的进程不会直接影响到用户体验,所以系统可以
在任意时刻停止它们从而为前台、可见、以及服务进程们提供存储空间。通常有
很多后台进程在运行,它们被保存在一个LRU列表中用来确保最近刚被看到的
Activity的进程最后被杀。如果一个Activity正确地实现了它的生命周期方法,并
保存了它的当前状态,那么杀死它的进程将不会对用户的可视化体验造成影响。
因为当用户返回到这个Activity时,这个Activity会恢复它所有的可见状态。
(5)空进程。一个空进程就是进程里没有任何活动的应用组件,保留这类进程
的唯一理由是高速缓存,这样可以提高下一次一个组件要运行它时的启动速度。
系统经常为了平衡在进程高速缓存和底层的内核高速缓存之间的整体系统资源而
第二章Android系统相关技术介绍及分析
11
停止它们。
2.3开发环境IDE
Android的上层应用程序是用Java语言开发的,同时还需要基于Dalvik虚拟
机,所以,Google公司推荐使用主流的Java开发环境Eclip。只有Eclip还不
够,因为是使用Java语言进行开发,还应该有由SUN公司提供的JavaSDK(其中
包括JRE:JavaRuntimeEnvironment)。此外,Android的应用程序开发和Java开
发有较大区别的,所以还需要有Google提供的AndroidSDK。同时,还需要在
Eclip安装ADT,为Android开发提供开发工具的升级或者变更,是Eclip下开
发工具升级的下载工具。
简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用
程序的开发。
(1)JavaSDK
(2)Eclip
(3)AndroidSDK
(4)ADT
Android开发平台搭建步骤:
(1)首先到/downloads/下载Eclip集成开发环境并且解
压,这里推荐下载JavaEE集成版本,可以为平台的搭建省下不少工作。接着再
去/java/downloads/站点下载javaSDK后安装,下载
/android/android-sdk-windows-4.0_,AndroidSDK后解压。
第一步下载工作就结束了。
(2)双击Eclip解压后目录中的然后启动,选择Eclip菜单中的
Help->InstallNewSoftware->选项卡上的AvailableSoftware,点击右侧的“Add”
输入/android/eclip/后选择确定,然后在“Workwith”下拉
菜单中选择刚才输入的网址。此时会出现一个DeveloperTools选项,勾上以后点
击Next之后Eclip会自动在网上查找Android开发工具插件,然后在Android
DDMS和AndroidDevelopmentTools中,选中这两个点击Finish,Eclip就会自
动下载并安装Android插件了,最后会提示重启Eclip。
(3)重启后选择Eclip菜单中的Windows->Preferences在左侧的Android项
电子科技大学学士学位论文
12
目中的SDKLocation中填入AndroidSDK解压后的目录,然后点击Apply确定。
(4)在Windows的系统变量中的path变量中添加一个值,该值指向解压后的
AndroidSDK目录下的tools文件夹。
2.4本章小结
本章主要对Android系统平台的特征、体系架构以及Android应用程序的结构
和工作机制进行了详细的阐述和分析。Android系统从下到上依次包括Linux内核
层、Libraries系统库和Android运行时环境层、应用程序框架层和应用程序层四层
结构,我们分别对每层进行了介绍。而一个Android应用程序是由Activity、Service、
BroadcastReceiver、ContentProvider四个部分组成,我们也对每个组件进行了介绍,
同时还分析了这些组件之间相互协调通信的工作机制以及Android系统中进程的
工作机理。
第三章Android系统网络流量监控方案及相关分析
13
第三章Android系统网络流量监控设计方案及相关分析
本次Android系统网络流量监控所采用的核心设计方案步骤为:tcpdump工具
抓包->解析Pcap抓包文件->将解析出的流量日志记录在文本中。
在进行网络流量监控时,首先使用移植于Android系统内部的抓包工具
tcpdump来进行抓包操作,tcpdump是一个用于在系统底层捕获网络流量数据包的
可运行的二进制文件。经由tcpdump抓包会产生一个格式为.pcap的抓包文件,里
面记录了所捕获到的所有流量包信息,Pcap文件以其自有的文件格式来存储每个
Packet的内容,我们的目的就是要根据其文件格式来逐步解析出每个Packet内容
里的一些字段,进而将解析结果以日志的形式输出到文本文件中保存起来。
3.1tcpdump移植入Android系统
将tcpdump移植入Android系统要完成以下的步骤:
(1)确保Android手机已获得root权限;
(2)将Android手机与电脑USB相连,开启手机的“USB调试”,打开Windows
命令提示符窗口;
(3)将tcpdump推送至Android手机上,在命令提示符窗口中输入命令:adb
pushG:/tcpdump/data/local/tcpdump;
(4)给tcpdump增加可执行权限,在命令提示符窗口中输入命令:chmod777
/data/local/tcpdump;
(5)运行tcpdump,以测试tcpdump是否移植成功,输入以下命令启动抓包:
/data/local/tcpdump-p–vv-s0-w/storage/sdcard0/NetworkMonitor/,其
中,tcpdump命令的各个参数含义如下:
#"-p":disablepromiscuousmode(不使用混杂模式)
#"-s0":capturetheentirepacket(-s参数用以指定数据包捕获长度,此处指定为
0,意为抓取完整的数据包)
#"-w*.pcap":writepacketstoafile(将结果写入一个pcap文件,而不在终端上
直接显示)
在Android手机上进行相关操作,产生通信流量数据包,通信行为完成后在命
电子科技大学学士学位论文
14
令提示符窗口中使用Ctrl+C组合键停止抓包过程。
整个移植操作如图所示:
图3-1tcpdump移植Android系统
若要在Android应用程序中使用tcpdump工具,需要使用AndroidSDK中的
Process进程类,通过time().exec("su"),得到一个具有超级用户权
限的Linux命令运行环境的Process对象,然后再通过调用该Process对象的
getOutputStream()方法,得到该Process对象的输出流,从而能够通过该输出流将
上述的tcpdump抓包命令输出到Linux命令运行环境中,开始执行抓包的操作过程,
这时Android系统就会通过tcpdump在底层捕获网络流量数据包,并将其存入
/storage/sdcard0/NetworkMonitor/目录下的文件中。
3.2Pcap文件格式
下面是Pcap文件格式的图示和详细说明:
第三章Android系统网络流量监控方案及相关分析
15
图3-2Pcap文件格式图
首先是Pcap文件的文件头,共24字节,各字段说明如下:
Magic:4B,0x1A2B3C4D:用来标示文件的开始;
Major:2B,0x0200:当前文件主要的版本号;
Minor:2B,0x0400:当前文件次要的版本号;
TimeZone:4B,当地的标准时间,全零;
SigFigs:4B,时间戳的精度,全零;
SnapLen:4B,最大的存储长度;
LinkType:4B,链路类型,最为常见的类型就是1,即以太网链路。
然后是每个数据流量包Packet的PacketHeader和PacketData,PacketHeader
共16字节,各字段说明如下:
Timestamp:4B,时间戳高位,精确到conds;
Timestamp:4B,时间戳低位,精确到microconds;
Caplen:4B,当前数据区的长度,即抓取到的数据帧长度,由此可以得到下
一个数据帧的位置;
Len:4B,离线数据长度,即网络中实际数据帧的长度,一般不大于caplen,
多数情况下和Caplen数值相等;
PacketData:即Packet(通常就是链路层的数据帧去掉前面用于同步和标识
帧开始的8字节和最后用于CRC校验的4字节)具体内容,长度就是Caplen,这
个长度的后面,就是当前Pcap文件中存放的下一个Packet数据包,也就是说,PCAP
文件里面并没有规定捕获的Packet数据包之间有什么间隔字符串,我们需要靠第
一个Packet包确定下一组数据在文件中的起始位置,向后以此类推。
电子科技大学学士学位论文
16
3.3Pcap文件的解析
基于以上对Pcap文件格式的说明和分析,我们采用了java的I/O流编程来对
Pcap文件进行解析,使用java中的RandomAccessFile类对象对Pcap文件进行随
机访问,RandomAccessFile类的主要方法有:skipBytes(longi),用来指定将文件
的位置指针跳过多少个字节;read(byte[]b),用来将最多(即数组b的长
度)个数据字节从此文件位置指针处开始读入字节数组。具体解析思路如下:
首先,设置初始偏移量offt为24,用于跳过Pcap文件头,开始解析第一个
Packet,读取4字节(即Timestamp时间戳字段)存入数组中,转化为表示时间
点的字符串,跳过4字节,再读取4字节(即Caplen数据长度字段)存入数组中,
转化为表示数据长度的int类型变量,然后跳过30个字节,直接定位到IP源地址
字段,读取4字节的IP源地址存入数组中,转化为字符串形式,再读取4字节的
IP目的地址存入数组中,同样转化为字符串形式,接着,把上述获取的4个字段
信息拼接成一条字符串语句,以一行的形式输出到文本文件中保存起来,同时通
过获取的数据长度字段值和已跳过的字节数计算出第二个Packet的PacketHeader
起始位置,从而能够再按照解析第一个Packet的流程来解析它,后面每个Packet
的解析依次类推,直到最后一个Packet解析完毕。
Pcap文件解析的核心算法代码如下:
publicclassParThreadextendsThread{
privatebyte[]time=newbyte[4];//存放Timestamp时间戳字段的数组
privatebyte[]size=newbyte[4];//存放Caplen数据长度字段的数组
privatebyte[]source=newbyte[4];//存放IP源地址字段的数组
privatebyte[]destination=newbyte[4];//存放IP目的地址字段的数组
@Override
publicvoidrun(){
Filef1=newFile("/storage/sdcard0/NetworkMonitor/");
Filef2=newFile("/storage/sdcard0/NetworkMonitor/");
RandomAccessFileraf=newRandomAccessFile(f1,"r");
OutputStreamWriteros=newOutputStreamWriter(new
BufferedOutputStream(newFileOutputStream(f2)));
intnum=0;
longlength=();//获取Pcap文件总长度
第三章Android系统网络流量监控方案及相关分析
17
intpar=24;//设置初始已解析数据长度24,用于与length比较
intofft=24;//设置初始偏移量24,用于跳过Pcap文件头
while(par
offt=parPacket(raf,os,offt);
par+=50+offt;//更新已解析数据长度
num++;//统计解析的Packet数量
}
();
();
}
privateintparPacket(RandomAccessFileraf,OutputStreamWriteros,intofft){
tes(offt);
(time);//读取Timestamp时间戳字段存入数组
Stringt=getTime(bytes2HexString(time));//转化为字符串形式
tes(4);
(size);//读取Caplen数据长度字段存入数组
ints=getSize(bytes2HexString(size));//转化为int类型变量
tes(30);
(source);//读取IP源地址字段
InetAddressi1=ddress(source);
sourceIP=tAddress();//转化为字符串形式
(destination);//读取IP目的地址字段
InetAddressi2=ddress(destination);
destinationIP=tAddress();//转化为字符串形式
("时间:"+t+"大小:"+s+"字节"+"源IP:"+sourceIP+"目的IP:
"+destinationIP);
("rn");
();
returns-34;//返回解析下一个Packet包需要跳过的文件位置指针
偏移量
}
}
电子科技大学学士学位论文
18
3.4本章小结
本章主要对Android系统网络流量监控的核心设计方案进行了阐述和分析,先
介绍了将tcpdump抓包工具移植入Android系统内部的方法步骤,然后详细说明了
Pcap抓包文件的文件格式,最后基于对文件格式的分析,阐述了解析Pcap文件并
将解析结果以流量日志的形式输出到文本文件中的具体实现思路,并给出了核心
算法代码,对代码关键部分做了相应的注释。
第四章Android系统网络流量监控具体实现及相关分析
19
第四章Android系统网络流量监控具体实现及相关分析
本次Android系统网络流量监控的具体实现,即课题工程的架构实现如下图
所示:
图4-1工程架构实现图
如图所示,在主界面MainActivity中放置了四个Button按钮控件,前面两个
Button分别用于启动和关闭网络流量监控的NMService类,第三个Button用于启
动ParThread线程,即上一章节3.3中用于解析Pcap文件的线程代码,同时跳转
电子科技大学学士学位论文
20
到LogActivity界面模块显示流量日志,第四个Button用于跳转到TrafficActivity
界面模块显示流量统计。下面将详细阐述各个部分的实现。
4.1主界面模块的实现
主界面模块是用户进行操作的入口显示界面,该主界面里设置了4个可响应
点击操作的按钮控件,具体就是在MainActivity主界面类里面配置布局了4个
Button组件,在这4个Button组件上绑定了相应的监听器,用来指示当用户点击
按钮时会执行什么操作,这是Android界面布局的通常做法。
主界面模块的实现效果如图:
图4-2主界面图
主界面MainActivity的核心代码如下:
publicclassMainActivityextendsActivity{
privateButtonstartButton;
第四章Android系统网络流量监控具体实现及相关分析
21
protectedvoidonCreate(BundlesavedInstanceState){
te(savedInstanceState);
tContentView(ty_main);//设置界面布局方式
startButton=(Button)findViewById(Start);
//在Button控件上绑定监听器
lickListener(newOnClickListener(){
publicvoidonClick(Viewv){
//当用户点击按钮时执行的操作
…………(省略代码见后面章节的分析)
}
});
}
}
Android系统在启动这个主界面MainActivity时,会在onCreate()这个生命
周期的方法里进行一些初始化的工作,首先会通过tContentView()方法设置这
个Activity的界面布局,界面布局由参数ty_main指定的布局资源文
件activity_来决定,activity_文件部分代码如下:
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="网络流量监控"
android:textColor="#FF0000"
android:textSize="25sp"/>
android:id="@+id/buttonStart"
电子科技大学学士学位论文
22
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:text="开启监控模式"/>
从activity_布局文件的配置可以看出,主界面的布局使用了相对布局
模式RelativeLayout,即控件之间根据它们的相对位置来决定具体放置的位置。第
一个控件是一个TextView控件,即放置纯文本的控件,结合图4-2的主界面图就
可知道是放置于最顶端的红色字体的“网络流量监控”。接下来是从上往下依次连
续放置了4个Button按钮控件,每个Button控件都是通过对齐上一个Button控件
的左边缘和设置上下之间的距离来确定其位置的,同时还设置了每个Button控件
所显示的文本。Android工程项目里通常都是通过这种xml格式的文件来配置屏幕
界面的布局样式的。
在MainActivity设置完界面布局后,接下来在程序里通过findViewById()方
法获取到布局配置里的4个Button控件的对象实例,再通过每个Button控件的
tOnClickListener()方法来给每个Button控件设置相应的监听器,该监听器是
实现了OnClickListener接口的匿名内部类,当用户点击Button按钮时,程序就会
执行这个监听器的OnClick()方法,从而响应用户的点击操作。
4.2网络流量监控模块的实现
4.2.1网络流量监控模式的开启和关闭
网络流量监控模式的开启和关闭通过前两个Button按钮控件来完成,它们是
通过启动和停止NMService这个服务类来实现的。当点击startButton按钮时,会
执行监听器的OnClick()方法,响应用户的操作,通过一个Intent对象设置从本
MainActivity的实例启动NMService类的一个实例,同时通过Toast组件在屏幕下
方显示临时的消息提示“已开启流量监控模式”。Toast是一个View视图,快速
地为用户显示少量的信息,Toast在应用程序上浮动显示信息给用户,它永远不会
获得焦点,不影响用户的输入等操作,主要用于一些帮助或提示,其一般使用方
第四章Android系统网络流量监控具体实现及相关分析
23
法为xt(Contextcontext,CharSequencetext,intduration).show(),其将会
在屏幕下方显示一条内容为text的提示信息,然后在一段时间后消失。
同样,当点击stopButton按钮时,就会通过一个Intent对象设置从本
MainActivity的实例停止已经启动的NMService类的实例,同时通过Toast组件在
屏幕下方显示临时的消息提示“已关闭流量监控模式”。
部分实现代码如下:
lickListener(newOnClickListener(){
publicvoidonClick(Viewv){
Intentintent=newIntent();
ss(,);
startService(intent);
xt(,"已开启流量监控模式
",_SHORT).show();
}
});
4.2.2网络流量监控Service类的实现
当通过Intent对象启动该NMService服务时,会执行该类里面的
onStartCommand()方法,通过p=time().exec("su"),得到一个具
有超级用户权限的Linux命令运行环境的Process对象,然后通过DataOutputStream
dos=newDataOutputStream(putStream()),得到该Process对象的输出流,
并封装成一个DataOutputStream类的数据输出流对象,从而能够通过输出
"/data/local/tcpdump-p-vv-s0-w/storage/sdcard0/NetworkMonitor/"命
令字符串的字节形式到Linux命令运行环境中,执行抓包的tcpdump命令操作,这
时Android系统就会通过tcpdump在底层捕获网络流量数据包,并将其存入
/storage/sdcard0/NetworkMonitor/目录下的文件中。
而当通过Intent对象停止该NMService服务时,会执行该类里面的onDestroy
()方法,通过调用Process对象的destroy()方法,摧毁掉这个Linux命令运行
环境的进程,从而终止tcpdump抓包命令的执行,停止抓包。
NMService类的核心代码如下:
publicclassNMServiceextendsService{
电子科技大学学士学位论文
24
privateProcessp;
publicintonStartCommand(Intentintent,intflags,intstartId){
p=time().exec("su");
DataOutputStreamdos=newDataOutputStream(putStream());
ytes("/data/local/tcpdump–p-vv-s0-w
/storage/sdcard0/NetworkMonitor/");
();
();
tCommand(intent,flags,startId);
}
publicvoidonDestroy(){
y();
roy();
}
}
4.3流量日志界面模块的实现
4.3.1启动LogActivity类
当通过前两个Button按钮的操作捕获到网络流量数据后,可通过点击第三个
logButton按钮来查看流量日志,当点击logButton时,会执行监听器的OnClick()
方法,首先启动一个ParThread线程用于解析存储网络流量数据的Pcap文件,
ParThread线程类见前一章节3.3中的代码,同时通过Toast组件在屏幕下方显示
临时的消息提示“等待解析中...”,以便提示用户应用程序正在解析文件。当该线
程执行完毕后,会通知绑定在该线程上的一个Handler对象(Handler类可用于处
理异步消息,通常与线程类结合使用),该Handler对象就会执行其HandleMessage
()方法,首先通过Toast组件在屏幕下方显示临时的消息提示“解析完成”,然
后通过一个Intent对象启动另一个Activity即显示流量日志的界面LogActivity类
的实例,同时将解析的网络流量包数量大小size参数传递过去。
第四章Android系统网络流量监控具体实现及相关分析
25
部分实现代码如下:
lickListener(newOnClickListener(){
publicvoidonClick(Viewv){
parHandler=newHandler(){
publicvoidhandleMessage(Messagemsg){
Intentintent=newIntent();
ss(,);
ra("size",size);
startActivity(intent);
}
};
newParThread(parHandler).start();
}
});
4.3.2LogActivity类的数据适配
LogActivity是一个继承于ListActivity的子类,即一个以列表形式展现屏幕内
容的Activity,它也是Activity的一个子类,同时本身还实现了关于List操作的众
多接口。该ListActivity在屏幕上设置一个ListView控件来布局,这需要在其使用
的布局xml文件中包含一个id为"@id/android:list"的ListView来实现。同时,还要
通过tListAdapter(newLogAdapter(this,size))方法传入一个BaAdapter对象实例
来完成每一条数据内容与ListView的每个条目的适配工作。
Adapter适配器在Android应用程序中起着非常重要的作用,应用也非常广泛,
它可以被看作是数据源和UI组件之间的桥梁,而BaAdapter是Android应用程
序中经常使用到的基础数据适配器,它的主要用途是将一组数据传到ListView、
Spinner、Gallery及GridView等UI界面组件中完成适配。要实现自定义的
BaAdapter适配器类需要复写该类中的getCount()方法和getView()方法,
getCount()方法指示一共有多少个条目需要适配,getView()方法配置每个条
目显示的具体视图对象。
我们自定义了一个继承自BaAdapter基类的适配器类LogAdapter来完成数
据的适配工作。该适配器类通过getCount()方法返回一个size变量判断一共有
电子科技大学学士学位论文
26
多少条内容条目需要布局,该size变量值即是之前传递过来的解析的网络流量包
数量大小。然后通过getView()方法来配置每个条目的内容,具体实现是打开
"/storage/sdcard0/NetworkMonitor/"目录下的文件(即存放Pcap文件解析
结果的流量日志文件)的输入流,依次读取一行文本(对应一条流量日志信息),
设置为每个条目的TextView所要显示的文本内容,直到读取完最后一行,关闭该
输入流对象资源,就完成了日志流量信息与ListView每个内容条目的适配工作。
LogAdapter的部分核心代码如下:
publicclassLogAdapterextendsBaAdapter{
privateintsize;
privateFilef=newFile("/storage/sdcard0/NetworkMonitor/");
privateBufferedReaderbr=null;
publicLogAdapter(intsize){
=size;
br=newBufferedReader(newFileReader(f));
}
publicintgetCount(){
returnsize;
}
publicViewgetView(intposition,Viewarg1,ViewGrouparg2){
LayoutInflaterlayoutInflater=(context);
view=e(_item,null);
TextViewitem=(TextView)ewById();
t(ne());
returnview;
}
}
流量日志模块LogActivity的界面效果如下图:
第四章Android系统网络流量监控具体实现及相关分析
27
图4-3流量日志界面图
4.4流量统计界面模块的实现
4.4.1流量统计的实现方法
本应用程序还同时实现了计算每个应用进程在网络流量监控模式阶段的总通
信流量(分为上行流量和下行流量)的功能,具体是通过使用AndroidSDK的包
管理器PackageManager类和自带的流量统计工具类TrafficStats类来实现的。
PackageManager相关类API是对所有基于加载信息的数据结构的封装,包括
以下功能:
(1)安装,卸载应用;
电子科技大学学士学位论文
28
(2)查询应用权限的相关信息;
(3)查询Application的相关信息;
(4)查询已安装应用;
(5)增加,删除应用权限;
(6)清除用户数据、缓存、代码段等。
对于Android系统的流量统计来说,Google在2.2版本中新加入了TrafficStats
这个类用来直接获取流量统计信息,而TrafficStats类实质上也是通过读取Linux
提供的文件对象系统类型的文本进行解析流量统计信息的。TrafficStats类中,提供
了多种静态方法,可以直接调用获取,返回类型均为long型,如果返回等于-1代
表UNSUPPORTED,即当前设备不支持统计。常用静态方法有:
staticlonggetTotalRxBytes()//获取总的接受字节数
staticlonggetTotalRxPackets()//获取总的接受数据包数
staticlonggetTotalTxBytes()//获取总的发送字节数
staticlonggetTotalTxPackets()//获取总的发送数据包数
staticlonggetUidRxBytes(intuid)//获取某个网络UID的接受字节数
staticlonggetUidTxBytes(intuid)//获取某个网络UID的发送字节数
本应用程序实现流量统计功能的具体思路是:首先通过PackageManager类的
getInstalledPackages(_PERMISSIONS)方法获取Android系统
中所有具有联网权限的应用包信息,然后通过使用TrafficStats类的静态方法
getUidRxBytes(intuid)和getUidTxBytes(intuid),可以获取某个网络UID(即某个
应用进程)在某个时间点的接收字节数和发送字节数,于是在开启和关闭网络流
量监控模式时分别调用一次该方法,将两个时间点的接收(或发送)字节数相减,
即可得到这段时间内的下行(或上行)流量。
4.4.2TrafficActivity类的数据适配
当点击trafficButton时,会执行监听器的OnClick()方法,通过一个Intent
对象启动另一个Activity即显示流量统计的界面TrafficActivity类的实例,同时将
每个应用进程的上行流量和下行流量数据传递过去。这个数据是通过java的容器
HashMap类封装起来的,HashMap是一个以键值对的存储形式来存放数据的数据
结构,是java中最常用的容器类,它通过put(Stringkey,Stringvalue)方法来存入键
值对,通过get(Stringkey)方法来根据键获取相应的值,同时还有一个size()方法可
第四章Android系统网络流量监控具体实现及相关分析
29
用于获取容器内的键值对数量。而这个TrafficActivity类也同样是一个ListActivity
的子类,通过tListAdapter()方法传入一个BaAdapter的子类TrafficAdaper
对象实例来完成每一条数据内容与ListView的每个条目的适配工作,其工作原理
与LogAdapter类的实现类似。
TrafficAdapter的部分核心代码如下:
publicclassTrafficAdapterextendsBaAdapter{
Map
publicTrafficAdapter(Map
fficMap=appTrafficMap;
}
publicintgetCount(){
();
}
publicViewgetView(intposition,Viewarg1,ViewGrouparg2){
LayoutInflaterlayoutInflater=(context);
view=e(_item,null);
Map
TextViewpackname=(TextView)ewById(me);
TextViewup=(TextView)ewById();
TextViewdown=(TextView)ewById();
t("进程:"+packName);
t("上行流量:"+("up")+"字节");
t("下行流量:"+("down")+"字节");
returnview;
}
}
流量统计模块TrafficActivity的界面效果如下图:
电子科技大学学士学位论文
30
图4-4流量统计界面图
4.5本章小结
本章主要对Android系统网络流量监控的具体实现进行了阐述和分析,先介绍
了主界面MainActivity布局的具体细节,然后介绍了通过NMService类来实现网
络流量监控服务的开启和关闭,最后介绍了流量日志界面LogActivity和流量统计
界面TrafficActivity的具体实现,同时给出了相关代码并进行了相应的分析,还给
出了应用程序的实现效果图。
第五章结论
31
第五章结论
5.1本文的主要工作
本次设计是基于Android的网络流量监控设计,其主要意义在于通过对
Android移动设备上的网络数据进行实时连续的采集来监测网络流量,对获得的流
量数据进行统计计算,并记录进入日志中,从而分析得到网络连接相关的性能指
标。本文的工作主要如下:
(1)对本次课题研究的意义和背景以及发展趋势进行了介绍和分析,Android
系统网络流量监控是Android领域目前和未来的热门和趋势;
(2)介绍了Android系统的相关技术,主要分析了Android系统的体系架构,
分为Linux内核层、Libraries系统库和Android运行时环境层、应用程序框架层和
应用程序层四层结构,还介绍了Android系统应用程序结构,主要分析了Activity、
Service、BroadcastReceiver、ContentProvider、Intent以及进程的相关概念和原理,
这些都是Android开发的基础理论和知识;
(3)阐述了Android系统网络流量监控的核心原理方案,介绍了将tcpdump抓
包工具移植入Android系统内部的方法步骤,然后基于对Pcap抓包文件的文件格
式的详细说明,分析了解析Pcap文件并将解析结果以流量日志的形式输出到文本
文件中的具体实现思路,并给出了核心算法代码;
(4)在基于采用tcpdump抓包的核心原理方案的基础上,阐述了整个Android
系统网络流量监控的设计实现方案,详细介绍了主界面MainActivity布局实现的具
体细节,还介绍了通过NMService服务类的使用来实现网络流量监控模式的开启
和关闭,最后集中阐述了流量日志界面LogActivity和流量统计界面TrafficActivity
的具体实现,分析了ListActivity和适配器的使用,同时给出了相关代码和应用程
序的实现效果图。
最终,本次Android系统网络流量监控设计的应用程序能够良好地运行,在开
启和关闭网络流量监控模式的操作后,能够解析捕获的流量包文件并以流量日志
的形式一条一条记录地将解析结果展示出来,同时还能查看每个应用进程的上行
流量和下行流量的统计结果,完成了本次课题研究的任务。
电子科技大学学士学位论文
32
5.2进一步研究的建议
本文主要完成了通过tcpdump工具来捕获流量包,解析Pcap文件并以流量日
志的形式记录下来,从而在Android系统平台上实现网络流量监控设计的工作。若
对本课题开展进一步研究,有如下建议:
(1)可以在捕获流量包文件的基础上,做更多的解析工作,解析出更多的流量
信息,以不同的形式加以利用和展现,扩展其应用范围;
(2)可以在网络流量监控和统计的基础上,针对不同的应用场景,通过算法来
实现更多的实际需要,比如可根据流量情况设置信息推送效果的应用方式;
(3)同时可以考虑采用其它的工具和方法来捕获网络流量,进而从不同的角度
来实现网络流量监控的设计实现。
5.3感想与体会
经过几个多月的努力,终于完成了Android系统网络流量监控的设计实现。由
于对java技术和Android系统有着浓厚的兴趣,故而引发了我对这个研究课题的
兴致,并在一步一步的探索之中完成了这个应用程序软件,实现了其流量监控的
功能。
在这整个过程中,我学到了很多关于Android系统的知识,比如Android开发
环境的搭建,Android系统架构的体系,Activity、Service、Intent等常用Android
组件的运用,而最重要的一点是,我学会了利用现有的文档和资源去解决开发过
程中遇到的许多问题,学会了在互联网各种博客和论坛上去寻找具体的解决方案。
目前,这个应用程序软件运行状况良好,但是我认为在整个课题工程的构思
方面还有不足之处,用户操作界面也还不够灵活,这些问题还有待今后逐步解决。
毕业设计的顺利完成,首先我要感谢我的指导老师秦老师的帮助,感谢您提
出宝贵的意见和建议,感谢您的细心指导和关怀。您辛苦付出,指导我们怎样按
要求完成毕业设计相关的工作,提出最中肯的意见,再次向我的指导老师致以最
衷心的感谢和深深的敬意。
致谢
33
致谢
光阴似箭,转眼之间,大学青春宝贵的四年求学生涯已经将要离我们远去,
在此由衷地感谢养育我的父母,陪伴我四年的老师、同学,谢谢!
大学四年,在学校成长,学校给予我的关心和帮助是无微不至的,学校和学
院给我们提供了最优质、最丰富的学习资源,对我们大学本科的学习发展起到了
极其重要的促进作用,在此说一声:“谢谢!谢谢电子科技大学,谢谢通信与信息
工程学院!”。
伴随着大学四年成功的完结,本科毕业设计论文的完成也是至关重要的,所
以,我要衷心地感谢我的毕设指导老师秦臻老师,感谢您在大四学年里给予我的
关心和帮助,对我毕设的热心指导,在此说一声:“谢谢!谢谢您,秦老师!”。
再次感谢陪伴我大学四年的同学们,我们共同学习,共同欢笑,也共同成长。
我大学四年的欢声笑语里少不了你们,没有你们的大学四年生活将是无彩的,在
此说一声:“谢谢!谢谢你们,亲爱的同学们!”。
最后我必须要感谢我的父母,是你们辛苦养育我,关心我的成长,是你们无
私、伟大的爱,才有了今天的我。我成功高兴的时候,是你们站在我身边给我祝
福,提醒我要继续努力;我失败沮丧的时候,同样是你们站在我身边给我帮助,
让我学会重新站立起来。只想道一声:“爱你们,我亲爱的爸爸、妈妈!”。
感谢所有陪伴过,支持过我的朋友们,祝你们幸福、快乐!
电子科技大学学士学位论文
34
参考文献
[1]余志龙.GoogleAndroidSDK开发范例大全[M].北京.人民邮电出版社,2009.
[2]杨丰盛.Android应用开发揭秘.北京.机械工业出版社,2010.
[3]GONGLEI,pmentandRearchofMobileTerminationApplication
BadonAndroid[J].ComputerAndModernization.2008.
[4]dWirelessApplicationDevelopment[M].Addison-Wesley.2010.
[5]郭宏志.Android应用开发详解[M].北京.电子工业出版社,2010.
[6]吴亚峰,苏亚光.Android应用案例开发大全[M].北京.人民邮电出版社,2011.
[7]靳岩,姚尚朗.GoogleAndroid开发入门与实战.北京.人民邮电出版社,2009.
[8]王向辉,张国印,沈洁.Android应用程序开发.北京.清华大学出版社,2010.
[9]韩超,梁泉.Android系统开发原理及开发要点详解[M].北京.电子工业出版社,2010.
[10]高焕堂.Android应用框架原理与程式设计[M].北京.清华大学出版社,2008.
[11]GoogleAndroid开发官方文档./.2014.
[12]EoeAndroid开发社区./.2014.
外文文献原文
35
外文文献原文
ApplicationFundamentals
roidSDK
toolscompileyourcode—alongwithanydataandresourcefiles—intoanAPK:an
Androidpackage,filecontainsall
thecontentsofanAndroidappandisthefilethatAndroid-powereddevicesuto
installtheapp.
Onceinstalledonadevice,eachAndroidapplivesinitsowncuritysandbox:
TheAndroidoperatingsystemisamulti-urLinuxsysteminwhicheachappisa
differentur.
Bydefault,thesystemassignachappauniqueLinuxurID(theIDisud
onlybythesystemandisunknowntotheapp).Thesystemtspermissionsforallthe
filesinanappsothatonlytheurIDassignedtothatappcanaccessthem.
Eachprocesshasitsownvirtualmachine(VM),soanapp'scoderunsinisolation
fromotherapps.
Bydefault,dstartstheprocess
whenanyoftheapp'scomponentsneedtobeexecuted,thenshutsdowntheprocess
whenit'snolongerneededorwhenthesystemmustrecovermemoryforotherapps.
Inthisway,,
eachapp,bydefault,hasaccessonlytothecomponentsthatitrequirestodoitswork
eatesaverycureenvironmentinwhichanappcannotaccess
partsofthesystemforwhichitisnotgivenpermission.
However,therearewaysforanapptosharedatawithotherappsandforanappto
accesssystemrvices:
It'spossibletoarrangefortwoappstosharethesameLinuxurID,inwhichca
theyareabletoaccesachother'ervesystemresources,appswiththe
sameurIDcanalsoarrangetoruninthesameLinuxprocessandsharethesameVM
(theappsmustalsobesignedwiththesamecertificate).
Anappcanrequestpermissiontoaccessdevicedatasuchastheur'scontacts,
电子科技大学学士学位论文
36
SMSmessages,themountablestorage(SDcard),camera,Bluetooth,
permissionsmustbegrantedbytheuratinstalltime.
T
restofthisdocumentintroducesyouto:
Thecoreframeworkcomponentsthatdefineyourapp.
Themanifestfileinwhichyoudeclarecomponentsandrequireddevicefeatures
foryourapp.
Resourcesthatareparatefromtheappcodeandallowyourapptogracefully
optimizeitsbehaviorforavarietyofdeviceconfigurations.
AppComponents
componentsareactualentrypointsfortheurandsomedependoneachother,buteach
oneexistsasitsownentityandplaysaspecificrole—eachoneisauniquebuilding
blockthathelpsdefineyourapp'soverallbehavior.
pervesadistinct
purpoandhasadistinctlifecyclethatdefineshowthecomponentiscreatedand
destroyed.
Herearethefourtypesofappcomponents:
Activities
mple,anemail
appmighthaveoneactivitythatshowsalistofnewemails,anotheractivitytocompo
anemail,ghtheactivitiesworktogether
toformacohesiveurexperienceintheemailapp,eachoneisindependentofthe
,adifferentappcanstartanyoneoftheactivities(iftheemailapp
allowsit).Forexample,acameraappcanstarttheactivityintheemailappthat
composnewmail,inorderfortheurtoshareapicture.
Services
Arviceisacomponentthatrunsinthebackgroundtoperformlong-running
cedoesnotprovideaur
mple,arvicemightplaymusicinthebackgroundwhiletheuris
inadifferentapp,oritmightfetchdataoverthenetworkwithoutblockingur
外文文献原文
37
rcomponent,suchasanactivity,canstartthervice
andletitrunorbindtoitinordertointeractwithit.
Contentproviders
storethedatainthe
filesystem,anSQLitedataba,ontheweb,oranyotherpersistentstoragelocation
hthecontentprovider,otherappscanqueryorevenmodify
thedata(ifthecontentproviderallowsit).Forexample,theAndroidsystemprovidesa
contentproviderthatmanagestheur',anyappwiththe
properpermissionscanquerypartofthecontentprovider(suchas
)toreadandwriteinformationaboutaparticularperson.
Contentprovidersarealsoufulforreadingandwritingdatathatisprivateto
mple,theNotePadsampleappusacontentprovider
tosavenotes.
Broadcastreceivers
Abroadcastreceiverisacomponentthatrespondstosystem-widebroadcast
oadcastsoriginatefromthesystem—forexample,abroadcast
announcingthatthescreenhasturnedoff,thebatteryislow,orapicturewascaptured.
Appscanalsoinitiatebroadcasts—forexample,toletotherappsknowthatsomedata
ghbroadcast
receiversdon'tdisplayaurinterface,theymaycreateastatusbarnotificationtoalert
mmonly,though,abroadcastreceiveris
justa"gateway"toothercomponentsandisintendedtodoaveryminimalamountof
tance,itmightinitiatearvicetoperformsomeworkbadontheevent.
AuniqueaspectoftheAndroidsystemdesignisthatanyappcanstartanother
app’mple,ifyouwanttheurtocaptureaphotowiththedevice
camera,there'sprobablyanotherappthatdoesthatandyourappcanuit,insteadof
'tneedtoincorporateoreven
d,youcansimplystarttheactivityinthe
mplete,thephotoivenreturnedtoyour
r,itemsasifthecameraisactuallyapartofyour
app.
Whenthesystemstartsacomponent,itstartstheprocessforthatapp(ifit'snot
电子科技大学学士学位论文
38
alreadyrunning)mple,if
yourappstartstheactivityinthecameraappthatcapturesaphoto,thatactivityrunsin
theprocessthatbelongstothecameraapp,notinyourapp'ore,unlike
appsonmostothersystems,Androidappsdon'thaveasingleentrypoint.
Becauthesystemrunachappinaparateprocesswithfilepermissionsthat
restrictaccesstootherapps,yourappcannotdirectlyactivateacomponentfromanother
roidsystem,however,,toactivateacomponentinanotherapp,you
mustdeliveramessagetothesystemthatspecifiesyourintenttostartaparticular
temthenactivatesthecomponentforyou.
摘自GoogleAndroid开发官方网站
/guide/components/
外文文献翻译
39
外文文献翻译
Android应用基础
Android应用程序是用Java编程语言编写的。Android的SDK工具会编译你
的代码,并将任何相关数据和资源文件一起打包成APK:一个Android包,就是
一个以apk为后缀的存档文件,包含了一个Android应用程序的所有内容,是
Android平台的设备用于安装应用的程序文件。
一旦安装在设备上,每个Android应用程序存在在它自己的安全沙箱中:
Android操作系统是一个多用户的Linux系统,每个应用程序是不同的用户。
默认情况下,系统将分配给每个应用程序唯一的Linux用户ID(该ID只被系
统使用,是未知的应用程序)。该系统设置在一个应用程序中的所有文件的权限,
以便只有分配给该应用程序的用户ID可以访问它们。
每个进程都有自己的虚拟机(VM),因此一个应用程序的代码隔离从其他应
用程序运行。
默认情况下,每一个应用程序运行它自己的Linux进程。Android启动时需要
执行的任何应用程序的组件的过程,然后关闭该进程,当它不再需要时或系统必
须恢复内存的其他应用程序。
在这种方式中,Android系统实现了最小特权原则。也就是说,每个应用程序,
默认情况下,只能访问到它需要做的工作并没有更多的组件。这将创建在其中一
个应用程序不能访问它没有获得许可的系统部分一个非常安全的环境。
然而,有办法让一个应用程序与其他应用程序和一个应用程序共享数据访问
系统服务:
它可以安排两个应用程序共享相同的Linux用户ID,在这种情况下,他们能
够访问对方的文件。为了节省系统资源,应用程序使用相同的用户ID也可以安排
在同一个Linux进程运行,并共享相同的VM(即应用程序也必须使用相同的证书
签名)。
一个应用程序可以请求允许访问设备数据,例如用户的联系人,短信,可安
装存储(SD卡),摄像头,蓝牙,等等。所有的应用程序的权限,必须授予在安
装时用户。
这包括关于如何在系统中存在一个Android应用程序的基本知识,本文档的其
电子科技大学学士学位论文
40
余部分向您介绍:
核心框架组件,定义你的应用程序。
在声明组件和所需设备功能为您的应用程序清单文件。
资源是独立于应用程序的代码,让你的应用程序,以优雅地优化其行为为各
种设备配置。
应用程序组件
应用程序组件是一个Android应用程序的基本构造块。每个组件都是一个不同
的切入点,通过该系统可以进入你的应用程序。不是所有的组件都是实际的切入
点,为用户和一些互相依赖的,但每一个存在作为自己的实体,扮演着特定的角
色,每个人都是一个独特的建筑块,它可以帮助确定您的应用程序的整体行为。
有四种不同类型的应用程序组件。每种类型提供不同的目的,并具有明显的
生命周期定义组件如何被创建和销毁。
这里有四种类型的应用程序组件:
活动
一个活动表示与用户界面的单个屏幕。例如,电子邮件应用程序可能有一个
活动,显示新的电子邮件,另一个活动来撰写电子邮件,并阅读电子邮件另一个
活动的清单。虽然活动一起形成在电子邮件应用程序一个有凝聚力的用户体验,
每一个都是相互独立的。因此,不同的应用程序可以启动这些活动中的任何一个
(如电子邮件应用程序允许的话)。例如,照相机的应用程序可以从该活动中的电
子邮件应用程序,构成新的邮件,为了共享一个图像的用户。
服务
一个服务是运行在后台执行长时间运行的操作或执行工作远程进程的组成部
分。一个服务不提供用户界面。例如,一个服务可能会播放音乐的背景,而用户
在不同的应用程序,也可能获取在网络上的数据而不会阻塞用户交互的活动。另
一个组成部分,如一项活动,可以启动该服务,并让它运行或绑定到它,以与它
进行交互。
内容提供商
一个内容提供商管理的应用程序数据的共享设置。你可以存储在文件系统中,
SQLite数据库,在网络上,或任何其他持久性存储位置您的应用程序可以访问的
数据。通过内容提供商,其他应用程序可以查询,甚至修改数据(如果内容提供
商允许的话)。例如,Android系统提供了管理用户的联系人信息的内容提供商。
因此,具有适当权限的任何应用程序可以查询的内容提供商(如部分
外文文献翻译
41
)来读取和写入有关一个特定的人的信息。
内容提供商也可用于读取和写入的数据是私有的,您的应用程序,而不是共
享有用的。例如,记事示例应用程序使用一个内容提供商,以保存笔记。
广播接收机
一个广播接收器是响应系统范围的广播公告的组成部分。许多广播从系统,
例如,广播宣布,该显示屏已经关闭,电池电量低或图片被抓获起源。应用程序
也可以发起广播,例如,让其他应用程序知道某些数据已经被下载到设备上,可
供他们使用。虽然广播接收机不显示用户界面,它们可以创建一个状态栏通知时
的广播事件发生时,以提醒用户。更常见的是,虽然,在广播接收器仅仅是一个“网
关”到其他元件,是为了做工作的一个非常小的量。例如,它可能会启动一个服务
来执行基于事件的一些工作。
Android系统设计的一个独特的方面是,任何应用程序可以启动另一个应用程
序的组件。例如,如果你希望用户捕捉与设备相机拍照,有可能是另一个应用程
序而不是开发活动给自己拍摄一张照片,这是否与您的应用程序可以使用它。你
不需要把甚至从摄像头的应用程序链接到的代码。相反,你可以简单地启动相机
应用程序,捕捉照片的活动。当完成后,照片甚至返回到您的应用程序,所以你
可以使用它。对于用户来说,它好像相机实际上是你的应用程序的一部分。
当系统启动一个组件,它启动这些进程为应用程序(如果它尚未运行),并实
例化所需组件的类。例如,如果您的应用程序启动活动在相机应用程序,捕捉一
张照片,该活动运行在属于相机的应用程序,而不是在你的应用程序的进程的进
程。因此,不像其他大多数系统的应用程序,Android应用程序没有一个单一的入
口点。
由于系统运行在与该限制访问其他应用程序文件的权限单独的流程中的每个
应用程序,您的应用程序不能直接从另一个应用程序激活一个组成部分。Android
系统,但是,可以。因此,要激活另一个应用程序的组件,则必须将邮件传递到
系统指定你的意图来启动某个特定组件。然后,系统会激活你的组件。
本文发布于:2023-03-15 01:18:55,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678814336255713.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:流量监控软件.doc
本文 PDF 下载地址:流量监控软件.pdf
留言与评论(共有 0 条评论) |