一种基于按需复制的安卓应用安装加速方法与流程

文档序号:33051714发布日期:2023-01-24 23:25阅读:141来源:国知局

1.本发明涉及安卓操作系统技术领域,特别涉及一种基于按需复制的安卓应用安装加速方法。


背景技术:

2.安卓系统安装app是个复杂的过程,核心工作主要是packagemanagerservice完成。
3.apk安装一般包括四种方式:1.系统应用安装:没有安装界面,在开机时自动完成。2.网络下载应用安装:没有安装界面,在应用市场完成。3.adb命令安装:没有安装界面,通过命令直接安装。4.外部设备安装:有安装界面,通过sd卡等外部设备安装,由packageinstaller处理安装逻辑。
4.apk安装涉及到的几个常用目录包括:1.system/app:系统自带的应用程序,获得root权限才能删除。2.data/app:用户程序安装目录,安装时会把apk文件复制到此目录下。3.data/data:存放应用程序的数据。4.data/dalvik-cache:将apk中的dex文件安装到该目录下(dex文件是dalvik虚拟机的可执行文件,大小约为原始apk的四分之一)。
5.安装app的第一步就是将app的apk文件复制(注意:是复制不是移动)到/data/app/目录下,然后再执行后续的操作。因此,如果这个apk文件很大,这个复制操作时间就会很长,而且额外占用磁盘空间。
6.这个复制操作是由handlestartcopy函数完成的,handlestartcopy的核心就是copyapk,其他的都是些存储空间检查,权限检查等等安全校验。


技术实现要素:

7.本发明的目的在于提供一种基于按需复制的安卓应用安装加速方法,用于解决安卓系统安装app的耗时问题。
8.本发明一种基于按需复制的安卓应用安装加速方法,其中,包括:步骤1.计算出磁盘i/o性能;步骤2.修改安卓框架下的类packagemanagerservice.installparams的复制apk的函数,包括:如apk文件在系统临时目录,获取待安装apk文件的全路径,记为apkfilepath;跳过安卓标准的复制apk的操作;将packagemanagerservice为apk文件对应的app创建的package对象中的apk成员变量中的路径指向apkfilepath;启动一个线程,并将apkfilepath和package对象传递到该线程,且并行执行复制apk的操作;如apk文件不在系统临时目录,则获取待安装的apk文件大小,记为apkfilesize,并根据磁盘i/o性能以及apkfilesize,选择执行安卓标准的复制apk的流程,或创建一个待安装的apk文件的base.apk到apkfilepath的链接,通过链接来访问apkfilepath;步骤3.执行安卓标准安装流程。
9.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,计算出磁盘i/o性能包括:记a秒读取字节数readbytes和a秒写入字节数writebytes,计算出a
秒内能够复制的文件大小,记为copybytes,作为磁盘i/o性能,包括:copybytes = (readbytes* writebytes)/( readbytes + writebytes)。
10.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,a秒为1秒。
11.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,复制apk的函数为handlestartcopy函数,安卓标准的复制apk操作为handlestartcopy的复制操作。
12.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,该并行执行复制apk的操作包括:在启动的该线程中,将apk文件复制到base.apk;复制完成后,将package中的apk成员变量中的路径指向apkfilepath。
13.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,根据磁盘i/o性能以及apk文件大小apkfilesize,确定执行标准复制流程,或创建一个base.apk到apkfilepath的链接包括:a.如果apkfilesize 《= copybytes,则执行安卓标准的复制apk操作;b.如apkfilesize 》 copybytes,则创建一个base.apk到apkfilepath的链接,通过链接来访问apkfilepath。
14.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,创建一个base.apk到apkfilepath的链接后,还获取apk文件的权限,判断是否是system/root权限,如果是,则通知内核驱动,监视apkfilepath文件的删除和移动操作;如果不是,则使用inotify监视apkfilepath文件的删除和移动操作。
15.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,内核驱动或inotify监视安装的apk文件的移动操作包括:判断移动的apk文件对应的app是否正在运行,如移动的apk文件对应的app正在运行,则:a.挂起移动apk操作,通过保留apk文件原路径对应的inode节点,使得base.apk能够继续通过原路径apkfilepath进行访问;b.创建一个线程,等待该对应的app结束后执行移动操作,并更新base.apk的链接;如移动的apk文件对应的app未运行,则更新base.apk的链接。
16.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,内核驱动或inotify监视安装的apk文件的删除操作,包括:判断apk文件对应的app是否正在运行,如对应的app正在运行,则在监视进程中打开apk文件;创建一个线程,等待对应的app结束后在监视进程中关闭apk文件,再将apk文件复制到base.apk,删除apk文件原路径对应的inode节点;如未运行,则将apk文件移动到base.apk。
17.根据本发明所述的基于按需复制的安卓应用安装加速方法的一实施例,其中,在安卓系统内执行磁盘i/o的benchmark,计算出磁盘i/o性能。
18.本发明的基于按需复制的安卓应用安装加速方法通过根据apk的具体情况,进行相应的操作,通过优化最开始这个复制apk的操作,减少安装app的耗时。
具体实施方式
19.为使本发明的目的、内容、和优点更加清楚,下面结合实施例,对本发明的具体实施方式作进一步详细描述。
20.本发明一种基于按需复制的安卓应用安装加速方法包括:
步骤1.在安卓系统内执行磁盘i/o的benchmark,计算出磁盘i/o性能,具体可以为:记为1秒读取字节数readbytes/s和1秒写入字节数writebytes/s,计算出1秒内可复制的文件大小,记为copybytes/s。
21.计算方程为:copybytes/readbytes + copybytes/writebytes = 1;即:copybytes = (readbytes* writebytes)/( readbytes + writebytes)其中copybytes为每秒能够复制的文件大小。
22.其中,上述1秒也可以是其他时间阈值,1秒属于较佳的方式。
23.步骤2.修改安卓框架,安装的时候按需复制对应的apk文件。修改安卓框架下的类packagemanagerservice.installparams的复制apk的函数(handlestartcopy),来实现以下操作包括:(1)如apk文件在系统临时目录(一般来自于应用商城apk均在该目录),获取待安装apk文件的全路径,记为apkfilepath,执行:a.跳过handlestartcopy标准的复制操作;b.将类packagemanagerservice为这个apk文件对应的app创建的package对象中的apk成员变量中的路径指向该全路径apkfilepath,而不是/data/app/[packagename]/base.apk到apkfilepath;c.启动一个线程,并将全路径apkfilepath和package对象传递到该线程,后台并行执行复制操作(即边复制边安装),该复制操作包括:在该启动的线程中,将apk文件复制到/data/app/[packagename]/base.apk;复制完成后,将package中的apk文件指向/data/app/[packagename]/base.apk;函数返回成功。
[0024]
(2)如apk文件不在系统临时目录,则读取待安装的apk文件大小,记为apkfilesize,并执行:a.如 apkfilesize 《= copybytes,则执行handlestartcopy的标准流程;b.如apkfilesize 》 copybytes,则:b1.创建一个/data/app/[packagename]/base.apk到apkfilepath的链接,系统通过链接来访问apkfilepath;b2获取apk文件(apkfilepath)的权限,判断是否是system/root权限,来防止apkfilepath被移动改名或删除后,导致链接失效,包括:如是,则通知内核驱动,监视apkfilepath文件的删除和移动操作;如不是,则使用inotify的接口在packagemanagerservice(或者其他服务中)监视apkfilepath文件的删除和移动操作;直接函数返回成功。
[0025]
步骤3.执行后续的标准安装流程。
[0026]
对于一实施例,内核驱动和inotify监视安装的apk文件(apk文件路径为apkfilepath)的删除和移动操作,以防止apkfilepath文件失效,具体可以包括如下操作:1.如果是移动操作,则判断移动的apk文件对应的app是否正在运行,判断移动的apk文件对应的app是否正在运行可以通过列举当前的所有进程名中是否包含app的包名进
行判断,(1)如移动的apk文件对应的app正在运行,则:a.挂起移动操作,可以通过保留原路径的文件系统的inode节点,使得/data/app/[packagename]/base.apk可以继续通过原路径apkfilepath进行访问。
[0027]
其中,inode节点储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等的区域就叫做inode,中文译名为索引节点。每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
[0028]
b.创建一个线程,等待app结束后执行移动操作,并更新/data/app/[packagename]/base.apk的链接,即将/data/app/[packagename]/base.apk链接到移动后的全路径;(2)如移动的apk文件对应的app未运行,则更新链接,即将/data/app/[packagename]/base.apk链接到移动后的全路径;2.如果是删除操作,则判断app是否正在运行(可以通过列举当前的所有进程名中是否包含app的包名进行判断):(1)如在运行,则:在内核或者inotify监视进程中打开apk文件,这样就可以阻止删除操作;创建一个线程,等待app结束后在内核或者inotify监视进程中关闭apk文件;然后将apk文件复制到/data/app/[packagename]/base.apk;删除apk文件原路径对应的inode节点;(2)如未运行,则:将apk文件移动到/data/app/[packagename]/base.apk,但不执行删除。
[0029]
本发明的基于按需复制的安卓应用安装加速方法通过判断哪些apk(根据大小)是适合直接复制apk安装的,即优化空间不大的;哪些apk是必须要复制的;哪些是可以不复制的,且如何实现不复制就可以正常安装,并且不影响后续的应用执行的,并进行相应的操作,最终减少了安装app的耗时,对于大的apk尤其明显,且可节省磁盘空间。
[0030]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1