资源描述
基于Android的手机安全软件设计与实现
福州大学阳光学院
本科毕业论文、毕业设计
题 目:基于Android的手机安全软件设
计与实现
系 别: 计算机工程系
专 业: 计算机科学与技术
年 级: 2010级
学 号: 241092317
姓 名: 蓝志毅
指导教师:
2014年4月25日
I
基于Android的手机安全软件设计与实现
摘要
随着生活节奏的加快,移动硬件设备的发展,人们对移动设备的需求越来越高,如今手机与人们生活密不可分,看时间、联系朋友等等都要用到手机,可见手机的重要性。当今,ios、wp、Android三足鼎立,占有世界智能手机的大部分市场份额。ios系统封闭,wp不成熟,而Android是开放、成熟的系统,且是世界上使用人数最多的系统。同时,手机越来越成熟越智能,所受的安全威胁也越来越多,所以本文针对主流的Android系统,设计一款基于Android的手机安全应用软件。
本应用软件采用安卓开源系统技术,利用利用java语言和eclipse工具进行代码编写和设计,通过搭建开发环境、需求分析以及详细的系统设计,展示了本应用的六大主要功能模块:手机防盗、软件管理、任务管理、流量管理、手机杀毒、系统优化。最后集成各个模块运行,总体运行正常。
本文第一章是绪论,简要地概括课题研究的背景、目的及其意义,简述Android的发展情况以及所需的软硬件环境。第二章介绍Android系统架构,主要阐述该架构的操作系统层、各种库和运行环境、应用程序框架和应用程序层。第三章是软件系统分析,介绍需求分析、可行性分析,还有一些UML图。第四章是软件系统设计与实现,包括布局设计实现和功能设计实现。第五章是软件测试,主要包括测试结果截图及其分析。最后是对本文的总结。
关键词:安全卫士软件 Android 分析 设计 实现
I
目 录
目 录 II
1 绪论 1
1.1 引言 1
1.2 课题来源及研究的背景、目的与意义 1
1.3 Android的发展情况与软硬件环境 2
2 Android系统架构 3
2.1 应用层 3
2.2 应用框架层 3
2.3 Android运行环境与系统运行库层 3
2.4 Linux 内核层 3
2.5 工程文件的组成 4
3 软件系统分析 5
3.1 需求分析 5
3.2 可行性分析 8
4 手机安全软件设计与实现 10
4.1 布局设计与实现 10
4.2功能设计与实现 17
5 软件测试 21
5.1截图与分析 21
5.2 测试分析 24
总结 25
参考文献 26
致谢 27
II
基于Android的手机安全软件设计与实现
1 绪论
1.1 引言
3G技术的发展以及无线上网速度的加快,使得内容丰富的程序应用在手机上成为可能,比如聊天、视频通话、内容分享等等。为了能快速部署和承载这些应用,手机功能将会变得更智能和更开放。为了满足这些需求,由google发起的OHA联盟推出了Android平台。从1.0到4.0的发布,Android平台走进我们的视野已经5年了[3]。Android3.x面向大屏幕,不断提升改进;为了解决平台兼容性和开发成本等问题,Android4.x出现了。无论是平板电脑、智能手机、电视还是游戏机都可以使用安卓系统。本人使用的第一款安卓机是小米,是基于安卓深度定制的系统,个性十足,功能丰富。现如今,各大厂商都投向安卓的开发,昔日霸主诺基亚也在不久前发布了基于安卓系统的新机。
与计算机一样,智能手机面对的安全威胁正在加大,而且手机安装的应用需要我们合理的管理。设计一款基于安卓的具有杀毒和管理手机应用等功能的软件符合大众需求。
1.2 课题来源及研究的背景、目的与意义
Android是近几年才发展起来的移动操作系统,是基于Linux核心的开源系统,早期由Google,后由开放手机联盟发布的手机系统平台,主要应用于移动设备。随着Android平台的不断完善,它在市场上占有率快速增长,越来越多的手机厂商开始选择Android系统作为其主要发展方向。随着手机的普及,人们需要知道如何保护隐私,监控流量或是手机丢了以后怎么办等,以便能在享用手机所带来方便的同时尽可能减少受干扰烦恼。Android平台的开放性构筑了其软件生态的繁荣和多样性,但同时也给木马提供了可乘之机,木马可以通过篡改正常软件,固件植入,非法获取高权限等多种手段入侵手机,普通用户将很难察觉,目前针对智能手机的安全软件大概分三种,一种是杀毒类的硬安全;另一种是隐私保护等的软安全,第三种就是前面两种的结合体[13]。手机作为个人通信工具,每天跟随用户,保存了很多个人隐私,并且手机的丢失,很容易让自己的隐私或个人信息被别人盗取。如果能从这些方面着眼,切实解决用户实际问题,才是目前真正要做的[14]。
本课题的目的是开发一款实用的手机安全软件,对手机的安全进行管理,非
常有益于保障人们生活少受干扰,并且能在一定程度上保护人们的隐私,让用户能放心地使用手机。同时,该软件的设计与实现也是对Android应用程序开发知识的综合应用,可在设计和实现的过程中学习掌握Android应用开发的基础知识和开发技术,锻炼自主学习能力,积累开发经验,增强发现问题、解决问题的能力。
1.3 Android的发展情况与软硬件环境
07年谷歌发布Android系统并展示了其源码。
08谷歌发布了Android1.0。
09年谷歌发布了Android1.5和Android1.6。
10年谷歌发布了Android2.2和Android2.3且应用数量突破了10万个。
11年7月Android用户达到史前的1.35亿,成为占有智能手机市场做多的系统。
11年8月,占据全球48%的智能手机市场。
11年9月,Android应用达到48万个。
11年10,谷歌发布Android4.0.
12年6月,谷歌发布Android4.1。
12年10,谷歌发布Android4.2。
13年9月,谷歌发布Android4.4。
谷歌可谓是互联网的大佬,其实力毋庸置疑;Android的开源,使它受到各大厂商的青睐,众多厂商推出千奇百怪的功能各异的应用,随着应用和开发人员以及用户的迅速增加,Android正在走向成熟。
本应用使用java语言在eclipse编辑工具上进行开发。
2 Android系统架构
2.1 应用层
应用层位于Android体系的最上层。包括平台配置的一套应用程序集合,比如主屏幕、电话、短信、联系人、浏览器等等以及用户基于安卓平台的应用程序框架。开发者还可以使用应用框架层提供的API进行编写自己的应用程序,这也是安卓开源的优势之一。Android的应用层通常用java语言编写,主要是用户界面,程序中还有放在res里的各种资源文件等,经过编译后将会生成一个apk包。
2.2 应用框架层
应用框架层属于android体系的第二层。它不仅为第一层提供API,而且还是为应用层提供可以复用的组件、开发规范、屏蔽两层交互的复杂性的一种机制。当然,本层提供的API并不完全对第三方应用程序开放,有一部分是隐藏的。开发第三方应用程序需要依赖Android sdk提供的api,它只是应用框架层api的一个子集。开发者完全可以使用与内核应用程序相同的框架,假如程序暴露其数据或功能模块,则其他程序就可以使用这些内容。通过本层,用户自定义的程序可以执行框架的预设功能,这样就能减少程序代码量。
因为上层的应用程序是以java语言构建的,所以本层提供的首先是包含了UI程序中所需的各种控件,比如Views。本层主要的五个组件是:Activity、Broadcast Intent Receiver、Service、Content Provider、Intent and Intent Filter[2]。
2.3 Android运行环境与系统运行库层
本层是Android体系结构的第三层,相当于中间件层,为应用程序框架提供服务。应用层使用的多媒体、浏览器等,其功能实现就是由系统运行库实现的。它分为系统运行库和Android运行环境,本层的内容大多数是使用c和c++语言实现的。
Android的各种库一般有一个特点就是与移动设备的平台的应用密切相关。
Android的运行环境主要是指虚拟机技术,Android提供了Dalvik虚拟机以支持java运行环境。Dalvik和java VM不同,它执行的不是java标准的字节码,而是Dalvik可以执行的.dex执行文件。两者最大区别是,Dalvik是基于寄存器的虚拟机,而java VM是基于栈的。很显然,Dalvik的最大好处就是可以根据硬件实现更大的优化,这样更适合移动设备的特点。
2.4 Linux 内核层
Linux内核是硬件和软件栈的抽象。Android自ICS起就基于Linux3.0 内核,充分利用了Linux内核的基于权限的安全模型、内存管理、进程管理、网络协议栈和驱动模型等优点,并在电源管理和日志系统等方面引入了不同与标准Linux的全新实现。
2.5 工程文件的组成
图 2-1 Android应用工程文件的组成
如图2-1,一个完整Android工程都需要这几个文件或文件夹组成。src目录里面保存着各种包,包含着自己编写的所有java源文件。gen目录里面的文件是自动生成的,我们无须去动,里面有个重要的文件就是R.java文件,它是定义该项目所有资源的索引文件。Android4.4和Android private libraries是编写代码所用到的包。Assets是资产文件,管理Android工程所引入的资产素文件,也就是除资源以外的素材可以放这里。Res里面有drawable和layout。Drawable存放图片等资源,layout存放布局文件。AndroidMainifest.xml文件是重要的清单文件,包含了该工程信息和组成部件,通过这个清单文件,可以获取项目的包名、 android版本信息、组成部件以及SDK的版本信息等内容。
3 软件系统分析
3.1 需求分析
本软件功能类似市场上的金山手机卫士,方便、实用、界面友好,具有手机防盗、软件管理、任务管理、流量管理、手机杀毒、系统优化等主要功能。手机防盗有短信警报,gps定位、铃声警报、屏幕锁定、清除数据。软件管理可以卸载、运行、分享软件。任务管理可以杀死进程。流量管理可以记录每个程序所用的流量。手机杀毒可以查杀病毒库里有的病毒。系统优化可以清除程序缓存。
(1)软件系统流程图,如图3-1所示。
图 3-1 系统流程图
(2)软件系统用例图,如图3-2所示。
图 3-2 系统用例图
(3)软件模块顺序图
1)软件管理模块顺序图,如图3-3所示。
2)手机杀毒模块顺序图:如图3-4所示。
图 3-3 软件管理模块顺序图
图3-4 手机杀毒模块顺序图
(4)活动图
1) 软件管理模块活动图:如图3-5所示。
图3-5 软件管理模块活动图
2)手机杀毒模块活动图:如图3-6所示。
图 3-6 手机杀毒模块活动图
3.2 可行性分析
3.2.1 技术可行性
技术可行性分析主要是分析现有的技术是否能够顺利的完成预定的开发任务。要考虑现有的软、硬件设施是否能够满足开发的需要(例如计算机的硬件配置、软件环境等)。
现在的电子科技日新月异,日常生活的家用电脑基本上都可以满足软件的开发配置要求,所以本课题开发的硬件设施可行。Android的应用开发采用Android SDK+Eclipse的开发环境,这种Google官方推荐的开发环境在技术上已经十分成熟,并且提供免费下载,所以本课题的开发在软件环境上也是可行的。Android的应用开发并不局限于Java语言,但是采用Java语言是目前的主流。并且Java简单易学,有成熟的体系结构和开发模式。在网络上有很多优秀的教程可供学习,可以在短时间内掌握Android应用开发所需的开发基本要求。目前的Android应用市场上已经有一些成熟的手机安全软件,所以证明本系统在技术上是可行的。
3.2.2 经济可行性
经济可行性分析主要是对项目的经济效益进行评价,一方面是支出的费用,其中包括系统的硬件购置、软件开发工具、管理和维护、开发人员工资和培训费等费用。另一方面是取得的收益中可以用折算为货币价值来衡量的那部分(收益的另一部分难以用货币价值来表示)。 本课题为Android系统手机上的小应用,开发的硬件设施只需要一台个人电脑,系统的开发环境使用Android SDK+Eclipse。这些软件都可以在Google的官方网站免费下载并不需要额外付费。由于是个人自学开发的软件,在人员的工资和培训费等方面都不需要太多的花费,而且主要的学习方式是通过网络上的教程以及导师的指导。所以研发经费上是可行的。收益可以通过免费使用广告移植的方式即让用户免费使用,开发者在系统中插入广告,通过广告获取收入的方式获得。收益可大于成本,本课题在经济上是可行的。
3.2.3 操作可行性
此软件是使用Android SDK+Eclipse作为软件开发的平台,开发出来的系统具有友好的用户界面,有良好的安全设置,以及详细的使用说明,使用户能很快的掌握系统的使用方法,只要是安卓手机就能正常安装运行,因此在开发在操作上是可行的。
4 手机安全软件设计与实现
根据需求分析,知道本软件有六大模块,由此,我们将进行详细的界面布局设计实现和功能设计实现分析。
4.1 布局设计与实现
4.1.1 主界面
点击应用图标进去就是主界面,如图4-3。主界面布局比较复杂,由好几个布局组成。首先是帧布局FrameLayout,里面有两个子布局节点都是LinearLayout,为了方便讲解,我们暂且叫做LinearLayout A和LinearLayout B。LinearLayout A下面还有个LinearLayout A1,LinearLayout A1下面是GridView节点,设置numColumns为2,表示两列,这样,我们刚好是六个模块,一列就是3个。主要代码为:
<LinearLayout
android:layout_width="252dp"
android:layout_height="392dp"
android:orientation="vertical" >
<GridView
android:id="@+id/gv_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2"
>
</GridView>
</LinearLayout>
接着,LinearLayout A里面还有个复杂布局,主要是显示右下角的图标按钮,点击它可以使整个界面向左滑动,右边出现一个view,就是LinearLayout B的内容。代码在layout里面的mainui.xml。
图 4-3 主界面
4.1.2 手机防盗模块
这个模块内容比较多。首先,当用户第一次进入手机防盗时要判断用户是否设置了密码,如果没有就加载第一次进入的对话框界面,系统默认对话框难看而且背景颜色、标题等都改不了,所以这就要我们自定义对话框了,要改自定义对话框就要更改系统默认对话框的样式。样式代码如下:
<style name="MyDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
</style>
有了样式,我们就可以自定义对话框了,如图4-4,textview和editview各两个,分别是输入密码和确认密码,标题背景颜色和下面两个按钮的背景颜色也是自定义的。为了方便,密码暂为123,输入的密码用MD5加密保存在sharedpreferences里。输入的密码满要进行逻辑判断,当且仅当两次密码输入正确且不为空时才表示设置好了密码。如果判断已经设置了密码那就直接进入正常对话框,实现原理跟第一次对话框一样,效果如图4-5。
图 4-4 第一次登陆界面
图 4-5 正常登陆界面
当我们登陆正常对话框输入正确密码后判断是否进行过设置向导,是的话加载手机防盗页面,否的话进行设置向导。设置向导界面一共有四页,第一页介绍手机防盗有哪些功能,第二页要进行手机sim卡的绑定,这步很重要。每个sim卡串号都是唯一的,绑定后就定下来了,绑定后,sim卡串号会被保存到sharedpreferences里,如果手机被偷后,小偷换了sim卡,重启后此软件会进行对比,如果不相同将会向安全号码发送之前写好的报警短信。第三步是设置安全号码,上面说了,手机被偷换卡后会向安全号码上发送报警短信,这样,我们就得到了小偷的号码了。第四步是确认你是否开启保护,是的话就开起了手机防盗的功能了,否则没有。
当用户开启了保护,也就是开启了手机防盗功能后,会进入如图4-6。当用户点击里面的重新进入向导条目就可以进行重新设置了。我们可以看到,这个界面的下方有四句话。当小偷那边回发短信过来时,就可以向小偷手机发送内容为location的短信,过段时间就会收到小偷所在位置的经纬度。发送delete会删除手机数据,也就是恢复手机出厂设置。发送locknow就可以给手机加密锁屏。发送alarm就是发出报警音乐。
图 4-6 防盗保护中
4.1.3 软件管理模块
这个模块功能是卸载、运行、分享软件。所以就应该有个页面来显示所有的程序。这个页面布局文件就是app_manager.xml。首先标题显示为所有程序,下面就会列出手机的所有程序,这些程序是以listview展现出来的,这就还要有个布局文件实现一个条目要显示应用程序的多少信息,这个文件是app.xml,主要代码如下:
<ImageView
android:id="@+id/iv_app_icon"
android:layout_width="60dip"
android:layout_height="60dip"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv_app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="功能名字"
android:textColor="@color/textcolor"
android:textSize="22sp" />
如图4-7显示的是应用程序的图标和名字。这个是显示所有程序的,当点击标题,会变成显示用户程序。
图4-7 软件管理界面
4.1.4 任务管理模块
这个模块布局跟软件管理有点像,也是用listview显示程序的信息。首先标题栏可以显示进程数目和剩余的内存,进程数目就是下面程序清单的总个数,程序清单里有用户进程和系统进程。每个程序右边还有一个checkbox,点击可以选中。下面还有两个按钮,分别是一键清理和程序设置。效果图如图4-8。
图4-8 任务管理界面
4.1.5 流量管理模块
首先也是修改系统默认标题,自定义标题,下面一栏时显示2g、3g和wifi总流量,接着,下面是程序清单。里面列着各个程序所用的流量,每个条目分别显示着程序图标、程序名,上传流量、下载流量。主要代码如下:
<ImageView
android:id="@+id/iv_traffic_icon"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv_traffic_name"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="名称" />
<TextView
android:id="@+id/tv_traffic_tx"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="上传" />
<TextView
android:id="@+id/tv_traffic_rx"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="下载" />
4.1.6 手机杀毒模块
这个病毒扫描界面上面标题居中显示手机杀毒四个字,下面是扫面状态图标和进度条,右边是一键清理按钮,中间是显示扫描信息,最底层是查杀按钮。效果如图4-9。
图4-9 手机杀毒界面
4.1.7 系统优化模块
这个模块主要是实现清除程序缓存,所以也是有个listview显示出所有的程序清单。每个条目显示程序的图标和缓存大小,右边是清理的按钮图标,如图 4-10。主要代码如下:<ImageView
android:id="@+id/iv_cache_icon"
android:layout_height="60dip"
android:layout_width="60dip"
android:layout_weight="0"/>
<RelativeLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<LinearLayout
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TextView style="@style/content_text"
android:id="@+id/tv_cache_name"
android:singleLine="true"
android:ellipsize="end"
android:textSize="20sp"/>
<TextView style="@style/content_text"
android:id="@+id/tv_cache_size"
android:textSize="12sp"/>
</LinearLayout>
</RelativeLayout>
<ImageView
android:src="@drawable/clear_selected"
android:layout_height="60dip"
android:layout_width="60dip"
android:layout_weight="0"/>
图4-10 缓存清理界面
4.2功能设计与实现
4.2.1 手机防盗模块
之前讲过,这个模块有四个功能,gps定位、警报音乐、锁屏、清除数据。Gps定位的实现过程就是先获取手机gps服务,然后得到位置管理提供者,监听位置改变的回调方法,最后要关掉监听。用这个方法定位的缺点是要露天才能定位,而且不稳定,也有收不到短信的情况。其他三个功能的实现,要获取设备的超级管理员权限。首先新建类 MyAdmin 继承 DeviceAdminReceiver,其实DeviceAdminReceiver就是广播接收者的子类,所以MyAdmin也是广播接收者,所以就应该在清单文件里配置广播接收者。然后在第四个设置向导页面里注册广播接受者为admin设备,最后就是获取IDevicePolicyManager,这样就获得了超级管理员权限了,接着要在短信接收类里设置锁屏密码、锁屏功能、清除数据和音乐报警功能。小偷换了sim,软件监测到前后sim卡串号不同,就会主动向安全号码发送报警短信,然后我们就可以向此短信回复上面四个单词的任一个就会实现不同功能。
Gps定位主要代码:
public void onLocationChanged(Location location) {
String latitude = "纬度 " + location.getLatitude(); // weidu
String longtitude = "经度 " + location.getLongitude(); // jingdu
SharedPreferences sp = context.getSharedPreferences("config",
Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("location", latitude + " - " + longtitude);
mit(); // 最后一次获取到的位置信息 存放到sharedpreference里面
}
锁屏主要代码:
DevicePolicyManager manager = (DevicePolicyManager)context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
manager.resetPassword("123", 0);
manager.lockNow();
abortBroadcast();
清除数据:
manager.wipeData(0);
abortBroadcast();
音乐报警:
MediaPlayer player = MediaPlayer.create(context, R.raw.alarm2);
player.setVolume(1.0f, 1.0f);
player.start();
abortBroadcast();
4.2.2 软件管理模块
这个模块主要实现运行、卸载、分享软件。首先要写一个类来获取所有的应用程序,还要区分出哪些是系统应用,哪些是用户应用,再用listview把他们显示出来。Android的对话框有两种:PopupWindow和AlertDialog。它们的不同点在于:AlertDialog的位置固定,而PopupWindow的位置可以随意,所以我们选择使用PopupWindow。开始初始化PopupWindow,先定义一个数组来存放item数值,然后拿到点击时的条目,把它设置到view里面。接着添加动画,设置一个背景图把PopupWindow显示出来,最后开启动画。当你点击应用条目时会弹出一个类似对话框的东西,里面有卸载、运行、分享功能,这就是用PopupWindow实现的。最后分别调用系统的卸载、运行和分享功能即可。主要代码:
new Thread() {
public void run() {
isloading = true;
if (flag) {
provider = new AppInfoProvider(AppManagerActivity.this);
appinfos = provider.getAllApps();
//
Message msg = new Message();
msg.what = GET_ALL_APP_FINISH;
handler.sendMessage(msg);
} else {
provider = new AppInfoProvider(AppManagerActivity.this);
appinfos = provider.getAllApps();
userAppinfos = getUserApps(appinfos);
Message msg = new Message();
msg.what = GET_USER_APP_FINISH;
handler.sendMessage(msg);
}
}
}.start();
4.2.3 任务管理模块
这个模块功能主要有显示进程数目、剩余内存大小和一键清理按钮。我们只要得到activityManager对象,再调用它的getRunningAppProcesses方法,最后返回他的size就可以得到进程数目了。计算剩余的内存其实也是调用activityManager的getMemoryInfo方法,再转换下单位就行了。实现一键清理的话,就是拿到RunningAppProcessInfo的集合,再遍历它,就可以拿到这些进程了,在拿到每个应用的包名,就可以拿到其它信息了。
4.2.4 流量管理模块
这个模块可以显示每个应用所用的流量上传和下载信息,还能显示所用2g、3g和wifi的总流量信息,而TrafficStats就是Android的一个专门用来获取流量信息的。代码如下:
private void setTotalTraffic()
{
//拿到2G和3G的总共接收到的数据大小
long total_2g_3g_received = TrafficStats.getMobileRxBytes();
//拿到2G和3G的总共发送出去的数据大小
long total_2g_3g_transmitted = TrafficStats.getMobileTxBytes();
//拿到2G和3G的总数据的大小
long total_2g_3g = total_2g_3g_received + total_2g_3g_transmitted;
tv_traffic_2g_3g.setText("2G/3g 总流量:" + TextFormater.getDataSize(total_2g_3g));
//拿到总共接收到的数据大小
long total_received = TrafficStats.getTotalRxBytes();
//拿到总共发送的数据大小
long total_transmitted = TrafficStats.getTotalTxBytes();
//拿到总数据大小
long total = total_received + total_transmitted;
////拿到wifi的总数据大小
long total_wifi = total - total_2g_3g;
tv_traffic_wifi.setText("wifi 总流量:" + TextFormater.getDataSize(total_wifi));
}
4.2.5 手机杀毒模块
该模块查杀病毒原理是,开启一个子线程,遍历得到手机中的所有应用程序的签名,再将签名转化为MD5跟已存在病毒库的MD5进行对比,若有相同的就是病毒了。这和市场上的主动防御式没法比。
4.2.6 系统优化模块
这个模块实现清理应用程序缓存。PackageManager里面有一个私有的方法的叫getPackageSizeInfo,我们就是要通过反射来调用这个方法,然后,getPackageSizeInfo这个方法要传递一个IPackageStatsObserver.Stub对象的,这个对象我们一看,就知道是一个AIDL的
展开阅读全文