CN113656044A - 安卓安装包压缩方法、装置、计算机设备及存储介质 - Google Patents

安卓安装包压缩方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN113656044A
CN113656044A CN202110975917.3A CN202110975917A CN113656044A CN 113656044 A CN113656044 A CN 113656044A CN 202110975917 A CN202110975917 A CN 202110975917A CN 113656044 A CN113656044 A CN 113656044A
Authority
CN
China
Prior art keywords
file
installation package
task
folder
name
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.)
Granted
Application number
CN202110975917.3A
Other languages
English (en)
Other versions
CN113656044B (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.)
Ping An Technology Shenzhen Co Ltd
Original Assignee
Ping An Technology Shenzhen 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 Ping An Technology Shenzhen Co Ltd filed Critical Ping An Technology Shenzhen Co Ltd
Priority to CN202110975917.3A priority Critical patent/CN113656044B/zh
Publication of CN113656044A publication Critical patent/CN113656044A/zh
Application granted granted Critical
Publication of CN113656044B publication Critical patent/CN113656044B/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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种安卓安装包压缩方法、装置、计算机设备及存储介质,所述方法包括:监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,若检测到指定类型的任务,则将指定类型的任务作为目标任务,并获取目标任务对应的资源文件,作为第一文件,对执行目标任务的输入文件夹中的文件名称进行遍历,得到名称与第一文件对应的二进制抽取文件,作为第二文件,对第二文件进行二次压缩,得到压缩资源文件,并采用压缩资源文件替换第二文件,对包含更新后的输入文件夹的安装包文件进行压缩打包,得到压缩后的安卓安装包文件。采用本发明可减少安装包体积,提高压缩效率和数据传输效率。

Description

安卓安装包压缩方法、装置、计算机设备及存储介质
技术领域
本发明涉及移动开发技术领域,尤其涉及一种安卓安装包压缩方法、装置、计算机设备及存储介质。
背景技术
随着移动通信技术的发展,安卓应用程序的应用越来越广泛,开发者通过提供安卓安装包(Android application package,APK)给用户,用户采用安卓安装包安装应用程序并在安装成功后使用应用程序,但随着用户需求的提高,安装包越来越大,这导致安装包下载传输时间较长,同时需要消耗较多的网络传输流量资源,影响用户体验,因而,需要对安卓安装包进行体积压缩,以提高安装包数据传输过程中的效率。
目前针对安卓安装包体积压缩,主要采用安卓开发包中的自动化打包工具aapt确定需要添加到APK文件中的待压缩文件,进而对待压缩文件进行压缩,实现缩小安卓安装包的体积,主要是完成对资源的混淆压缩,但是压缩的效果不太明显,因而,亟需一种能有效缩小安卓安装包体积的压缩方法。
发明内容
本发明实施例提供一种安卓安装包压缩方法、装置、计算机设备和存储介质,以减少安卓安装包体积,节省网络传输流量资源,降低成本。
为了解决上述技术问题,本申请实施例提供一种安卓安装包压缩方法,包括:
监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果;
若所述检测结果为检测到指定类型的任务,则将所述指定类型的任务作为目标任务,并获取所述目标任务对应的资源文件,作为第一文件;
基于预设的文件与二进制抽取文件对应的命名方式,对执行所述目标任务的输入文件夹中的每个文件名称进行遍历匹配,得到名称与所述第一文件对应的二进制抽取文件,作为第二文件,其中,所述输入文件夹为安装包文件中的文件夹;
对所述第二文件进行二次压缩,得到压缩资源文件,并采用所述压缩资源文件替换所述第二文件,得到更新后的输入文件夹;
对包含所述更新后的输入文件夹的安装包文件进行压缩打包,得到压缩后的安卓安装包文件。
可选地,采用项目自动化构建工具gradle对所述安卓安装包进行监听。
可选地,所述获取所述目标任务对应的资源文件,作为第一文件包括:
在构建的执行阶段,通过添加doFirst方法增加资源文件读取任务;
在资源文件读取任务被执行后,生成包含资源文件名称的调试日志;
从所述调试日志中获取资源文件名称,并从所有所述输入文件中,读取所述资源文件名称对应的文件,作为第一文件。
可选地,所述采用所述压缩资源文件替换所述第二文件包括:
将所述压缩资源文件写入到与所述第二文件同路径的临时文件夹中;
删除所述第二文件,并将所述压缩资源文件的文件名更新为所述第二文件的文件名。
可选地,所述基于预设的文件与二进制抽取文件对应的命名方式,对执行所述目标任务的所有输入文件进行遍历,得到所述第一文件对应的二进制抽取文件,作为第二文件包括:
获取预设的文件与二进制抽取文件对应的命名方式;
读取执行所述目标任务的第一个输入文件;
判断读取到的输入文件是否为二进制抽取文件;若所述读取到的输入文件为二进制抽取文件,则基于所述命名方式,确定所述读取到的输入文件对应的原始文件的文件名,作为原始文件名称;
将所述原始文件名称与所述第一文件的文件名称进行对比,得到比较结果;
若比较结果为名称不同,则读取下一个输入文件,并返回所述判断读取到的输入文件是否为二进制抽取文件的步骤继续执行;
若比较结果为名称相同,则将所述读取到的输入文件作为所述第一文件对应的二进制抽取文件。
可选地,所述将原始文件名称与第一文件的文件名称进行对比,得到比较结果,包括:读取所述原始文件名称的字符长度,作为第一长度,读取所述第一文件的文件名称,作为第二长度;
若所述第一长度与第二长度不同,则确定所述比较结果为名称不同;
若所述第一长度与第二长度相同,则按从前往后的顺序,对每个位置的字符进行比较;
若存在任一位置的字符不同,则终止比较,并确定所述比较结果为名称不同,若每个位置的字符均相同,则确认所述比较结果为名称相同。
可选地,在所述对包含所有所述输入文件的文件夹进行压缩打包,得到压缩后的安卓安装包文件之前,所述安卓安装包压缩方法还包括:
在构建过程中,对res文件夹和drawable文件夹中未引用资源文件进行清理,并对res文件夹和drawable文件夹中的图片资源进行无损压缩,得到更新后的res文件夹和更新后的drawable文件夹。
为了解决上述技术问题,本申请实施例还提供一种安卓安装包压缩装置,包括:
任务节点监听模块,用于监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果;
第一文件获取模块,用于若所述检测结果为检测到指定类型的任务,则将所述指定类型的任务作为目标任务,并获取所述目标任务对应的资源文件,作为第一文件;
第二文件获取模块,用于基于预设的文件与二进制抽取文件对应的命名方式,对执行所述目标任务的输入文件夹中的每个文件名称进行遍历匹配,得到名称与所述第一文件对应的二进制抽取文件,作为第二文件,其中,所述输入文件夹为安装包文件中的文件夹;
第二文件更新模块,用于对所述第二文件进行二次压缩,得到压缩资源文件,并采用所述压缩资源文件替换所述第二文件,得到更新后的输入文件夹;
安装包生成模块,用于对包含所述更新后的输入文件夹的安装包文件进行压缩打包,得到压缩后的安卓安装包文件。
可选地,所述第一文件获取模块包括:
任务构建单元,用于在构建的执行阶段,通过添加doFirst方法增加资源文件读取任务;
日志生成单元,用于在资源文件读取任务被执行后,生成包含资源文件名称的调试日志;
文件提取单元,用于从所述调试日志中获取资源文件名称,并从所有所述输入文件中,读取所述资源文件名称对应的文件,作为第一文件。
可选地,所述第二文件更新模块包括:
文件写入单元,用于将所述压缩资源文件写入到与所述第二文件同路径的临时文件夹中;
文件替换单元,用于删除所述第二文件,并将所述压缩资源文件的文件名更新为所述第二文件的文件名。
命名方式获取单元,用于获取预设的文件与二进制抽取文件对应的命名方式;
输入文件读取单元,用于读取执行所述目标任务的第一个输入文件;
文件类型判断单元,用于判断读取到的输入文件是否为二进制抽取文件;
原始名称获取单元,用于若所述读取到的输入文件为二进制抽取文件,则基于所述命名方式,确定所述读取到的输入文件对应的原始文件的文件名,作为原始文件名称;
名称对比单元,用于将所述原始文件名称与所述第一文件的文件名称进行对比,得到比较结果;
循环迭代单元,用于若比较结果为名称不同,则读取下一个输入文件,并返回所述判断读取到的输入文件是否为二进制抽取文件的步骤继续执行;
结果确定单元,用于若比较结果为名称相同,则将所述读取到的输入文件作为所述第一文件对应的二进制抽取文件。
可选地,所述名称对比单元包括:
长度读取子单元,用于读取所述原始文件名称的字符长度,作为第一长度,读取所述第一文件的文件名称,作为第二长度;
第一结果确定子单元,用于若所述第一长度与第二长度不同,则确定所述比较结果为名称不同;
第二结果确定子单元,用于若所述第一长度与第二长度相同,则按从前往后的顺序,对每个位置的字符进行比较;
第三结果确定子单元,用于若存在任一位置的字符不同,则终止比较,并确定所述比较结果为名称不同,若每个位置的字符均相同,则确认所述比较结果为名称相同。
可选地,所述安卓安装包压缩装置还包括:
文件清理压缩模块,用于在构建过程中,对res文件夹和drawable文件夹中未引用资源文件进行清理,并对res文件夹和drawable文件夹中的图片资源进行无损压缩,得到更新后的res文件夹和更新后的drawable文件夹。
为了解决上述技术问题,本申请实施例还提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述安卓安装包压缩方法的步骤。
为了解决上述技术问题,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述安卓安装包压缩方法的步骤。
本发明实施例提供的安卓安装包压缩方法、装置、计算机设备及存储介质,通过监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果,若检测结果为检测到指定类型的任务,则将指定类型的任务作为目标任务,并获取目标任务对应的资源文件,作为第一文件,基于预设的文件与二进制抽取文件对应的命名方式,对执行目标任务的输入文件夹中的每个文件名称进行遍历匹配,得到名称与第一文件对应的二进制抽取文件,作为第二文件,对第二文件进行二次压缩,得到压缩资源文件,并采用压缩资源文件替换第二文件,得到更新后的输入文件夹,对包含输入文件夹的安装包文件进行压缩打包,得到压缩后的安卓安装包文件,实现对不影响应用程序安装的二进制抽取文件进行提取和二次压缩,减少安装包体积,提高压缩效率和数据传输效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请可以应用于其中的示例性***架构图;
图2是本申请的安卓安装包压缩方法的一个实施例的流程图;
图3是根据本申请的安卓安装包压缩装置的一个实施例的结构示意图;
图4是根据本申请的计算机设备的一个实施例的结构示意图。
具体实施方式
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,如图1所示,***架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上显示的页面提供支持的后台服务器,服务器可以是独立的服务器,也可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
需要说明的是,本申请实施例所提供的安卓安装包压缩方法由服务器执行,相应地,安卓安装包压缩装置设置于服务器中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器,本申请实施例中的终端设备101、102、103具体可以对应的是实际生产中的应用***。
请参阅图2,图2示出本发明实施例提供的一种安卓安装包压缩方法,以该方法应用在图1中的服务端为例进行说明,本申请实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用***。
人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互***、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
本实施例的具体详述如下:
S201:监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果。
具体地,在安卓安装包进行打包的流程中,存在多个任务节点,通过对每个任务节点进行监听,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果,基于检测结果获取指定类型的任务。
其中,任务节点是指打包过程中的每个任务流程,具体包括但不限于:检测配置文件(例如AndroidManifest.xml)、属性初始化(例minSdkVersion,和uses-sdk)、添加被引用资源包、收集资源文件、处理重叠包、文件加到资源表、编译values资源、给bag资源分配id、编译资源文件等。
在上述任务节点中,部分任务节点涉及可压缩的资源文件的处理,将涉及可压缩的资源文件的处理的任务节点对应的任务,作为指定类型的任务,以便后续处理获取可压缩的资源文件。
其中,指定类型的任务用于后续获取可压缩的资源文件。
可选地,采用项目自动化构建工具gradle对安卓安装包进行监听。
其中,gradle是一种构建工具,其构建基于一种基于JVM的动态语言Groovy(DSL),用于申明构建和创建任务,让依赖管理更简单。Gradle进行构建执行的生命周期包括三个阶段,分别是初始化阶段Initialization、配置阶段Configuration和执行阶段Execution。本实施例中,预先设定指定类型任务,通过gradle对安装包的每个任务节点进行监听,快速筛选出关键的任务。
本实施例中,采用自动化程度较高的构建工具gradle对安卓安装包进行监听,较为便捷,减少代码开发成本并提高监听效率。
S202:若检测结果为检测到指定类型的任务,则将指定类型的任务作为目标任务,并获取目标任务对应的资源文件,作为第一文件。
具体地,指定类型的任务是指与预先设定类型具有相同类型的任务,本实施例中,基于环境和预设的元素,确定指定类型,例如,预设的元素为某种包“package”,开头加上当前渠道环境名的任务,测试环境就是packageDebug,生产环境则是packageRelease,构成了指定类型的任务,进而在检测到指定类型的任务时,获取该指定类型的任务对应的资源文件,作为第一文件。
具体获取第一文件的过程可参考后续实施例的描述,为避免重复,此处不再赘述。
可选地,第一文件为Resources.arsc文件。
在打包APK安装文件时,会生成2个比较重要的跟资源有关系的文件,分别为R.java文件和Resources.arsc文件,其中,R.java文件是一个类,里边存入一些资源的标识信息,Resources.arsc文件是一个记录资源的映射信息的文件,例如其中包含ResTable,表示头信息、线程池信息、字符串的池信息,又例如,需要加载一张名称为image_src的图片资源,在低分辨率模型下,安卓设备会解析Resources.arsc文件,并基于解析结果寻找图片资源对应的低分辨率映射信息drawable-xdpi对应的配置信息。
S203:基于预设的文件与二进制抽取文件对应的命名方式,对执行目标任务的输入文件夹中的文件名称进行遍历匹配,得到名称与第一文件对应的二进制抽取文件,作为第二文件,其中,输入文件夹为安装包文件中的文件夹。
例如,继续以步骤S202中的示例为例,对执行目标任务的所有输入文件进行遍历,获取到输入的classes.dex,shrunkJavaRes.jar,AndroidManifest.xml,resources-debug-stripped.ap_文件,其中Resources-debug-stripped.ap_文件就是存放的二进制抽取资源文件,也即第二文件。
进一步地,在一具体可选实施方式中,步骤S203中,基于预设的文件与二进制抽取文件对应的命名方式,对执行目标任务的所有输入文件进行遍历,得到第一文件对应的二进制抽取文件,作为第二文件包括:
获取预设的原始文件与二进制抽取文件对应的命名方式;
读取执行目标任务的第一个输入文件;
判断读取到的输入文件是否为二进制抽取文件;
若读取到的输入文件为二进制抽取文件,则基于命名方式,确定读取到的输入文件对应的原始文件的文件名,作为原始文件名称;
将原始文件名称与第一文件的文件名称进行对比,得到比较结果;
若比较结果为名称不同,则读取下一个输入文件,并返回判断读取到的输入文件是否为二进制抽取文件的步骤继续执行;
若比较结果为名称相同,则将读取到的输入文件作为第一文件对应的二进制抽取文件。
具体地,在输入文件中,一些文件(原始文件)具有对应的二进制抽取文件,并且,这些文件与其对应的二进制抽取文件,二者文件名称为根据预先设置的命名方式来命名关联的。
其中,二进制抽取文件是指通过二进制的方式进行读写的文件。
其中,预设的原始文件与二进制抽取文件对应的命名方式具体可根据实际需要进行设定,并存储在配置文件中,在进行遍历获取二进制抽取文件时,从配置文件中读取该命名方式(命名规则)并写入到临时内存中,并在每次进行命名对比时,调用临时内存中的命名方式数据。
容易理解地,第一文件对应的二进制抽取文件有且仅有一个,因而,在找到第一文件对应的二进制抽取文件时,即结束遍历。
S204:对第二文件进行二次压缩,得到压缩资源文件,并采用压缩资源文件替换第二文件,得到更新后的输入文件夹。
需要说明的是,安卓安装包中的各个文件夹都是压缩状态,二次压缩是指第二文件所在文件夹为压缩状态,通过对压缩状态中的文件夹先解压,再对其中的第二文件进行压缩,得到更新后的输入文件夹。
其中,进行二次压缩采用的算法包括但不限于ZIP压缩算法、lzma算法、lzma2算法和RLE(Run Length Encoding)等。
需要说明的是,从安卓设备安装APK的原理来看,安装APK,其实也是对APK文件解压。通过对压缩后的APK文件更改后缀名为“.zip“文件,然后使用unzip解压文件,再次查看第二文件。该文件和未压缩的APK解压后的大小一致,也即,当安装APK时,第二文件文件都会被解压,也就不会存在压缩后无法安装的问题。在一具体实施方式中,第二文件大小从380KB压缩到80KB,整个APK的体积最终减小300KB大小。
采用压缩资源文件替换第二文件的具体实现过程,可参考后续实施例的描述,为避免重复,此处不再赘述。
S205:对包含所有输入文件的文件夹进行压缩打包,得到压缩后的安卓安装包文件。
具体地,所有输入文件是指用于进行安卓安装包生成的文件,第该文件进行压缩打包,生成压缩后的安卓安装包文件APK。
本实施例中,通过监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果,若检测结果为检测到指定类型的任务,则将指定类型的任务作为目标任务,并获取目标任务对应的资源文件,作为第一文件,基于预设的文件与二进制抽取文件对应的命名方式,对执行目标任务对应的输入文件夹中的每个文件名称进行遍历匹配,得到名称与第一文件对应的二进制抽取文件,作为第二文件,对第二文件进行二次压缩,得到压缩资源文件,并采用压缩资源文件替换第二文件,得到更新后的输入文件夹,对包含输入文件夹的安装包文件进行压缩打包,得到压缩后的安卓安装包文件,实现对不影响应用程序安装的二进制抽取文件进行提取和二次压缩,减少安装包体积,提高压缩效率和数据传输效率。
在一具体可选实施方式中,步骤S202中,获取目标任务对应的资源文件,作为第一文件包括:
在构建的执行阶段,通过添加doFirst方法增加资源文件读取任务;
在资源文件读取任务被执行后,生成包含资源文件名称的调试日志;
从调试日志中获取资源文件名称,并从所有输入文件中,读取资源文件名称对应的文件,作为第一文件。
其中,doFirst方法是往队列前***任务代码,本实施例中任务代码用于实现资源文件读取任务。
其中,构建的执行阶段也即execution阶段,是gradle执行的生命周期的第三个阶段。
本实施例中,在构建的执行阶段,通过添加doFirst方法增加资源文件读取任务,在资源文件读取任务被执行后,生成包含资源文件名称的调试日志,从调试日志中获取资源文件名称,并从所有输入文件中,读取资源文件名称对应的文件,作为第一文件,实现从输入文件中,快速提取出第一文件,有利于提高第一文件提取的效率。
在一具体可选实施方式中,步骤S204中,采用压缩资源文件替换第二文件包括:
将压缩资源文件写入到与第二文件同路径的临时文件夹中;
删除第二文件,并将压缩资源文件的文件名更新为第二文件的文件名。
其中,与第二文件同路径的临时文件夹中是指第二文件所在的文件夹。
本实施例中,通过将压缩资源文件写入到与第二文件同路径的临时文件夹中,进而删除第二文件,并将压缩资源文件的文件名更新为第二文件的文件名,实现对第二文件的更新。
在一具体可选实施方式中,步骤S204中,对第二文件进行二次压缩,得到压缩资源文件,包括:
采用Lzma2算法或者Zip算法,对第二文件进行体积压缩,得到压缩资源文件。
具体地,Lzma2算法相较于其他现有压缩算法,具有更高的压缩率和效率,Zip算法为无损压缩,根据实际需要,采用Lzma2算法或者Zip算法,对第二文件进行体积压缩,实现第二文件的二次压缩,有利于减少文件体积。
在一具体可选实施方式中,将原始文件名称与第一文件的文件名称进行对比,得到比较结果,包括:
读取原始文件名称的字符长度,作为第一长度,读取第一文件的文件名称,作为第二长度;
若第一长度与第二长度不同,则确定比较结果为名称不同;
若第一长度与第二长度相同,则按从前往后的顺序,对每个位置的字符进行比较;
若存在任一位置的字符不同,则终止比较,并确定比较结果为名称不同,若每个位置的字符均相同,则确认比较结果为名称相同。
本实施例中,通过先根据字符长度进行比较,将长度不同的原始文件直接排除,加快比较速度,提高比较的效率,同时,针对字符长度相同的原始文件和对比文件,采用按顺序逐个字符对比的方式,在发现存在不相同字符,即终止比较,也有利于提高比较效率。
在一具体可选实施方式中,步骤S205之前,在对包含所有输入文件的文件夹进行压缩打包,得到压缩后的安卓安装包文件之前,安卓安装包压缩方法还包括:
在构建过程中,对res文件夹和drawable文件夹中未引用资源文件进行清理,并对res文件夹和drawable文件夹中的图片资源进行无损压缩,得到更新后的res文件夹和更新后的drawable文件夹。
其中,未引用资源文件是指存在于res文件夹和drawable文件夹中,但代码目录中未使用的文件。
本实施例中,通过在构建过程中,对res文件夹和drawable文件夹中未引用资源文件进行清理,并对res文件夹和drawable文件夹中的图片资源进行无损压缩,得到更新后的res文件夹和更新后的drawable文件夹,实现对冗余文件的清理和图片压缩,减少了res文件夹和drawable文件夹的体积,有利于缩小安卓安装包的体积。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
图3示出与上述实施例安卓安装包压缩方法一一对应的安卓安装包压缩装置的原理框图。如图3所示,该安卓安装包压缩装置包括任务节点监听模块31、第一文件获取模块32、第二文件获取模块33第二文件更新模块34和安装包生成模块35。各功能模块详细说明如下:
任务节点监听模块31,用于监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果;
第一文件获取模块32,用于若检测结果为检测到指定类型的任务,则将指定类型的任务作为目标任务,并获取目标任务对应的资源文件,作为第一文件;
第二文件获取模块33,用于基于预设的文件与二进制抽取文件对应的命名方式,对执行目标任务的输入文件夹中的每个文件名称进行遍历匹配,得到名称与第一文件对应的二进制抽取文件,作为第二文件,其中,所述输入文件夹为安装包文件中的文件夹;
第二文件更新模块34,用于对第二文件进行二次压缩,得到压缩资源文件,并采用压缩资源文件替换第二文件,得到更新后的输入文件夹;
安装包生成模块35,用于对包含输入文件夹的安装包文件进行压缩打包,得到压缩后的安卓安装包文件。
可选地,第一文件获取模块32包括:
任务构建单元,用于在构建的执行阶段,通过添加doFirst方法增加资源文件读取任务;
日志生成单元,用于在资源文件读取任务被执行后,生成包含资源文件名称的调试日志;
文件提取单元,用于从调试日志中获取资源文件名称,并从所有输入文件中,读取资源文件名称对应的文件,作为第一文件。
可选地,第二文件获取模块33包括:
命名方式获取单元,用于获取预设的文件与二进制抽取文件对应的命名方式;
输入文件读取单元,用于读取执行目标任务的第一个输入文件;
文件类型判断单元,用于判断读取到的输入文件是否为二进制抽取文件;
原始名称获取单元,用于若读取到的输入文件为二进制抽取文件,则基于命名方式,确定读取到的输入文件对应的原始文件的文件名,作为原始文件名称;
名称对比单元,用于将原始文件名称与第一文件的文件名称进行对比,得到比较结果;
循环迭代单元,用于若比较结果为名称不同,则读取下一个输入文件,并返回判断读取到的输入文件是否为二进制抽取文件的步骤继续执行;
结果确定单元,用于若比较结果为名称相同,则将读取到的输入文件作为第一文件对应的二进制抽取文件。
可选地,名称对比单元包括:
长度读取子单元,用于读取原始文件名称的字符长度,作为第一长度,读取第一文件的文件名称,作为第二长度;
第一结果确定子单元,用于若第一长度与第二长度不同,则确定比较结果为名称不同;
第二结果确定子单元,用于若第一长度与第二长度相同,则按从前往后的顺序,对每个位置的字符进行比较;
第三结果确定子单元,用于若存在任一位置的字符不同,则终止比较,并确定比较结果为名称不同,若每个位置的字符均相同,则确认比较结果为名称相同。
可选地,第二文件更新模块34包括:
文件写入单元,用于将压缩资源文件写入到与第二文件同路径的临时文件夹中;
文件替换单元,用于删除第二文件,并将压缩资源文件的文件名更新为第二文件的文件名。
可选地,安卓安装包压缩装置还包括:
文件清理压缩模块,用于在构建过程中,对res文件夹和drawable文件夹中未引用资源文件进行清理,并对res文件夹和drawable文件夹中的图片资源进行无损压缩,得到更新后的res文件夹和更新后的drawable文件夹。
关于安卓安装包压缩装置的具体限定可以参见上文中对于安卓安装包压缩方法的限定,在此不再赘述。上述安卓安装包压缩装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图4,图4为本实施例计算机设备基本结构框图。
所述计算机设备4包括通过***总线相互通信连接存储器41、处理器42、网络接口43。需要指出的是,图中仅示出了具有组件连接存储器41、处理器42、网络接口43的计算机设备4,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
所述存储器41至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或D界面显示存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器41可以是所述计算机设备4的内部存储单元,例如该计算机设备4的硬盘或内存。在另一些实施例中,所述存储器41也可以是所述计算机设备4的外部存储设备,例如该计算机设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器41还可以既包括所述计算机设备4的内部存储单元也包括其外部存储设备。本实施例中,所述存储器41通常用于存储安装于所述计算机设备4的操作***和各类应用软件,例如安卓安装包压缩的程序代码等。此外,所述存储器41还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器42在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器42通常用于控制所述计算机设备4的总体操作。本实施例中,所述处理器42用于运行所述存储器41中存储的程序代码或者处理数据,例如运行电子文件的控制的程序代码。
所述网络接口43可包括无线网络接口或有线网络接口,该网络接口43通常用于在所述计算机设备4与其他电子设备之间建立通信连接。
本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有界面显示程序,所述界面显示程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的安卓安装包压缩方法的步骤。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
本申请可用于众多通用或专用的计算机***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、基于微处理器的***、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何***或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。

Claims (10)

1.一种安卓安装包压缩方法,其特征在于,包括:
监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果;
若所述检测结果为检测到指定类型的任务,则将所述指定类型的任务作为目标任务,并获取所述目标任务对应的资源文件,作为第一文件;
基于预设的文件与二进制抽取文件对应的命名方式,对执行所述目标任务的输入文件夹中的每个文件名称进行遍历匹配,得到名称与所述第一文件对应的二进制抽取文件,作为第二文件,其中,所述输入文件夹为安装包文件中的文件夹;
对所述第二文件进行二次压缩,得到压缩资源文件,并采用所述压缩资源文件替换所述第二文件,得到更新后的输入文件夹;
对包含所述更新后的输入文件夹的安装包文件进行压缩打包,得到压缩后的安卓安装包文件。
2.如权利要求1所述的安卓安装包压缩方法,其特征在于,采用项目自动化构建工具gradle对所述安卓安装包进行监听。
3.如权利要求2所述的安卓安装包压缩方法,其特征在于,所述获取所述目标任务对应的资源文件,作为第一文件包括:
在构建的执行阶段,通过添加doFirst方法增加资源文件读取任务;
在资源文件读取任务被执行后,生成包含资源文件名称的调试日志;
从所述调试日志中获取资源文件名称,并从所有所述输入文件中,读取所述资源文件名称对应的文件,作为第一文件。
4.如权利要求1所述的安卓安装包压缩方法,其特征在于,所述采用所述压缩资源文件替换所述第二文件,得到更新后的输入文件夹包括:
将所述压缩资源文件写入到与所述第二文件同路径的临时文件夹中;
删除所述第二文件,并将所述压缩资源文件的文件名更新为所述第二文件的文件名,得到更新后的输入文件夹。
5.如权利要求1至4任一项所述的安卓安装包压缩方法,其特征在于,所述基于预设的文件与二进制抽取文件对应的命名方式,对执行所述目标任务的输入文件夹中的文件名称进行遍历,得到名称与所述第一文件对应的二进制抽取文件,作为第二文件包括:
获取预设的文件与二进制抽取文件对应的命名方式;
读取执行所述目标任务的第一个输入文件;
判断读取到的输入文件是否为二进制抽取文件;若所述读取到的输入文件为二进制抽取文件,则基于所述命名方式,确定所述读取到的输入文件对应的原始文件的文件名,作为原始文件名称;
将所述原始文件名称与所述第一文件的文件名称进行对比,得到比较结果;
若比较结果为名称不同,则读取下一个输入文件,并返回所述判断读取到的输入文件是否为二进制抽取文件的步骤继续执行;
若比较结果为名称相同,则将所述读取到的输入文件作为所述第一文件对应的二进制抽取文件。
6.如权利要求1至4任一项所述的安卓安装包压缩方法,其特征在于,所述将原始文件名称与第一文件的文件名称进行对比,得到比较结果,包括:
读取所述原始文件名称的字符长度,作为第一长度,读取所述第一文件的文件名称,作为第二长度;
若所述第一长度与第二长度不同,则确定所述比较结果为名称不同;
若所述第一长度与第二长度相同,则按从前往后的顺序,对每个位置的字符进行比较;
若存在任一位置的字符不同,则终止比较,并确定所述比较结果为名称不同,若每个位置的字符均相同,则确认所述比较结果为名称相同。
7.如权利要求1至4任一项所述的安卓安装包压缩方法,其特征在于,在所述对包含所有所述输入文件的文件夹进行压缩打包,得到压缩后的安卓安装包文件之前,所述安卓安装包压缩方法还包括:
在构建过程中,对res文件夹和drawable文件夹中未引用资源文件进行清理,并对res文件夹和drawable文件夹中的图片资源进行无损压缩,得到更新后的res文件夹和更新后的drawable文件夹。
8.一种安卓安装包压缩装置,其特征在于,包括:
任务节点监听模块,用于监听安卓安装包打包流程的每个任务节点,得到每个任务节点对应的任务类型,并将得到的任务类型与指定类型进行匹配检测,得到检测结果;
第一文件获取模块,用于若所述检测结果为检测到指定类型的任务,则将所述指定类型的任务作为目标任务,并获取所述目标任务对应的资源文件,作为第一文件;
第二文件获取模块,用于基于预设的文件与二进制抽取文件对应的命名方式,对执行所述目标任务的输入文件夹中的每个文件名称进行遍历匹配,得到名称与所述第一文件对应的二进制抽取文件,作为第二文件,其中,所述输入文件夹为安装包文件中的文件夹;
第二文件更新模块,用于对所述第二文件进行二次压缩,得到压缩资源文件,并采用所述压缩资源文件替换所述第二文件,得到更新后的输入文件夹;
安装包生成模块,用于对包含所述更新后的输入文件夹的安装包文件进行压缩打包,得到压缩后的安卓安装包文件。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的安卓安装包压缩方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的安卓安装包压缩方法。
CN202110975917.3A 2021-08-24 2021-08-24 安卓安装包压缩方法、装置、计算机设备及存储介质 Active CN113656044B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110975917.3A CN113656044B (zh) 2021-08-24 2021-08-24 安卓安装包压缩方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110975917.3A CN113656044B (zh) 2021-08-24 2021-08-24 安卓安装包压缩方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN113656044A true CN113656044A (zh) 2021-11-16
CN113656044B CN113656044B (zh) 2023-09-19

Family

ID=78481834

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110975917.3A Active CN113656044B (zh) 2021-08-24 2021-08-24 安卓安装包压缩方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN113656044B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115361369A (zh) * 2022-08-12 2022-11-18 中国联合网络通信集团有限公司 数据处理方法、装置、电子设备及计算机可读存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6886161B1 (en) * 2001-05-24 2005-04-26 Nortel Networks Limited Method and data structure for compressing file-reference information
US20050102253A1 (en) * 2003-10-23 2005-05-12 Microsoft Corporation Resource compaction
US20120159470A1 (en) * 2010-01-27 2012-06-21 Zte Corporation Method and device for generating software installation packet
US20140013006A1 (en) * 2012-07-05 2014-01-09 Nokia Corporation Method and apparatus for modifying compressed files
US20160253170A1 (en) * 2015-02-27 2016-09-01 Lenovo (Singapore) Pte, Ltd. Efficient deployment of thin client applications to end user
CN112363987A (zh) * 2020-11-13 2021-02-12 北京沃东天骏信息技术有限公司 文件压缩方法及装置、文件加载方法及装置和电子设备
CN112765112A (zh) * 2021-01-22 2021-05-07 苏州浪潮智能科技有限公司 一种安装包打包和解包方法
CN113282300A (zh) * 2021-06-28 2021-08-20 中国平安人寿保险股份有限公司 应用安装包的体积优化方法、装置、设备及存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6886161B1 (en) * 2001-05-24 2005-04-26 Nortel Networks Limited Method and data structure for compressing file-reference information
US20050102253A1 (en) * 2003-10-23 2005-05-12 Microsoft Corporation Resource compaction
US20120159470A1 (en) * 2010-01-27 2012-06-21 Zte Corporation Method and device for generating software installation packet
US20140013006A1 (en) * 2012-07-05 2014-01-09 Nokia Corporation Method and apparatus for modifying compressed files
US20160253170A1 (en) * 2015-02-27 2016-09-01 Lenovo (Singapore) Pte, Ltd. Efficient deployment of thin client applications to end user
CN112363987A (zh) * 2020-11-13 2021-02-12 北京沃东天骏信息技术有限公司 文件压缩方法及装置、文件加载方法及装置和电子设备
CN112765112A (zh) * 2021-01-22 2021-05-07 苏州浪潮智能科技有限公司 一种安装包打包和解包方法
CN113282300A (zh) * 2021-06-28 2021-08-20 中国平安人寿保险股份有限公司 应用安装包的体积优化方法、装置、设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王平, 朱雪梅: "计算机互联网络中的数据压缩技术应用", 计算机工程, no. 12, pages 158 - 159 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115361369A (zh) * 2022-08-12 2022-11-18 中国联合网络通信集团有限公司 数据处理方法、装置、电子设备及计算机可读存储介质
CN115361369B (zh) * 2022-08-12 2024-05-31 中国联合网络通信集团有限公司 数据处理方法、装置、电子设备及计算机可读存储介质

Also Published As

Publication number Publication date
CN113656044B (zh) 2023-09-19

Similar Documents

Publication Publication Date Title
CN109976761B (zh) 软件开发工具包的生成方法、装置及终端设备
CN110489345B (zh) 一种崩溃聚合方法、装置、介质和设备
CN111639287A (zh) 一种页面处理方法、装置、终端设备及可读存储介质
CN112491602A (zh) 行为数据的监控方法、装置、计算机设备及介质
CN112394908A (zh) 埋点页面自动生成的方法、装置、计算机设备及存储介质
CN112416458A (zh) 基于ReactNative的预加载方法、装置、计算机设备及存储介质
CN113268245A (zh) 代码分析方法、装置及存储介质
CN115982491A (zh) 页面更新方法及装置、电子设备和计算机可读存储介质
CN113869789A (zh) 一种风险监控的方法、装置、计算机设备及存储介质
CN113656044B (zh) 安卓安装包压缩方法、装置、计算机设备及存储介质
CN112527386A (zh) 应用程序发布方法及装置
CN114297700A (zh) 动静态结合的移动应用隐私协议提取方法及相关设备
CN114416481A (zh) 日志分析方法、装置、设备及存储介质
CN112363814A (zh) 任务调度方法、装置、计算机设备及存储介质
CN111273980A (zh) 界面线程可视化方法、装置、计算机设备及存储介质
CN115080114B (zh) 应用程序的移植处理方法、装置和介质
CN114625372A (zh) 组件自动编译方法、装置、计算机设备及存储介质
CN114637672A (zh) 自动化数据测试方法、装置、计算机设备及存储介质
CN114461833A (zh) 图片取证方法、装置、计算机设备及存储介质
CN113687880A (zh) 一种调用组件的方法、装置、设备和介质
CN116302847B (zh) 异常信息的动态采集方法、装置、计算机设备及介质
CN112965721B (zh) 基于Android的项目编译方法、装置、计算机设备及存储介质
CN117033249B (zh) 一种测试用例生成方法、装置、计算机设备及存储介质
CN116028108B (zh) 一种依赖包安装用时分析方法、装置、设备及存储介质
CN114385499A (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