CN111399846B - 一种安卓手机应用程序容量监控方法及装置 - Google Patents

一种安卓手机应用程序容量监控方法及装置 Download PDF

Info

Publication number
CN111399846B
CN111399846B CN202010183864.7A CN202010183864A CN111399846B CN 111399846 B CN111399846 B CN 111399846B CN 202010183864 A CN202010183864 A CN 202010183864A CN 111399846 B CN111399846 B CN 111399846B
Authority
CN
China
Prior art keywords
file
library
capacity
application program
android
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010183864.7A
Other languages
English (en)
Other versions
CN111399846A (zh
Inventor
杨文蛟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing 58 Information Technology Co Ltd
Original Assignee
Beijing 58 Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing 58 Information Technology Co Ltd filed Critical Beijing 58 Information Technology Co Ltd
Priority to CN202010183864.7A priority Critical patent/CN111399846B/zh
Publication of CN111399846A publication Critical patent/CN111399846A/zh
Application granted granted Critical
Publication of CN111399846B publication Critical patent/CN111399846B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了一种安卓手机应用程序容量监控方法及装置,在工程根目录下,创建MockLib库,将AAR文件的解压内容写入MockLib库,建立AAR文件与MockLib库的工程依赖关系,得到工程依赖MockLib库;基于对工程依赖MockLib库进行编译打包后的第一应用程序apk包的容量和第二应用程序apk包的容量,监控安卓手机应用程序容量。可见,该方法通过替换AAR依赖为工程依赖,移除AAR依赖中主要占比的图片资源,保留集合压缩文件、清单配置文件和新资源映射关系。通过计算经Mock测试前后的AAR文件在应用程序中的大小,确定应用程序中引用的AAR文件的减少数量,进而有效的监控应用程序容量。

Description

一种安卓手机应用程序容量监控方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种安卓手机应用程序容量监控方法及装置。
背景技术
随着应用程序的应用场景增多,功能繁杂,需引入大量三方JAR包或者AAR文件,使得最终生成的APK文件大小急剧增大。AAR(Android Archive)是一个Android库项目的二进制归档文件,文件扩展名为.aar。AAR文件包括:集合压缩文件(classes.jar)、清单配置文件(AndroidManifest.xml)、资源映射关系文件(R.txt)和图片资源(res)。
应用程序在开发时,由于需引入大量AAR文件以实现更多的功能,导致编译打包成的APK文件越来越大,进而使得应用程序容量也越来越大。为避免应用程序容量越来越大,占用过多的安卓手机内存,需在开发过程中有效降低APK文件大小,而降低APK文件大小,也就是减少开发时引用AAR文件的数量。
由于根据所有被引用的AAR文件的容量之和可以推测出应用程序的容量,因此每减少一个被引用的AAR文件,应用程序的容量中就会减少该ARR文件对应的容量,进而可以根据被引用的AAR文件的容量来监控应用程序的容量。而现有技术中还未提出能够准确确定AAR文件在应用程序中的文件大小(容量)的方法,使得应用程序的容量无法得到有效的监控。
发明内容
本申请提供了一种安卓手机应用程序容量监控方法及装置,以解决现有的方法无法准确确定AAR文件的容量,导致应用程序的容量无法有效监控的问题。
第一方面,本申请提供了一种安卓手机应用程序容量监控方法,当所述应用程序引入Android Archive文件时,包括以下步骤:
在工程根目录下,创建MockLib库,所述MockLib库用于写入所述Android Archive文件的解压内容;
对所述Android Archive文件进行解压,得到所述Android Archive文件的解压内容;
将所述Android Archive文件的所述解压内容写入所述MockLib库,建立所述Android Archive文件与所述MockLib库的工程依赖关系,得到工程依赖MockLib库;
对所述工程依赖MockLib库进行编译打包,得到经Mock测试后的第一应用程序apk包,以及,确定所述第一应用程序apk包的容量;
获取基于所述Android Archive文件进行编译打包得到的第二应用程序apk包的容量;
基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,监控所述安卓手机应用程序容量。
进一步地,所述将Android Archive文件的所述解压内容写入所述MockLib库,建立所述Android Archive文件与所述MockLib库的工程依赖关系,得到工程依赖MockLib库,包括:
所述Android Archive文件的解压内容包括集合压缩文件、清单配置文件和资源映射关系文件;所述MockLib库内配置有Libs目录和Lib库根目录;
将所述集合压缩文件添加至所述Libs目录下,以及,将所述清单配置文件添加至所述Lib库根目录下,得到新MockLib库;
将所述Android Archive文件中的AAR依赖关系解除,与所述新MockLib库建立工程依赖关系;
基于所述资源映射关系文件,进行ID样式还原,得到新资源映射关系;
将所述新资源映射关系添加至与所述Android Archive文件建立工程依赖关系的新MockLib库中,得到工程依赖MockLib库。
进一步地,所述将Android Archive文件中的AAR依赖关系解除,与所述新MockLib库建立工程依赖关系,包括:
获取所述Android Archive文件的AAR依赖关系;
将所述AAR依赖关系中的AAR依赖值移除,得到空AAR依赖关系;
调用所述新MockLib库的工程依赖关系,替换所述空AAR依赖关系,建立AndroidArchive文件与新MockLib库的依赖关系。
进一步地,所述基于资源映射关系文件,进行ID样式还原,得到新资源映射关系,包括:
基于所述资源映射关系文件,获取目标ID值;所述资源映射关系文件包括数组相对应的值、属性、属性名称和ID值;
以所述目标ID值,确定对应的目标属性名称;
基于所述目标属性名称,确定对应的目标属性;
基于所述目标属性,确定属性引用关系;
利用归属所述属性引用关系,生成新资源映射关系。
进一步地,所述基于第一应用程序apk包的容量以及所述第二应用程序apk包的容量,监控所述安卓手机应用程序容量,包括:
基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,计算两个应用程序apk包的容量差;
以所述两个应用程序apk包的容量差作为所述Android Archive文件在所述应用程序中的大小,基于所述Android Archive文件的大小监控所述安卓手机应用程序容量。
第二方面,本申请提供了一种安卓手机应用程序容量监控装置,当所述应用程序引入Android Archive文件时,包括:
MockLib库创建模块,用于在工程根目录下,创建MockLib库,所述MockLib库用于写入所述Android Archive文件的解压内容;
解压内容确定模块,用于对所述Android Archive文件进行解压,得到所述Android Archive文件的解压内容;
工程依赖建立模块,用于将所述Android Archive文件的所述解压内容写入所述MockLib库,建立所述Android Archive文件与所述MockLib库的工程依赖关系,得到工程依赖MockLib库;
第一容量确定模块,用于对所述工程依赖MockLib库进行编译打包,得到经Mock测试后的第一应用程序apk包,以及,确定所述第一应用程序apk包的容量;
第二容量获取模块,用于获取基于所述Android Archive文件进行编译打包得到的第二应用程序apk包的容量;
应用程序容量监控模块,用于基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,监控所述安卓手机应用程序容量。
进一步地,所述工程依赖建立模块,包括:
所述Android Archive文件的解压内容包括集合压缩文件、清单配置文件和资源映射关系文件;所述MockLib库内配置有Libs目录和Lib库根目录;
文件内容写入单元,用于将所述集合压缩文件添加至所述Libs目录下,以及,将所述清单配置文件添加至所述Lib库根目录下,得到新MockLib库;
AAR依赖解除单元,用于将所述Android Archive文件中的AAR依赖关系解除,与所述新MockLib库建立工程依赖关系;
ID样式还原单元,用于基于所述资源映射关系文件,进行ID样式还原,得到新资源映射关系;
工程依赖建立单元,用于将所述新资源映射关系添加至与所述Android Archive文件建立工程依赖关系的新MockLib库中,得到工程依赖MockLib库。
进一步地,所述AAR依赖解除单元,包括:
AAR依赖关系获取子单元,用于获取所述Android Archive文件的AAR依赖关系;
AAR依赖值移除子单元,用于将所述AAR依赖关系中的AAR依赖值移除,得到空AAR依赖关系;
依赖替换子单元,用于调用所述新MockLib库的工程依赖关系,替换所述空AAR依赖关系,建立Android Archive文件与新MockLib库的依赖关系。
进一步地,所述ID样式还原单元,包括:
目标ID值确定子单元,用于基于所述资源映射关系文件,获取目标ID值;所述资源映射关系文件包括数组相对应的值、属性、属性名称和ID值;
目标属性名称确定子单元,用于以所述目标ID值,确定对应的目标属性名称;
目标属性确定子单元,用于基于所述目标属性名称,确定对应的目标属性;
属性引用关系确定子单元,用于基于所述目标属性,确定属性引用关系;
ID样式还原子单元,用于利用归属所述属性引用关系,生成新资源映射关系。
进一步地,所述应用程序容量监控模块,包括:
容量差计算单元,用于基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,计算两个应用程序apk包的容量差;
应用程序容量监控单元,用于以所述两个应用程序apk包的容量差作为所述Android Archive文件在所述应用程序中的大小,基于所述Android Archive文件的大小监控所述安卓手机应用程序容量。
第三方面,本申请提供一种电子设备,包括:
存储器,用于存储程序指令;
处理器,用于调用并执行所述存储器中的程序指令,以实现第一方面所述的安卓手机应用程序容量监控方法。
第四方面,本申请提供一种存储介质,所述存储介质中存储有计算机程序,当安卓手机应用程序容量监控装置的至少一个处理器执行所述计算机程序时,安卓手机应用程序容量监控装置执行第一方面所述的安卓手机应用程序容量监控方法。
由以上技术方案可知,本申请提供了一种安卓手机应用程序容量监控方法及装置,当应用程序引入Android Archive文件时,在工程根目录下,创建MockLib库,对AndroidArchive文件进行解压,得到Android Archive文件的解压内容;将Android Archive文件的解压内容写入MockLib库,建立Android Archive文件与MockLib库的工程依赖关系,得到工程依赖MockLib库;确定对工程依赖MockLib库进行编译打包后得到的第一应用程序apk包的容量;基于第一应用程序apk包的容量以及第二应用程序apk包的容量,监控安卓手机应用程序容量。可见,该方法通过替换AAR依赖为工程依赖,移除AAR依赖中主要占比的图片资源,保留集合压缩文件和清单配置文件,以及ID转换的新资源映射关系,进行编译构建。通过计算经Mock测试前后的Android Archive文件在应用程序中的大小,来准确地确定应用程序中引用的Android Archive文件的减少数量,进而更加有效的监控应用程序容量。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的安卓手机应用程序容量监控方法的流程图;
图2为本发明实施例提供的创建MockLib库的示意图;
图3为本发明实施例提供的建立工程依赖MockLib库的方法流程图;
图4为本发明实施例提供的解压内容写入的示意图;
图5为本发明实施例提供的建立工程依赖关系的方法流程图;
图6为本发明实施例提供的确定新资源映射关系的方法流程图;
图7为本发明实施例提供的资源映射关系文件的示意图;
图8为本发明实施例提供的安卓手机应用程序容量监控装置的结构框图;
图9为本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
为了能够确定出AAR(Android Archive)文件在应用程序中的大小,以确定应用程序中引用的Android Archive文件的减少数量,进而有效的监控应用程序容量,本发明实施例提出一种方法,采用Mock技术,替换AAR(Android Archive)文件中的AAR依赖为Lib库依赖,保留集合压缩文件(classes.jar)、清单配置文件(AndroidManifest.xml)和资源映射关系文件(R.txt),去除AAR文件中占比较大的res图片资源,以计算AAR文件在应用程序中所占大小。
本申请中,AAR文件的容量指的是AAR文件占应用程序中的大小,为空间上的体积。确定出AAR文件在应用程序中的大小后,便可确定APK文件中引入的AAR文件的减少数量。而AAR文件的数量减少,APK文件大小会变小,进而会使得应用程序的容量变小,实现应用程序容量的监控。Mock技术是指模拟一个依赖库,本申请中,是由Mock出的Lib库(MockLib库)来替换AAR依赖。
图1为本发明实施例提供的安卓手机应用程序容量监控方法的流程图。参见图1,本发明实施例提供一种安卓手机应用程序容量监控方法,执行主体为运行脚本,以程序的形式存在。当应用程序引入Android Archive文件时,该方法包括以下步骤:
S1、在工程根目录下,创建MockLib库,MockLib库用于写入Android Archive文件的解压内容。
本实施例提供的安卓手机应用程序容量监控的方法,是通过计算AAR文件在应用程序中的大小来实现监控,具体为,采用的是将AAR依赖替换为Lib库依赖,然后将AAR文件中的部分内容写入Lib库中,再经过编译打包来确定AAR文件容量(大小)。为此,为实现AAR文件中依赖关系的更改,需在工程根目录下,创建MockLib库。
MockLib库是通过Mock技术模拟出一个Lib库,其框架与Lib库相同,不同之处在于MockLib库为空的源码级的库,不包括资源文件等相关文件,需在MockLib库中写入相应文件内容后,MockLib库才能实现相应功能。
每个APP开发时均对应一个完整的开发工程,也会存在一个根目录,用于写入实现APP的相关文件。本实施例中,将MockLib库创建在工程根目录下,且在创建时,MockLib库中需同时存在的必选文件为清单配置文件(AndroidManifest.xml)和配置脚本(gradle)不包括资源文件。清单配置文件用于提供配置入口,即实现启动页、启动类的配置入口;配置脚本用于执行打包命令,实现打包操作。
图2为本发明实施例提供的创建MockLib库的示意图。图2所示即为完整开发工程的部分内容,WubBaMockLib为在工程根目录下创建的MockLib库。
S2、对Android Archive文件进行解压,得到Android Archive文件的解压内容。
在确定应用程序中引入的某个AAR文件的容量时,会存在不同版本的AAR文件,存储在服务器中,为此,需获取目标版本的AAR文件。程序向服务器发送请求,以获取到目标版本AAR文件。
而后对目标版本的Android Archive文件进行解压,得到Android Archive文件的解压内容。Android Archive文件的解压内容包括:集合压缩文件(classes.jar)、清单配置文件(AndroidManifest.xml)、资源映射关系文件(R.txt)和图片资源(res)。资源映射关系文件(R.txt)中包括数个ID值。
S3、将Android Archive文件的解压内容写入MockLib库,建立Android Archive文件与MockLib库的工程依赖关系,得到工程依赖MockLib库。
在得到Android Archive文件的解压内容后,需将解压内容写入需替换AAR依赖的MockLib库,使得Android Archive文件与MockLib库建立工程依赖,得到工程依赖MockLib库。
图3为本发明实施例提供的建立工程依赖MockLib库的方法流程图;图4为本发明实施例提供的解压内容写入的示意图。为此,参见图3和图4,本实施例提供的方法,按照下述方法执行写入Android Archive文件的解压内容和建立工程依赖关系的相关步骤:
S31、将集合压缩文件添加至Libs目录下,以及,将清单配置文件添加至Lib库根目录下,得到新MockLib库。
图4中所示的Libs目录为MockLib库的用于写入Android Archive文件的解压内容的文件夹,main目录为MockLib库的Lib库根目录。MockLib库在创建时,会同时配置Libs目录和Lib库根目录,用于分别写入相应的Android Archive文件的解压内容。其中,Lib库根目录与res目录同级。
在执行Android Archive文件的解压内容写入时,不同的解压内容写入MockLib库中相应的目录下,参见图4中方框所示内容,即Android Archive文件的解压内容中的集合压缩文件(classes.jar)写入MockLib库的Lib库根目录下,Android Archive文件的解压内容中的清单配置文件(AndroidManifest.xml)写入MockLib库的Libs目录下。
图片资源(res)不再写入MockLib库中,由于图片资源占比较大,若在确定AAR文件的容量时统计图片资源的大小,则会导致整体过程较为繁琐,花费时间较多,进而使得监控应用程序容量的过程复杂。因此,为提高AAR文件的容量的确定效率,需去掉图片资源,实现方式是在建立新的工程依赖的MockLib库中不再写入图片资源。
S32、将Android Archive文件中的AAR依赖关系解除,与新MockLib库建立工程依赖关系。
本实施例提供的方法,在确定AAR文件容量时,通过Mock技术,将AAR中的文件结构全部转换为Lib库结构,即将依赖AAR转换为工程依赖Lib库。为此,需将AAR文件中的原始AAR依赖替换为工程依赖。
图5为本发明实施例提供的建立工程依赖关系的方法流程图。参见图5,本实施例提供的方法,按照下述步骤建立工程依赖关系:
S321、获取Android Archive文件的AAR依赖关系。
S322、将AAR依赖关系中的AAR依赖值移除,得到空AAR依赖关系。
S323、调用新MockLib库的工程依赖关系,替换空AAR依赖关系,建立AndroidArchive文件与新MockLib库的依赖关系。
查找应用程序中引入的Android Archive文件,确定AAR依赖关系,依赖AAR的代码如下所示:
“WuBaLogLib”:dependencyMode==“aar”,
“58AnjukeLib”:dependencyMode==“aar”,
“WuBaZxingLib”:dependencyMode==“aar”
Android Archive文件的当前依赖(dependencyMode)为“aar”,而后将AAR依赖值移除,即移除“aar”,使当前依赖为空,得到空AAR依赖关系,即dependencyMode==“”。
Android Archive文件存储在服务器,本地开发工程进行开发时,依赖AAR相当于依赖服务器,为提高开发效率,本实施例,将服务器依赖替换为本地工程依赖。即由本地创建并写入内容后的新MockLib库替换移除“aar”后的空AAR依赖关系,将Android Archive文件的AAR依赖更改为工程依赖,即建立Android Archive文件与新MockLib库的依赖关系。替换依赖关系的代码如下所示:
“WuBaLogLib”:dependencyMode==“aar”,
“58AnjukeLib”:dependencyMode==“aar”,
“WuBaZxingLib”:dependencyMode==“aar”,
“WubaMockLib”:dependencyMode==“”
新MockLib库为本地工程库,其与服务器中存储的AAR依赖可实现相同的功能,即利用本地工程库模拟服务器中存储的AAR依赖,使得在开发AAR时,从本地Lib库依赖中提取相应文件,提高开发效率。
S33、基于资源映射关系文件,进行ID样式还原,得到新资源映射关系。
在将Android Archive文件的AAR依赖更改为新MockLib库的工程依赖后,当前工程依赖为空依赖,需向工程依赖文件夹中写入依赖关系,即写入资源映射关系文件。即需要对Android Archive文件中的资源映射关系文件,执行重新拼装资源ID步骤,将资源映射关系文件中的ID值进行ID样式还原,以得到可以写入新MockLib库的工程依赖文件夹的新资源映射关系。
图6为本发明实施例提供的确定新资源映射关系的方法流程图;图7为本发明实施例提供的资源映射关系文件的示意图。参见图6和图7,本实施例提供的方法,按照下述步骤确定新资源映射关系:
S331、基于资源映射关系文件,获取目标ID值;资源映射关系文件包括数组相对应的值、属性、属性名称和ID值。
资源映射关系文件(R.txt)中包括数个ID值,每个ID值均存在一一对应的值、属性和属性名称。如图7中,以序号3为例,int为值,是整数;color为属性,default_mask_color为属性名称,0x7f060001为ID值。ID值为引用资源值,因每次编译不同而随机变化,但每个ID值均会确定唯一的属性(ID)。
S332、以目标ID值,确定对应的目标属性名称。
S333、基于目标属性名称,确定对应的目标属性。
在确定出目标ID值后,将ID为0x开头的16进制ID值进行xml中的ID样式还原,即依据资源映射关系文件,根据目标ID值查找到属性名称,再根据目标属性名称查找到目标属性。
S334、基于目标属性,确定属性引用关系。
在查找到目标属性后,即可确定对应的属性引用关系,以color为例,其属性引用关系为R.color.default_mask_color。确定出属性引用关系,即可实现ID值的样式还原,例如,由ID值0x7f060001,还原为属性引用关系R.color.default_mask_color。
S335、利用归属属性引用关系,生成新资源映射关系。
基于步骤S331至S334的方法,可将资源映射关系文件中的每个ID值进行还原,分别得到对应的属性引用关系,即生成一系列对应ID值的属性引用关系R.ID.XXX,得到新资源映射关系。
可见,在进行ID样式还原时,以ID值作为地址,通过地址查找到属性名称,最终查找到属性本身(ID),确定出属性引用关系,即ID转换的xml文件。
S34、将新资源映射关系添加至与Android Archive文件建立工程依赖关系的新MockLib库中,得到工程依赖MockLib库。
在确定出新资源映射关系后,将其写入新MockLib库中,此时,新MockLib库为与Android Archive文件建立工程依赖关系的库,得到工程依赖MockLib库。
工程依赖MockLib库中包括写入的集合压缩文件(classes.jar)、清单配置文件(AndroidManifest.xml)和新资源映射关系。
S4、对工程依赖MockLib库进行编译打包,得到经Mock测试后的第一应用程序apk包,以及,确定第一应用程序apk包的容量。
为确定Android Archive文件在应用程序中的大小,需执行编译和打包程序,即对工程依赖MockLib库进行编译打包,得到第一应用程序apk包,该apk包为执行Mock测试后的应用程序apk包。在完成编译打包后,记录Mock测试后的工程编译应用程序大小,即第一应用程序apk包的容量。
编译打包方法可采用常用的方法,本实施例不做具体限定。
S5、获取基于Android Archive文件进行编译打包得到的第二应用程序apk包的容量。
S6、基于第一应用程序apk包的容量以及第二应用程序apk包的容量,监控安卓手机应用程序容量。
在确定Android Archive文件在应用程序中的大小时,采用的方法是利用容量差的方式进行计算,为此,需获取原应用程序apk包的容量,即该Android Archive文件未经过Mock测试过程,依然以AAR为依赖关系的文件时,经过编译打包得到的第二应用程序apk包的容量。
第二应用程序apk包的容量为原应用程序apk包的容量。利用经过Mock测试前后的应用程序apk包的容量差,来监控安卓手机应用程序容量。
具体地,本实施例中,按照下述步骤基于第一应用程序apk包的容量以及所述第二应用程序apk包的容量,监控所述安卓手机应用程序容量,包括:
步骤61、基于第一应用程序apk包的容量以及第二应用程序apk包的容量,计算两个应用程序apk包的容量差。
步骤62、以两个应用程序apk包的容量差作为Android Archive文件在应用程序中的大小,基于Android Archive文件的大小监控安卓手机应用程序容量。
第二应用程序apk包是基于原Android Archive文件进行编译打包得到,因此,第二应用程序apk包中包括图片资源,而第一应用程序apk包中不包括图片资源,使得第二应用程序apk包的容量大于第一应用程序apk包的容量。由第二应用程序apk包的容量减去第一应用程序apk包的容量,得到经过Mock测试前后的应用程序apk包的容量差,两个应用程序apk包的容量差作为Android Archive文件的容量,进而可统计各业务线在应用程序中文件占比及大小。
根据上述提供的方法,可确定应用程序中所引入的每个Android Archive文件的大小,进而在需要减少APK文件大小时,可以确定减少Android Archive文件的数量,进而可以确定减少应用程序的容量,实现安卓手机应用程序容量的监控。在后续应用中,可使厂商内置的应用程序,在超出应用程序安装包文件大小上限时,可根据数据大小及业务下掉部分AAR依赖。
由以上技术方案可知,本发明实施例提供的一种安卓手机应用程序容量监控方法,当应用程序引入Android Archive文件时,在工程根目录下,创建MockLib库,对AndroidArchive文件进行解压,得到Android Archive文件的解压内容;将Android Archive文件的解压内容写入MockLib库,建立Android Archive文件与MockLib库的工程依赖关系,得到工程依赖MockLib库;确定对工程依赖MockLib库进行编译打包后得到的第一应用程序apk包的容量;基于第一应用程序apk包的容量以及第二应用程序apk包的容量,监控安卓手机应用程序容量。可见,该方法通过替换AAR依赖为工程依赖,移除AAR依赖中主要占比的图片资源,保留集合压缩文件和清单配置文件,以及ID转换的新资源映射关系,进行编译构建。通过计算经Mock测试前后的Android Archive文件在应用程序中的大小,来准确地确定应用程序中引用的Android Archive文件的减少数量,进而更加有效的监控应用程序容量。
图8为本发明实施例提供的安卓手机应用程序容量监控装置的结构框图。参见图8,本申请提供了一种安卓手机应用程序容量监控装置,用于执行图1所示的安卓手机应用程序容量监控方法的相关步骤,当所述应用程序引入Android Archive文件时,该装置包括:MockLib库创建模块10,用于在工程根目录下,创建MockLib库,所述MockLib库用于写入所述Android Archive文件的解压内容;解压内容确定模块20,用于对所述AndroidArchive文件进行解压,得到所述Android Archive文件的解压内容;工程依赖建立模块30,用于将所述Android Archive文件的所述解压内容写入MockLib库,建立所述AndroidArchive文件与MockLib库的工程依赖关系,得到工程依赖MockLib库;第一容量确定模块40,用于对所述工程依赖MockLib库进行编译打包,得到经Mock测试后的第一应用程序apk包,以及,确定第一应用程序apk包的容量;第二容量获取模块50,用于获取基于所述Android Archive文件进行编译打包得到的第二应用程序apk包的容量;应用程序容量监控模块60,用于基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,监控所述安卓手机应用程序容量。
进一步地,所述工程依赖建立模块30,包括:所述Android Archive文件的解压内容包括集合压缩文件、清单配置文件和资源映射关系文件;所述MockLib库内配置有Libs目录和Lib库根目录;文件内容写入单元,用于将所述集合压缩文件添加至所述Libs目录下,以及,将所述清单配置文件添加至所述Lib库根目录下,得到新MockLib库;AAR依赖解除单元,用于将所述Android Archive文件中的AAR依赖关系解除,与所述新MockLib库建立工程依赖关系;ID样式还原单元,用于基于所述资源映射关系文件,进行ID样式还原,得到新资源映射关系;工程依赖建立单元,用于将所述新资源映射关系添加至与所述AndroidArchive文件建立工程依赖关系的新MockLib库中,得到工程依赖MockLib库。
进一步地,所述AAR依赖解除单元,包括:AAR依赖关系获取子单元,用于获取所述Android Archive文件的AAR依赖关系;AAR依赖值移除子单元,用于将所述AAR依赖关系中的AAR依赖值移除,得到空AAR依赖关系;依赖替换子单元,用于调用所述新MockLib库的工程依赖关系,替换所述空AAR依赖关系,建立Android Archive文件与新MockLib库的依赖关系。
进一步地,所述ID样式还原单元,包括:目标ID值确定子单元,用于基于所述资源映射关系文件,获取目标ID值;所述资源映射关系文件包括数组相对应的值、属性、属性名称和ID值;目标属性名称确定子单元,用于以所述目标ID值,确定对应的目标属性名称;目标属性确定子单元,用于基于所述目标属性名称,确定对应的目标属性;属性引用关系确定子单元,用于基于所述目标属性,确定属性引用关系;ID样式还原子单元,用于利用归属所述属性引用关系,生成新资源映射关系。
进一步地,所述应用程序容量监控模块60,包括:容量差计算单元,用于基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,计算两个应用程序apk包的容量差;应用程序容量监控单元,用于以所述两个应用程序apk包的容量差作为所述Android Archive文件在所述应用程序中的大小,基于所述Android Archive文件的大小监控所述安卓手机应用程序容量。
图9为本发明实施例提供的电子设备的硬件结构示意图。如图9所示,本申请提供一种电子设备,包括:存储器601,用于存储程序指令;处理器602,用于调用并执行所述存储器中的程序指令,以实现前述实施例所述的安卓手机应用程序容量监控方法。
本实施例中,处理器602和存储器601可通过总线或其他方式连接。处理器可以是通用处理器,例如中央处理器、数字信号处理器、专用集成电路,或者被配置成实施本发明实施例的一个或多个集成电路。存储器可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘。
本申请提供一种存储介质,所述存储介质中存储有计算机程序,当安卓手机应用程序容量监控装置的至少一个处理器执行所述计算机程序时,安卓手机应用程序容量监控装置执行前述实施例所述的安卓手机应用程序容量监控方法。
所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-only memory,简称:ROM)或随机存储记忆体(英文:random access memory,简称:RAM)等。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于安卓手机应用程序容量监控装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
以上所述的本发明实施方式并不构成对本发明保护范围的限定。

Claims (6)

1.一种安卓手机应用程序容量监控方法,当所述应用程序引入AndroidArchive文件时,其特征在于,包括:
在工程根目录下,创建MockLib库,所述MockLib库用于写入所述AndroidArchive文件的解压内容;
对所述AndroidArchive文件进行解压,得到所述AndroidArchive文件的解压内容;
所述AndroidArchive文件的解压内容包括集合压缩文件、清单配置文件和资源映射关系文件;所述MockLib库内配置有Libs目录和Lib库根目录;
将所述集合压缩文件添加至所述Libs目录下,以及,将所述清单配置文件添加至所述Lib库根目录下,得到新MockLib库;
获取所述AndroidArchive文件的AAR依赖关系;
将所述AAR依赖关系中的AAR依赖值移除,得到空AAR依赖关系;
调用所述新MockLib库的工程依赖关系,替换所述空AAR依赖关系,建立AndroidArchive文件与新MockLib库的依赖关系;
基于所述资源映射关系文件,进行ID样式还原,得到新资源映射关系;
将所述新资源映射关系添加至与所述AndroidArchive文件建立工程依赖关系的新MockLib库中,得到工程依赖MockLib库;
对所述工程依赖MockLib库进行编译打包,得到经Mock测试后的第一应用程序apk包,以及,确定所述第一应用程序apk包的容量;
获取基于所述AndroidArchive文件进行编译打包得到的第二应用程序apk包的容量;
基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,计算两个应用程序apk包的容量差;
以所述两个应用程序apk包的容量差作为所述AndroidArchive文件在所述应用程序中的大小,基于所述AndroidArchive文件的大小监控所述安卓手机应用程序容量。
2.根据权利要求1所述的方法,其特征在于,所述基于资源映射关系文件,进行ID样式还原,得到新资源映射关系,包括:
基于所述资源映射关系文件,获取目标ID值;所述资源映射关系文件包括数组相对应的值、属性、属性名称和ID值;
以所述目标ID值,确定对应的目标属性名称;
基于所述目标属性名称,确定对应的目标属性;
基于所述目标属性,确定属性引用关系;
利用归属所述属性引用关系,生成新资源映射关系。
3.一种安卓手机应用程序容量监控装置,当所述应用程序引入AndroidArchive文件时,其特征在于,包括:
MockLib库创建模块,用于在工程根目录下,创建MockLib库,所述MockLib库用于写入所述AndroidArchive文件的解压内容;
解压内容确定模块,用于对所述AndroidArchive文件进行解压,得到所述AndroidArchive文件的解压内容;
工程依赖建立模块,用于将所述AndroidArchive文件的所述解压内容写入所述MockLib库,建立所述AndroidArchive文件与所述MockLib库的工程依赖关系,得到工程依赖MockLib库;
所述工程依赖建立模块,包括:
所述AndroidArchive文件的解压内容包括集合压缩文件、清单配置文件和资源映射关系文件;所述MockLib库内配置有Libs目录和Lib库根目录;
文件内容写入单元,用于将所述集合压缩文件添加至所述Libs目录下,以及,将所述清单配置文件添加至所述Lib库根目录下,得到新MockLib库;
AAR依赖解除单元,用于将所述AndroidArchive文件中的AAR依赖关系解除,与所述新MockLib库建立工程依赖关系;
所述AAR依赖解除单元,包括:
AAR依赖关系获取子单元,用于获取所述AndroidArchive文件的AAR依赖关系;
AAR依赖值移除子单元,用于将所述AAR依赖关系中的AAR依赖值移除,得到空AAR依赖关系;
依赖替换子单元,用于调用所述新MockLib库的工程依赖关系,替换所述空AAR依赖关系,建立AndroidArchive文件与新MockLib库的依赖关系;
ID样式还原单元,用于基于所述资源映射关系文件,进行ID样式还原,得到新资源映射关系;
工程依赖建立单元,用于将所述新资源映射关系添加至与所述AndroidArchive文件建立工程依赖关系的新MockLib库中,得到工程依赖MockLib库;
第一容量确定模块,用于对所述工程依赖MockLib库进行编译打包,得到经Mock测试后的第一应用程序apk包,以及,确定所述第一应用程序apk包的容量;
第二容量获取模块,用于获取基于所述AndroidArchive文件进行编译打包得到的第二应用程序apk包的容量;
应用程序容量监控模块,用于基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,监控所述安卓手机应用程序容量;
所述应用程序容量监控模块,包括:
容量差计算单元,用于基于所述第一应用程序apk包的容量以及所述第二应用程序apk包的容量,计算两个应用程序apk包的容量差;
应用程序容量监控单元,用于以所述两个应用程序apk包的容量差作为所述AndroidArchive文件在所述应用程序中的大小,基于所述AndroidArchive文件的大小监控所述安卓手机应用程序容量。
4.根据权利要求3所述的装置,其特征在于,所述ID样式还原单元,包括:
目标ID值确定子单元,用于基于所述资源映射关系文件,获取目标ID值;所述资源映射关系文件包括数组相对应的值、属性、属性名称和ID值;
目标属性名称确定子单元,用于以所述目标ID值,确定对应的目标属性名称;
目标属性确定子单元,用于基于所述目标属性名称,确定对应的目标属性;
属性引用关系确定子单元,用于基于所述目标属性,确定属性引用关系;
ID样式还原子单元,用于利用归属所述属性引用关系,生成新资源映射关系。
5.一种电子设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用并执行所述存储器中的程序指令,以实现权利要求1~2任一项所述的安卓手机应用程序容量监控方法。
6.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,当安卓手机应用程序容量监控装置的至少一个处理器执行所述计算机程序时,安卓手机应用程序容量监控装置执行权利要求1~2任一项所述的安卓手机应用程序容量监控方法。
CN202010183864.7A 2020-03-16 2020-03-16 一种安卓手机应用程序容量监控方法及装置 Active CN111399846B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010183864.7A CN111399846B (zh) 2020-03-16 2020-03-16 一种安卓手机应用程序容量监控方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010183864.7A CN111399846B (zh) 2020-03-16 2020-03-16 一种安卓手机应用程序容量监控方法及装置

Publications (2)

Publication Number Publication Date
CN111399846A CN111399846A (zh) 2020-07-10
CN111399846B true CN111399846B (zh) 2023-03-31

Family

ID=71428924

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010183864.7A Active CN111399846B (zh) 2020-03-16 2020-03-16 一种安卓手机应用程序容量监控方法及装置

Country Status (1)

Country Link
CN (1) CN111399846B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109857405A (zh) * 2019-02-02 2019-06-07 Oppo广东移动通信有限公司 应用程序安装包的编译方法、装置、存储介质及终端
CN109885324A (zh) * 2019-02-25 2019-06-14 北京达佳互联信息技术有限公司 一种应用程序安装包的处理方法、装置、终端及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3188063A1 (en) * 2015-12-29 2017-07-05 GuardSquare NV A build system
CN110321134A (zh) * 2018-03-30 2019-10-11 深圳Tcl新技术有限公司 一种生成应用安装包的方法、存储介质以应用服务器
CN108897546A (zh) * 2018-07-03 2018-11-27 北京五八信息技术有限公司 监控apk大小的方法、装置、设备及可读存储介质
CN110058850B (zh) * 2019-04-10 2022-12-09 腾讯音乐娱乐科技(深圳)有限公司 一种应用的开发方法、装置以及存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109857405A (zh) * 2019-02-02 2019-06-07 Oppo广东移动通信有限公司 应用程序安装包的编译方法、装置、存储介质及终端
CN109885324A (zh) * 2019-02-25 2019-06-14 北京达佳互联信息技术有限公司 一种应用程序安装包的处理方法、装置、终端及存储介质

Also Published As

Publication number Publication date
CN111399846A (zh) 2020-07-10

Similar Documents

Publication Publication Date Title
CN106371940B (zh) 一种程序崩溃解决方法及装置
CN109885324B (zh) 一种应用程序安装包的处理方法、装置、终端及存储介质
CN111324359B (zh) 插件部署方法及装置
CN111324421B (zh) 一种容器镜像的提供方法、加载方法及相关设备和系统
CN111818123A (zh) 网络前端远程回放方法、装置、设备及存储介质
CN112506525A (zh) 持续集成和持续交付方法、装置、电子设备及存储介质
CN110543427B (zh) 测试用例存储方法、装置、电子设备及存储介质
CN113885935A (zh) 资源打包方法、装置、电子设备及计算机可读存储介质
CN107688456B (zh) 文件生成方法、设备以及计算机可读存储介质
CN111159278A (zh) 数据展示方法及装置、电子设备和计算机可读存储介质
CN112286543B (zh) 一种应用服务部署方法及装置
CN113391972A (zh) 一种接口测试方法及装置
CN111240987B (zh) 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN111399846B (zh) 一种安卓手机应用程序容量监控方法及装置
CN112799691A (zh) 一种应用安装包的处理方法、装置、设备及介质
CN112559067A (zh) 一种动态库加载方法及相关装置
CN111488144A (zh) 一种数据处理方法以及设备
CN113641594B (zh) 跨端自动化测试方法以及相关装置
CN113190235B (zh) 一种代码的分析方法、装置、电子终端及存储介质
CN114816816A (zh) 崩溃堆栈信息处理方法、装置、设备及存储介质
CN111367512B (zh) 一种应用程序开发中创建Android库模块依赖关系的方法及装置
CN114896211B (zh) 一种基于云渲染应用的共享资产文件方法及系统
CN116774988B (zh) 解除框架包模式符号依赖的方法及装置
CN111309331B (zh) 业务处理方法及装置、电子设备、存储介质
CN116301833A (zh) 小程序模板的配置方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant