一种用于安卓平台重复文件检索的方法、装置及设备
文献发布时间:2023-06-19 12:22:51
技术领域
本申请涉及安卓平台技术领域,尤其涉及一种用于安卓平台重复文件检索的技术。
背景技术
在基于安卓平台开发各类应用项目时,通常随着应用项目的开发迭代,应用项目中涉及的各类文件会越来越多,特别是其中存在大量重复的图片等类型文件,导致生成的应用程序安装后占用设备的存储空间越来越大。如何高效地检索出其中重复的文件进而对重复文件进行处理是一个现存的技术问题。
发明内容
本申请的目的是提供一种用于安卓平台重复文件检索的方法及设备,用以解决如何高效检索基于安卓平台的应用程序中重复文件的技术问题。
根据本申请的一个方面,提供了一种用于安卓平台重复文件检索的方法,其中,所述方法包括:
计算目标文件目录下的每个文件的散列值;
两两比较文件的散列值,若两个文件的散列值相同,则确定所述两个文件为重复文件;
遍历所述目标文件目录下的每个文件,以完成所述目标文件目录下重复文件的检索。
可选地,其中,所述计算目标文件目录下的每个文件的散列值包括:
在预定义的构建工具插件中,配置目标文件目录;
采用预设算法计算所述目标文件目录下的每个文件的散列值。
可选地,其中,所述预设算法为SHA1算法。
可选地,所述一种用于安卓平台重复文件检索的方法还包括:
将每个文件的散列值与其存储路径关联,并基于文件的散列值,将关联了存储路径的每个文件进行分组;
输出存在重复文件的分组。
可选地,所述方法还包括:
根据输出的存在重复文件的分组,删除冗余文件。
根据本申请的另一方面,还提供了一种用于安卓平台重复文件检索的装置,其中,所述装置包括:
第一模块,用于计算目标文件目录下的每个文件的散列值;
第二模块,用于两两比较文件的散列值,若两个文件的散列值相同,则确定所述两个文件为重复文件;
第三模块,用于遍历所述目标文件目录下的每个文件,以完成所述目标文件目录下重复文件的检索。
可选地,所述一种用于安卓平台重复文件检索的装置还包括:
第四模块,用于将每个文件的散列值与其存储路径关联,并基于文件的散列值,将关联了存储路径的每个文件进行分组;
第五模块,用于输出存在重复文件的分组。
可选地,所述装置还包括:
第六模块,用于根据输出的存在重复文件的分组,删除冗余文件。
与现有技术相比,本申请提供一种用于安卓平台重复文件检索的技术方案,首先计算该安卓平台的目标文件目录下的每个文件的散列值;然后两两比较文件的散列值,若两个文件的散列值相同,则确定所述两个文件为重复文件;遍历所述目标文件目录下的每个文件,以完成所述目标文件目录下重复文件的检索。通过该技术方案,可以在基于安卓平台的应用程序项目每个版本开发完成后,在输出安装包前检索该应用程序项目对应的目标文件目录,检索出重复资源,并可进一步地,对重复资源做进一步分析后删除冗余资源,输出无冗余资源的安装包。减小了安装包的大小,便于传送,也减小了应用程序安装后的占用空间,有利于给用户带来更好的体验。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种用于安卓平台重复文件检索的方法流程图;
图2示出根据本申请另一个方面的一种用于安卓平台重复文件检索的装置示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
在本申请一个典型的配置中,所述设备、装置或模块均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
为更进一步阐述本申请所采取的技术手段及取得的效果,下面结合附图及优选实施例,对本申请的技术方案,进行清楚和完整的描述。
图1示出本申请一个方面的一种用于安卓平台重复文件检索的方法流程图,其中,一个实施例的方法包括:
S11计算目标文件目录下的每个文件的散列值;
S12两两比较文件的散列值,若两个文件的散列值相同,则确定所述两个文件为重复文件;
S13遍历所述目标文件目录下的每个文件,以完成所述目标文件目录下重复文件的检索。
在本申请中,所述方法通过设备1执行,所述设备1为用于安卓平台的应用项目开发的计算机设备和/或云。其中,所述计算机设备包括但不限于个人计算机、笔记本电脑、工业计算机、网络主机、单个网络服务器、多个网络服务器集;所述云由基于云计算(CloudComputing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。
在此,所述计算机设备和/或云仅为举例,其他现有的或者今后可能出现的设备和/或资源共享平台如适用于本申请也应包含在本申请的保护范围内,在此,以引用的方式包含于此。
在设备1上开发的用于安卓平台的同一个应用项目的所有资源通常都会存放在同一文件目录下。
在该实施例中,在所述步骤S11中,设备1遍历目标文件目录下的每个文件,包括该目标文件目录下的各级子目录(如有的话)下的每个文件,计算每个文件的散列值。
可选地,其中,所述步骤S11包括:
在预定义的构建工具插件中,配置目标文件目录;
采用预设算法计算所述目标文件目录下的每个文件的散列值。
一个可选实施例中,设备1采用预定义的构建工具插件是谷歌(Google)提供的针对安卓平台构建应用项目的开源工具Gradle。设备1通过Gradle构建新开发的应用项目,配置文件目录,存放应用项目构建时需要的文件和开发过程中生产的文件。设备1还配置目标文件目录,其中,将需要检索可能存在重复文件的文件目录配置为目标文件目录下,比如,将存放应用项目构建时需要的文件和开发过程中生产的文件所在的文件目录配置为目标文件目录。该目标文件目录下可以包含子文件目录。
在应用项目完成开发,输出应用程序安装包前,可采用预设算法来计算该目标文件目录下的每个文件的散列值。
基于安卓平台的应用项目构建及开发过程中,图片类文件(比如png格式的图片文件)较多,经常被用于背景等用途,筛选出重复的图片类文件对减小应用程序的占用空间效果更明显。因此,还可针对指定类型的文件,比如png类型的文件,计算目标文件目录下的每个png文件的散列值。
可选地,其中,所述预设算法为SHA1算法。
其中,可采用SHA1(Secure Hash Algorithm1,安全哈希算法第1版)算法来计算该目标文件目录下的每个文件的散列值,其中,每个文件的SHA1散列值为20个字节(160位)。
还可以采用SHA256、MD5(Message-Digest Algorithm5,消息摘要算法第5版)等算法来计算该目标文件目录下的每个文件的散列值。
继续在所述实施例中,设备1在分别采用预设算法计算得到目标文件目录下每个文件的散列值后,在所述步骤S12中,设备1两两比较文件的散列值,若两个文件的散列值相同,则确定这两个文件为重复文件,即两个文件完全相同。比如,若目标文件目录下文件A的SHA1值与目标文件目录的子目录下文件B的SHA1值相同,则确定文件A和文件B为重复文件。
继续在所述实施例中,在所述步骤S13中,设备1遍历目标文件目录下的每个文件,完成全部文件间的两两比较文件的散列值,完成该目标文件目录下重复文件的检索。
可选地,所述一种用于安卓平台重复文件检索的方法还包括:
S14(未示出)将每个文件的散列值与其存储路径关联,并基于文件的散列值,将关联了存储路径的每个文件进行分组;
S15(未示出)输出存在重复文件的分组。
一个可选实施例中,在计算目标文件目录下每个文件的散列值后,还可以将得到的文件的散列值与文件的存储路径关联,并基于文件的散列值将关联了存储路径的每个文件进行分组,比如,以文件的散列值或与散列值唯一对应的分组编码,将包含了存储路径的文件名(或者是该文件的全存储路径信息)存放在该分组内。在遍历目标文件目录下的每个文件,两两比较文件的散列值,检索出目标文件目录下的所有重复文件后,输出存在重复文件的分组,比如,输出存在重复文件的散列值或与散列值对应的分组编号。
可选地,该方法还包括:
S16(未示出)根据输出的存在重复文件的分组,删除冗余文件。
可根据输出的存在重复文件的散列值或与散列值对应的分组编号,可确定与该散列值对应的各重复文件的全存储路径信息,进而可以对重复资源做进一步分析后删除冗余文件,以达到减小应用程序占用存储空间的大小。比如,若输出SHA1值对应的分组中包含重复文件A和文件B的全存储路径信息,则可以根据应用程序的实际情况删除重复文件A(或者文件B),只保留文件B(或者文件A),达到了减小应用程序占用存储空间的目的。
需要说明的是,Gradle支持Java、Groovy及Scala等语言。如下是一个应用实例的基于Java语言编写的计算SHA1值及基于SHA1值对关联了存储路径的文件进行分组的部分基本逻辑代码。基于本申请的方法也可采用Groovy或Scala等语言实现。
图2示出根据本申请另一个方面的一种用于安卓平台重复文件检索的装置示意图,其中,一个实施例的所述装置包括:
第一模块21,用于计算目标文件目录下的每个文件的散列值;
第二模块22,用于两两比较文件的散列值,若两个文件的散列值相同,则确定所述两个文件为重复文件;
第三模块23,用于遍历所述目标文件目录下的每个文件,以完成所述目标文件目录下重复文件的检索。
其中,所述装置集成在与上述设备1相同的设备中。
在该实施例中,所述装置采用上述方法,该装置的第一模块21遍历目标文件目录下的每个文件,包括该目标文件目录下的各级子目录(如有的话)下的每个文件,计算每个文件的散列值;第二模块22两两比较文件的散列值,若两个文件的散列值相同,则确定这两个文件为重复文件,即两个文件完全相同;第三模块23遍历目标文件目录下的每个文件,完成全部文件间的两两比较文件的散列值,完成该目标文件目录下重复文件的检索。
可选地,所述一种用于安卓平台重复文件检索的装置还包括:
第四模块24(未示出),用于将每个文件的散列值与其存储路径关联,并基于文件的散列值,将关联了存储路径的每个文件进行分组;
第五模块25(未示出),用于输出存在重复文件的分组。
一个可选实施例中,在该装置的第一模块21计算目标文件目录下每个文件的散列值后,第四模块24将得到的文件的散列值与文件的存储路径关联,并基于文件的散列值将关联了存储路径的每个文件进行分组;然后第五模块25输出存在重复文件的分组。
可选地,所述装置还包括:
第六模块26(未示出),用于根据输出的存在重复文件的分组,删除冗余文件。
一个可选实施例中,该装置的第六模块26可根据输出的存在重复文件的散列值或与散列值对应的分组编号,可确定与该散列值对应的各重复文件的全存储路径信息,进而可以对重复资源做进一步分析后删除冗余文件,以达到减小应用程序占用存储空间的大小。
根据本申请的还一方面,还提供了一种计算机可读介质,所述计算机可读介质存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现前述方法。
根据本申请的再一方面,还提供了一种用于安卓平台重复文件检索的设备,其中,该设备包括:
一个或多个处理器;以及
存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行如前述方法的操作。
例如,计算机可读指令在被执行时使所述一个或多个处理器:计算目标文件目录下的每个文件的散列值;两两比较文件的散列值,若两个文件的散列值相同,则确定所述两个文件为重复文件;遍历所述目标文件目录下的每个文件,以完成所述目标文件目录下重复文件的检索。进一步地,还可以将每个文件的散列值与其存储路径关联,并基于文件的散列值,将关联了存储路径的每个文件进行分组;输出存在重复文件的分组。以及还可以根据输出的存在重复文件的分组,删除冗余文件。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可在集成了软件的专用集成电路(ASIC)、通用目的计算机或任何其它类似硬件设备来实现。
另外,本申请的一部分或者全部可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或者提供根据本申请的技术方案。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
- 一种用于安卓平台重复文件检索的方法、装置及设备
- 文件检索装置、文件检索系统、文件检索程序和文件检索方法