1.一种清除APK中无用图片资源的方法,其特征在于,该方法包括以下步骤:
步骤S1:查找所有的Java文件,找出Java文件中所有使用到的图片资源,并将其保存到创建的使用图片资源列表中,所述使用图片资源列表用于存储Java文件中和资源文件中引用的图片资源;
步骤S2:查找所有的资源文件,找出资源文件中所有使用到的图片资源,并将其保存到所述使用图片资源列表中;
步骤S3:在APK文件中找出所有图片资源文件目录,将图片资源文件目录下所有图片资源保存到创建的本地图片资源列表中,所述本地图片资源列表用于存储本地APK文件中已有的所有图片资源;
步骤S4:将当前的本地图片资源列表与所述使用图片资源列表进行比对分析,找出APK文件中无用的图片资源并删除,结束。
2.如权利要求1所述的清除APK中无用图片资源的方法,其特征在于,步骤S1具体包括以下流程:
步骤S101:通过外部传入Java文件的目录,利用python的目录获取函数os.listdir找出其下所有的文件或者目录;当找到目录时,采用递归查询,找到该目录下所有子目录下的文件;当找到文件时,则判断该文件是否以.java文件为后缀,若是,则确定该文件为Java文件;将找到的所有Java文件的路径保存到一个Java文件列表中;
步骤S102:依次遍历Java文件列表中的每个Java文件路径信息,根据每个Java文件路径信息利用open函数打开对应的Java文件,然后调用read函数将该Java文件的内容读取到字符串中,再通过正则表达式“R.drawable.[a-zA-Z0-9_]*”找到该Java文件中所有使用的图片资源的字符串,批量去除字符串中的“R.drawable”前缀,得到图片资源的文件名;将遍历得到的Java文件中所有使用到的图片资源的文件名保存到创建的使用图片资源列表中。
3.如权利要求1所述的清除APK中无用图片资源的方法,其特征在于,步骤S2具体包括以下流程:
步骤S201:通过读取所有的XML文件,找出所有的资源文件;
步骤S202:根据每个资源文件的路径信息,利用open函数打开对应的资源文件,然后调用read函数将该资源文件的内容读取到字符串中,再通过正则表达式“@drawable/[a-zA-Z0-9_]*”找到该资源文件中所有使用到的图片资源的字符串;批量去除字符串中的“@drawable”前缀,得到图片资源的文件名;将所有资源文件中使用到的所有图片资源的文件名保存到所述使用图片资源列表中。
4.如权利要求1所述的清除APK中无用图片资源的方法,其特征在于,步骤S3具体包括以下流程:
步骤S301:通过python的目录获取函数os.listdir获取res的子目录列表;
步骤S302:调用字符的find函数,找到以drawable名开头的文件目录;
步骤S303:再次通过os.listdir函数获取drawable文件目录下的子文件列表;
步骤S304:通过python的os.path.splitext函数依次读取到子文件列表中各文件对应的后缀,并找出后缀是以.png和.jpg为结尾的所有文件;
步骤S305:依次将查找到的所有文件对应的绝对路径保存到创建的本地图片资源列表中。
5.如权利要求1所述的清除APK中无用图片资源的方法,其特征在于,步骤S4具体包括以下流程:以本地图片资源列表为标准,从中遍历每个图片资源;将遍历到的每个图片资源放到所述使用图片资源列表中进行对比查询,如果能查询到,表明该图片资源被使用,不进行删除;否则,表明该图片资源是无用的图片资源,则直接调用python的os.remove方法进行删除。
6.一种清除APK中无用图片资源的装置,其特征在于:包括Java使用图片查找单元、资源使用图片查找单元、本地图片资源查找单元以及无用图片资源删除单元;
所述Java使用图片查找单元用于:查找所有的Java文件,找出Java文件中所有使用到的图片资源,并将其保存到创建的使用图片资源列表中,所述使用图片资源列表用于存储Java文件中和资源文件中引用的图片资源;
所述资源使用图片查找单元用于:查找所有的资源文件,找出资源文件中所有使用到的图片资源,并将其保存到所述使用图片资源列表中;
所述本地图片资源查找单元用于:在APK文件中找出所有图片资源文件目录,将图片资源文件目录下所有图片资源保存到创建的本地图片资源列表中,所述本地图片资源列表用于存储本地APK文件中已有的所有图片资源;
所述无用图片资源删除单元用于:将当前的本地图片资源列表与所述使用图片资源列表进行比对分析,找出APK文件中无用的图片资源并删除。
7.如权利要求6所述的清除APK中无用图片资源的装置,其特征在于,所述Java使用图片查找单元查找Java文件使用的图片资源的具体流程为:通过外部传入Java文件的目录,利用python的目录获取函数os.listdir找出其下所有的文件或者目录;当找到目录时,采用递归查询,找到该目录下所有子目录下的文件;当找到文件时,则判断该文件是否以.java文件为后缀,若是,则确定该文件为Java文件;将找到的所有Java文件的路径保存到一个Java文件列表中;
依次遍历Java文件列表中的每个Java文件路径信息,根据每个Java文件路径信息利用open函数打开对应的Java文件,然后调用read函数将该Java文件的内容读取到字符串中,再通过正则表达式“R.drawable.[a-zA-Z0-9_]*”找到该Java文件中所有使用的图片资源的字符串,批量去除字符串中的“R.drawable”前缀,得到图片资源的文件名;将遍历得到的Java文件中所有使用到的图片资源的文件名保存到创建的使用图片资源列表中。
8.如权利要求6所述的清除APK中无用图片资源的装置,其特征在于,所述资源使用图片查找单元查找资源文件使用的图片资源的具体流程为:通过读取所有的XML文件,找出所有的资源文件;
根据每个资源文件的路径信息,利用open函数打开对应的资源文件,然后调用read函数将该资源文件的内容读取到字符串中,再通过正则表达式“@drawable/[a-zA-Z0-9_]*”找到该资源文件中所有使用到的图片资源的字符串;批量去除字符串中的“@drawable”前缀,得到图片资源的文件名;将所有资源文件中使用到的所有图片资源的文件名保存到所述使用图片资源列表中。
9.如权利要求6所述的清除APK中无用图片资源的装置,其特征在于,所述本地图片资源查找单元查找本地的图片资源的具体流程为:通过python的目录获取函数os.listdir获取res的子目录列表;调用字符的find函数,找到以drawable名开头的文件目录;再次通过os.listdir函数获取drawable文件目录下的子文件列表;通过python的os.path.splitext函数依次读取到子文件列表中各文件对应的后缀,并找出后缀是以.png和.jpg为结尾的所有文件;依次将查找到的所有文件对应的绝对路径保存到创建的本地图片资源列表中。
10.如权利要求6所述的清除APK中无用图片资源的装置,其特征在于,所述无用图片资源删除单元进行比对分析并删除无用图片资源的具体流程为:以本地图片资源列表为标准,从中遍历每个图片资源;将遍历到的每个图片资源放到所述使用图片资源列表中进行对比查询,如果能查询到,表明该图片资源被使用,不进行删除;否则,表明该图片资源是无用的图片资源,则直接调用python的os.remove方法进行删除。