第 12 页 本科毕业设计说明书
3 AEG 自动生成方法
Android 应用程序由多个 Activity 构成,每个 Activity 表示移动设备屏幕上一个单独的界 面,每个界面上可能分布了多个 Button、EditView、TextView、ImageView 等各类 View 控件, 每个控件都可能会启动或触发一系列事件,其中的一些事件就属于活动跳转的事件。对这一 类活动跳转事件进行专门处理并记录,便可以获得整个程序的活动跳转图。由于活动之间是 依靠事件驱动的,因此称为活动事件图。文献综述
本文的思想是通过对 Android 应用程序进行静态程序分析[17][18] ,获取程序中的所有 Activity 节点并取得节点之间的事件处理跳转关系。解决方案的输入是可以安装在 Android 系 统上的 Android 应用程序的打包文件 apk 文件,输出是 Android App 活动事件图 AEG。
本章的研究内容主要分为以下三部分:
清单文件分析,获取程序全部 Activity 节点
程序执行代码分析,获取活动跳转事件
AEG 活动图生成
需要注意一点的是,由于 Android 中活动栈的存在,用户可以通过点击“back”按钮返回上 一 Activity,或者当活动结束时会自动返回上一 Activity 状态。这些情况不作为活动跳转事件 进行处理,所以在最后生成的 AEG 中并不会出现此类边。该情况可以解释为:在默认情况下, 任意 Activity 可返回上一个 Activity 状态。
3。1 清单文件分析
本节主要讨论对 apk 文件中清单文件进行分析的过程,分析之后将会获得该 app 中出现的 全部 Activity。清单文件用 XML 语言进行编写,XML 语言的特点是由标签模块组成,并且 标签之内可以继续嵌套标签。因此,在分析过程中,我们只需获得所需内容所在的标签即可。
在利用 XmlPullParser 解析 XML 时,解析器可以根据当前指向的内容返回相应的值。当 解析器分析到 XML 文档开始时返回 START_DOCUMENT;当解析器分析到 XML 文档结束 时返回 END_DOCUMENT;当解析器分析到标签开始时返回 START_TAG;当解析器分析到 标签结束时返回 END_TAG;当解析器分析到文本时返回 TEXT。我们可以根据返回的标签值 确定当前的分析状态。来*自~优|尔^论:文+网www.youerw.com +QQ752018766*
如图 2。1,清单文件的内容位于标签<manifest>。。。</manifest>内。在<manifest>。。。</manifest>
标签内指明了 app 的包名、 版本号与版本名称。 在<manifest>。。。</manifest> 标签下拥有
<uses-sdk>。。。</uses-sdk>、<permission>。。。</permission>、<uses-permission>。。。</uses-permission>、
<application>。。。</application>等子标签,分别表示应用程序兼容的版本、应用程序使用系统所 需的权限说明、其他程序访问该程序所需的权限声明、应用程序所包含的组件(如 Activity、 Service、Broadcast Receiver、Content Provider 等)。由于本文中我们所分析的对象为 Activity, 因此,我们只需重点分析标签<application>。。。</application>内 Activity 组件的信息即可。
在<application>。。。</application>标签内,除了声明四大基本组件之外,还声明了 Activity 的别名,位于<activity-alias>。。。</activity-alias>标签内。在图 3。1 中,<activity>。。。</activity>标签 内的 android:name 属性指明了 Activity 的类名,<activity-alias>。。。</activity-alias> 标签内的 android:targetActivity 属性指明了其对应的类名。因此,在清单文件分析过程中,只要获得