获取Android应用程序启动次数和时间的方法与流程

文档序号:13674155阅读:306来源:国知局
技术领域本发明涉及信息安全领域,特别涉及一种获取Android应用程序启动次数和时间的方法。

背景技术:
Android手机中会记录用户很多的使用记录,包括聊天、账号、应用使用记录等。其中应用使用记录可以帮助我们了解手机中哪些是不常用软件,以及使用它们的时间及次数,从而选择卸载应用程序达到手机瘦身的目的。目前已知的获取应用程序使用情况的方法有四种:1、开启后台服务进行监听开启服务期间的使用情况;2、源码环境下使用PkgUsageStats等相关类;3、通过反射获取并使用PkgUsageStats等相关类;4、进入工程模式查看。目前市面上的相关软件大都是第一种方式来达到目的,也只是记录了应用最近一次使用时间,而没有记录使用次数及时长。这种方式会一直占用手机运行内存并且消耗电量,当该应用的服务被关掉也就不能获取到应用程序的使用情况。第二种和第三种方式都需要使应用获取系统级权限,将应用进行系统签名打包成系统应用。而受Android开源的影响,不同的厂商的系统签名文件也千差万别,对这两种方式的实现也就造成了相当大的困难。对于第四种方式,大多数手机可以在拨号界面输入*#*#4636#*#*进入,由于版本rom有所差别,有的手机的进入方式不同。手机工程模式给人的印象就是生硬的黑白屏,全屏的英文和代码命令,就像视窗重新回到了DOS系统,如果操作不当手机会带来重大的损失。

技术实现要素:
本发明针对现有技术的不足,提供一种获取Android应用程序启动次数和时间的方法,能解决当前获取Android应用程序启动次数和时间的种种弊端。为解决以上问题,本发明采用的技术方案如下:一种获取Android应用程序启动次数和时间的方法,包括如下步骤:1.1解析启动时间文件,该文件是xml格式文件,数据主要存放在节点a中,节点a内部用节点b记录了各个应用的启动数据,其中节点b中的值bv1为应用程序的包名,节点b内部的节点c记录了该应用页面的启动情况,值cv1表示页面的名称,cv2表示页面最近一次启动时间;1.2解析使用次数及时长文件,该文件是一种安卓手机中的USAGE格式文件,以4个字节为单位存储数据,该文件对于数字的存储采用16进制小端格式存储;其中,偏移量0x00~0x03表示文件头;偏移量0x04~文件尾表示数据区;偏移量0x04~0x07表示该文件记录的应用程序个数;偏移量0x08~文件尾记录了各个应用的使用情况,每个应用数据为一个数据块,数据块与数据块之间以4个0x00字节分割;2.1加载系统文件,在手机获取root权限的情况下,开启su进程修改文件读写权限,通过数据流加载到内存;2.2解析启动时间文件,通过Android自带的XmlPullParser相关类解析文件;通过getAttributeValue方法获取节点b中的值bv1;通过获取页面的启动时间来间接获取应用程序的启动时间,同样通过以上方法获取到应用程序所有页面的启动时间,通过比较,最近的时间即为应用程序的启动时间;2.3通过自定义解析类实现对该类文件的解析。作为优选,1.2数据块解析具体如下:包名,每个数据块前4位代表应用包名实际长度,紧接着是用Unicode编码存储应用包名,包名的存储长度=实际长度*2;应用启动数据,由于该文件中的数据是以4个字节为单位存储的,如果包名长度结尾处偏移量恰好为4的倍数,则加上4个0x00字节,否则用0x00占位补齐作为启动数据与包名的分割符;应用启动数据由8个字节组成:前4个字节代表启动次数,后4个字节代表运行时长;应用程序页面个数,应用程序页面个数紧接在应用启动数据后,用4个0x00字符分割,该数据由4个字节组成;应用程序页面名称,应用程序页面名称紧跟在应用程序页面个数后,同样前4位也是代表名称的实际长度,后面用Unicode编码存储了页面名称;应用页面启动数据,同应用启动数据一样,如果应用程序页面名称结尾处偏移量恰好为4的倍数,则加上4个0x00字节,否则用0x00占位补齐作为页面启动数据与页面名称的分隔符;页面启动数据由44个字节组成:前4个字节代表页面的启动次数,后40个为预留字节与其他数据组成。作为优选,2.3通过自定义解析类实现对该类文件的解析包括:2.3.1数字信息的转换方法function1:步骤1:将小端格式倒序转换为大端格式;步骤2:将转换后的字节数据依次和0xFF取&转换为int类型数据;步骤3:通过Integer类的toHexString方法将4个int类型数据转换为HexSrting并依次拼合为一个HexString字符串;步骤4:通过Integer类的valueOf方法将HexString字符串转换为int类型。作为优选,2.3通过自定义解析类实现对该类文件的解析还包括:2.3.2应用程序启动信息解析:步骤1:获取文件头信息,判断是否是USAGE类型文件,文件读写下标index移动到第四个偏移位置结尾处;步骤2:如果步骤1成立则获取文件名称并截取日期date,否则获取下一个USAGE文件;步骤3:从index位置依次向下读取4个字节;步骤4:用function1方法获取到应用程序数量appcount,index继续向下移动4个字节;步骤5:重复步骤3,用function1方法获取应用程序包名实际长度,实际长度*2得到应用程序的存储长度pkglength,index继续向下移动4个字节;步骤6:从index位置依次向下读取pkglength个字符,采用按Unicode编码读取到应用程序包名pkgname,index继续向下移动pkglength个字节;步骤7:计算index是否为4的倍数,若是则向下移动4个字节,否则向下移动到index为4的倍数为止;步骤8:重复步骤3,用function1方法获取到应用程序在当前date使用的次数count,index继续向下移动4个字节;步骤9:重复步骤3,用function1方法获取到应用程序在当前date启动的时长time,index继续向下移动8个字节;步骤10:重复步骤3,用function1方法获取到应用程序的页面个数pagecount,index继续向下移动4个字节;步骤11:重复步骤3,用function1方法获取应用程序页面名实际长度,实际长度*2得到应用程序的存储长度pagelength,index继续向下移动4个字节;步骤12:从index位置依次向下读取pagelength个字符,采用按Unicode编码读取到应用程序页面名,index继续向下移动pagelength个字节,重复步骤7;步骤13:重复步骤3,用function1方法获取到应用程序的页面启动次数,index继续向下移动44个字节;步骤14:重复步骤11~13,重复pagecount-1次获取到应用程序所有启动过的页面的启动数据后index继续向下移动4个字节;步骤15:重复步骤5~14,重复appcount-1次获取到所有启动过的应用程序的启动数据后,该文件解析完成。本发明的方法可以达到以下效果:本发明针对上述问题提出了一种实现简单、稳定性高的解决方案:1、Root手机获取系统的应用使用情况的文件信息;2、通过解析系统文件的方式获取应用使用时长、次数和最近一次使用时间。具体实施方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照实施例,对本发明做进一步详细说明。本发明通过以下步骤实现在手机获取root权限的情况下,应用层应用无需启动服务随时获取手机应用程序使用情况:1:解析系统文件;2:解析文件的加载。1、解析系统文件系统将应用使用记录数据主要存放在系统目录下,其中包含了记录应用最近一次的启动时间的文件和记录应用的在五天的使用次数及时长的“usage-(日期)”文件;1.1解析启动时间文件该文件是xml格式文件。数据主要存放在节点a中,节点a内部用节点b记录了各个应用的启动数据,其中节点b中的值bv1为应用程序的包名,节点b内部的节点c记录了该应用页面的启动情况,值cv1表示页面的名称,cv2表示页面最近一次启动时间。1.2解析使用次数及时长文件该文件是一种安卓手机中的USAGE格式文件,以4个字节为单位存储数据,该文件对于数字的存储都采用16进制小端格式存储的,如:10000000代表的是0x00000010也就是16。1.2.1文件结构偏移量0x00~0x03表示文件头偏移量0x04~文件尾表示数据区1.2.2应用程序记录个数(数据块个数)偏移量0x04~0x07表示该文件记录的应用程序个数1.2.3数据块偏移量0x08~文件尾记录了各个应用的使用情况,每个应用数据为一个数据块,数据块与数据块之间以4个0x00字节分割;1.2.4解析数据块1.2.4.1包名每个数据块前4位代表应用包名实际长度,紧接着是用Unicode编码存储应用包名(每两个字节代表一个字符),包名的存储长度=实际长度*2;1.2.4.2应用程序启动数据由于该文件中的数据是以4个字节为单位存储的,如果包名长度结尾处偏移量恰好为4的倍数,则加上4个0x00字节,否则用0x00占位补齐作为启动数据与包名的分割符。应用程序启动数据由8个字节组成:前4个字节代表启动次数,后4个字节代表运行时长;1.2.4.3应用程序页面个数应用程序页面个数紧接在应用启动数据后,用4个0x00字符分割,该数据由4个字节组成;1.2.4.4应用程序页面名称应用程序页面名称紧跟在应用程序页面个数后。同样前4位也是代表名称的实际长度,后面用Unicode编码存储了页面名称;1.2.4.5应用页面启动数据同应用启动数据一样,如果应用程序页面名称结尾处偏移量恰好为4的倍数,则加上4个0x00字节,否则用0x00占位补齐作为页面启动数据与页面名称的分隔符。页面启动数据由44个字节组成:前4个字节代表页面的启动次数,后40个为预留字节与其他数据组成;2、文件的加载解析2.1加载系统文件在手机获取root权限的情况下,开启su进程修改文件读写权限,通过数据流加载到内存。2.2应用程序启动时间文件的解析通过Android自带的XmlPullParser等相关类解析文件;2.2.1应用程序包名的获取通过getAttributeValue方法获取节点b中的值bv1;2.2.2应用程序启动时间的获取由于该文件没有记录对应应用的启动时间,通过获取页面的启动时间来间接获取应用的启动时间。同样通过以上方法获取到应用所有页面的启动时间,通过比较,最近的那个时间也就是应用程序的启动时间;2.3应用程序启动次数及时长文件的解析由于没有相关类解析该类文件,通过自定义解析类实现对该类文件的解析;2.3.1数字信息的转换方法function1由于数字信息都是采用4个16进制小端记录的,通过以下步骤进行转换:步骤1:将小端格式倒序转换为大端格式;步骤2:将转换后的字节数据依次和0xFF取&转换为int类型数据;步骤3:通过Integer类的toHexString方法将4个int类型数据转换为HexSrting并依次拼合为一个HexString字符串;步骤4:通过Integer类的valueOf方法将HexString字符串转换为int类型;2.3.2应用程序启动信息解析应用程序启动信息主要采用以下步骤:步骤1:获取文件头信息,判断是否是USAGE类型文件,文件读写下标index移动到第四个偏移位置结尾处;步骤2:如果步骤1成立则获取文件名称并截取日期date,否则获取下一个USAGE文件;步骤3:从index位置依次向下读取4个字节;步骤4:用function1方法获取到应用程序数量appcount,index继续向下移动4个字节;步骤5:重复步骤3,用function1方法获取应用程序包名实际长度,实际长度*2得到应用程序的存储长度pkglength,index继续向下移动4个字节;步骤6:从index位置依次向下读取pkglength个字符,采用按Unicode编码读取到应用程序包名pkgname,index继续向下移动pkglength个字节;步骤7:计算index是否为4的倍数,若是则向下移动4个字节,否则向下移动到index为4的倍数为止;步骤8:重复步骤3,用function1方法获取到应用程序在当前date使用的次数count,index继续向下移动4个字节;步骤9:重复步骤3,用function1方法获取到应用程序在当前date启动的时长time,index继续向下移动8个字节;步骤10:重复步骤3,用function1方法获取到应用程序的页面个数pagecount,index继续向下移动4个字节;步骤11:重复步骤3,用function1方法获取应用程序页面名实际长度,实际长度*2得到应用程序的存储长度pagelength,index继续向下移动4个字节;步骤12:从index位置依次向下读取pagelength个字符,采用按Unicode编码读取到应用程序页面名,index继续向下移动pagelength个字节,重复步骤7;步骤13:重复步骤3,用function1方法获取到应用程序的页面启动次数,index继续向下移动44个字节;步骤14:重复步骤11~13,重复pagecount-1次获取到应用程序所有启动过的页面的启动数据后index继续向下移动4个字节;步骤15:重复步骤5~14,重复appcount-1次获取到所有启动过的应用程序的启动数据后,该文件解析完成。至此,应用程序启动数据解析完成,其中应用包名pakname,使用次数count,使用时长time以及日期date即是我们要的数据。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1