CN109918076A - 代码文件处理方法、系统、计算机设备及可读存储介质 - Google Patents

代码文件处理方法、系统、计算机设备及可读存储介质 Download PDF

Info

Publication number
CN109918076A
CN109918076A CN201711332422.9A CN201711332422A CN109918076A CN 109918076 A CN109918076 A CN 109918076A CN 201711332422 A CN201711332422 A CN 201711332422A CN 109918076 A CN109918076 A CN 109918076A
Authority
CN
China
Prior art keywords
code file
file
code
class
compiling
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
CN201711332422.9A
Other languages
English (en)
Other versions
CN109918076B (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 Didi Infinity Technology and Development Co Ltd
Original Assignee
Beijing Didi Infinity Technology and Development 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 Didi Infinity Technology and Development Co Ltd filed Critical Beijing Didi Infinity Technology and Development Co Ltd
Priority to CN201711332422.9A priority Critical patent/CN109918076B/zh
Publication of CN109918076A publication Critical patent/CN109918076A/zh
Application granted granted Critical
Publication of CN109918076B publication Critical patent/CN109918076B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提出了一种代码文件处理方法、处理系统、计算机设备及计算机可读存储介质,其中代码文件处理方法包括:编译每行代码文件引用,获取无效的代码文件引用和有效的代码文件引用;删除无效的代码文件引用;根据有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件;删除第一类代码文件。能够快速且准确检查出工程项目中已经无用的代码文件,并自动删除,完成移动应用的瘦身。

Description

代码文件处理方法、系统、计算机设备及可读存储介质
技术领域
本发明涉及文件处理技术领域,具体而言,涉及一种代码文件处理方法、处理系统、计算机设备及计算机可读存储介质。
背景技术
相关技术中的移动客户端应用,由于屏幕分辨率越来越高、资源文件越来越大,加上不断的产品迭代,工程项目中遗留有大量无用资源文件和无用代码文件,导致移动应用的安装包越来越大,有的甚至超过200MB。一方面在用户下载时消耗用户大量流量,另一方面是在用户终端上长期占用大量存储空间。现有的移动应用瘦身方案主要基于人工检查,人工检查准确率较高但是费时费力。
发明内容
本发明旨在至少解决现有技术或相关技术中存在的技术问题之一。
为此,本发明的一个方面在于提出了一种代码文件处理方法。
本发明的另一个方面在于提出了一种代码文件处理系统。
本发明的再一个方面在于提出了一种计算机设备。
本发明的又一个方面在于提出了一种计算机可读存储介质。
有鉴于此,根据本发明的一个方面,提出了一种代码文件处理方法,包括:编译每行代码文件引用,以确定无效的代码文件引用和有效的代码文件引用;删除无效的代码文件引用;根据有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件;删除第一类代码文件。
本发明提供的代码文件处理方法,首先获取无效的代码文件引用,并进行清理,留下有效的代码文件引用。进一步地,根据有效的代码文件引用查找出没有被其他代码文件引用的代码文件,即无引用的代码文件,将这类代码文件进行清除,快速且准确检查出工程项目中已经无用的代码文件,并自动删除,完成移动应用的瘦身。
根据本发明的上述代码文件处理方法,还可以具有以下技术特征:
在上述技术方案中,优选地,编译每行代码文件引用,以确定无效的代码文件引用和有效的代码文件引用的步骤,具体包括:通过xcodebuild命令行工具增量编译每行代码文件引用;判断在通过xcodebuild命令行工具编译代码文件引用时是否能够输出编译结果;若在通过xcodebuild命令行工具编译代码文件引用时能够输出编译结果,则确定代码文件引用无效;若在通过xcodebuild命令行工具编译代码文件引用时不能够输出编译结果,则确定代码文件引用有效。
在该技术方案中,借助NSTask和NSPipe使用xcodebuild工具编译代码文件引用,其中NSTask是用来执行系统命令的一个类库,NSPipe表示一个可以单向通信的对象,xcodebuild为集成开发环境xcode中自带的命令行工具。具体为每次注释掉一行代码文件引用,看该行代码文件引用能否编译通过,若能则可以删除,否则解开注释。其中,在xcodebuild输出中如果编译成功会提示BUILD SUCCEEDED(编译通过),所以可以在输出中匹配BUILD SUCCEEDED文本,如果匹配到则表明编译成功,否则编译失败。能够准确并完整的找到工程中无用的代码文件引用。
需要说明的是,编译方式选择增量编译,即在源程序已经完成前一次编译的基础上再次编译。
在上述任一技术方案中,优选地,还包括:使用二进制方式集成代码文件引用所在文件模块外的其他文件模块;通过xcodebuild命令行工具增量编译每行代码文件引用时,关闭编译优化,以及不输出dsym文件。
在该技术方案中,对于较大的工程项目,为了在自定义类较多时避免查找无效的代码文件引用耗时较长,提出了提高编译速度的优化方案,包括除要检查的模块外其他模块全部使用二进制集成;通过xcodebuild命令行工具增量编译每行代码文件引用时不输出dsym文件;使用性能更强大的机器进行编译;使用Clang模块编译器,Clang为编程语言的轻量级编译器;关闭一切可能的优化(仅支持armv7,关闭编译优化即优化水平改为00,使用虚拟内存)。其中dsym文件是保存16进制函数地址映射信息的中转文件。
在上述任一技术方案中,优选地,根据有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件的步骤,具体包括:通过预设命令查找工程目录下存在的预设后缀文件,并将预设后缀文件存储至本地类文件集合;读取工程目录下的所有代码文件,根据有效的代码文件引用获取所有代码文件中当前项目中正在使用的代码文件,并将正在使用的代码文件存储至使用类文件集合;解析预设类文件得到解析后代码文件,并将解析后代码文件存储至使用类文件集合;获取本地类文件集合中与使用类文件集合中的代码文件不重复的代码文件作为第一类代码文件。
优选地,预设命令包括为/usr/bin/find命令;预设后缀文件包括以下至少一种或其组合:.h文件、.m文件、.mm文件;预设类文件包括以下至少一种或其组合:使用+(void)load{}方式进行URL(统一资源定位符)跳转的类文件、通过字符串名称初始化的类文件、通过json(javascript object notation,js对象标记)配置文件初始化的类文件。
在该技术方案中,第一步通过/usr/bin/find命令找到工程目录下存在的.h、.m、.mm文件并将它们放在一个集合中,称为本地类文件集合;第二步递归读取工程目录下的代码文件,通过正则匹配出目前项目中正在使用的代码文件并放在一个集合中,称为使用类文件集合;第三步解析UIViewController(用户界面视图控制器)使用+(void)load{}方式进行URL跳转的类文件、自定义UITableViewCell(表视图单元格)通过字符串名称初始化的类文件以及iOS(移动操作系统)组件化工程中通过json配置文件初始化的类文件,并将解析结果放至在使用类文件集合中;最后将两个集合做交集得到交集元素,然后用本地类文件集合减去交集元素就是无用的代码文件。删除无用代码文件,重新打包工程即可达到工程瘦身的目的。
在上述任一技术方案中,优选地,还包括:若由于编译类被注释使通过xcodebuild命令行工具增量编译每行代码文件引用失败,则将编译类记录至白名单,以及在再一次通过xcodebuild命令行工具增量编译每行代码文件引用时跳过编译类。
在该技术方案中,对于较大的工程项目,为了在自定义类较多时避免查找无效的代码文件引用耗时较长,提出了另一种优化方案,即减少需要判断的文件数的方案是,具体为只检查自定义类并且在遍历的过程中建立白名单如果一个类被注释导致了编译失败下次遇到就可以直接跳过。
根据本发明的另一个方面,提出了一种代码文件处理系统,包括:编译单元,用于编译每行代码文件引用,以确定无效的代码文件引用和有效的代码文件引用;引用删除单元,用于删除无效的代码文件引用;获取单元,用于根据有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件;文件删除单元,用于删除第一类代码文件。
本发明提供的代码文件处理系统,首先获取无效的代码文件引用,并进行清理,留下有效的代码文件引用。进一步地,根据有效的代码文件引用查找出没有被其他代码文件引用的代码文件,即无引用的代码文件,将这类代码文件进行清除,快速且准确检查出工程项目中已经无用的代码文件,并自动删除,完成移动应用的瘦身。
根据本发明的上述代码文件处理系统,还可以具有以下技术特征:
在上述技术方案中,优选地,编译单元,具体用于通过xcodebuild命令行工具增量编译每行所述代码文件引用;编译单元包括:判断单元,用于判断在通过xcodebuild命令行工具编译代码文件引用时是否能够输出编译结果;确定单元,用于若在通过xcodebuild命令行工具编译代码文件引用时能够输出编译结果,则确定代码文件引用无效;以及若在通过xcodebuild命令行工具编译代码文件引用时不能够输出所述编译结果,则确定代码文件引用有效。
在该技术方案中,借助NSTask和NSPipe使用xcodebuild工具编译代码文件引用,其中NSTask是用来执行系统命令的一个类库,NSPipe表示一个可以单向通信的对象,xcodebuild工具是一个自动构建的工具。具体为每次注释掉一行代码文件引用,看该行代码文件引用能否编译通过,若能则可以删除,否则解开注释。其中,在xcodebuild输出中如果编译成功会提示BUILD SUCCEEDED,所以可以在输出中匹配BUILD SUCCEEDED文本,如果匹配到则表明编译成功,否则编译失败。能够准确并完整的找到工程中无用的代码文件引用。
需要说明的是,编译方式选择增量编译,即在源程序已经完成前一次编译的基础上再次编译。
在上述任一技术方案中,优选地,还包括:集成单元,用于使用二进制方式集成代码文件引用所在文件模块外的其他文件模块;处理单元,用于通过xcodebuild命令行工具增量编译每行代码文件引用时,关闭编译优化,以及不输出dsym文件。
在该技术方案中,对于较大的工程项目,为了在自定义类较多时避免查找无效的代码文件引用耗时较长,提出了提高编译速度的优化方案,包括除要检查的模块外其他模块全部使用二进制集成;通过xcodebuild命令行工具增量编译每行代码文件引用时不输出dsym文件;使用性能更强大的机器进行编译;使用Clang模块编译器;关闭一切可能的优化(仅支持armv7,关闭编译优化即Optimize level改为00,使用虚拟内存)。
在上述任一技术方案中,优选地,获取单元,包括:查找单元,用于通过预设命令查找工程目录下存在的预设后缀文件,并将预设后缀文件存储至本地类文件集合;读取单元,用于读取工程目录下的所有代码文件,根据有效的代码文件引用获取所有代码文件中当前项目中正在使用的代码文件,并将正在使用的代码文件存储至使用类文件集合;解析单元,用于解析预设类文件得到解析后代码文件,并将解析后代码文件存储至使用类文件集合;获取单元,具体用于获取本地类文件集合中与使用类文件集合中的代码文件不重复的代码文件作为第一类代码文件。
优选地,预设命令为/usr/bin/find命令;预设后缀文件包括以下至少一种或其组合:.h文件、.m文件、.mm文件;预设类文件包括以下至少一种或其组合:使用+(void)load{}方式进行URL跳转的类文件、通过字符串名称初始化的类文件、通过json配置文件初始化的类文件。
在该技术方案中,第一步通过/usr/bin/find命令找到工程目录下存在的.h、.m、.mm文件并将它们放在一个集合中,称为本地类文件集合;第二步递归读取工程目录下的代码文件,通过正则匹配出目前项目中正在使用的代码文件并放在一个集合中,称为使用类文件集合;第三步解析UIViewController使用+(void)load{}方式进行URL跳转的类文件、自定义UITableViewCell通过字符串名称初始化的类文件以及iOS组件化工程中通过json配置文件初始化的类文件,并将解析结果放至在使用类文件集合中;最后将两个集合做交集得到交集元素,然后用本地类文件集合减去交集元素就是无用的代码文件。删除无用代码文件,重新打包工程即可达到工程瘦身的目的。
在上述任一技术方案中,优选地,还包括:记录单元,用于若由于编译类被注释使通过xcodebuild命令行工具增量编译每行代码文件引用失败,则将编译类记录至白名单,以及在再一次通过xcodebuild命令行工具增量编译每行代码文件引用时跳过编译类。
在该技术方案中,对于较大的工程项目,为了在自定义类较多时避免查找无效的代码文件引用耗时较长,提出了另一种优化方案,即减少需要判断的文件数的方案是,具体为只检查自定义类并且在遍历的过程中建立白名单如果一个类被注释导致了编译失败下次遇到就可以直接跳过。
根据本发明的再一个方面,提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述任一项的代码文件处理方法的步骤。
本发明提供的计算机设备,处理器执行计算机程序时实现上述任一项的代码文件处理方法的步骤,能够实现上述技术效果,不再赘述。
根据本发明的又一个方面,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一项的代码文件处理方法的步骤。
本发明提供的计算机可读存储介质,计算机程序被处理器执行时实现上述任一项的代码文件处理方法的步骤,能够实现上述技术效果,不再赘述。
本发明的附加方面和优点将在下面的描述部分中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1示出了本发明的一个实施例的代码文件处理方法的流程示意图;
图2示出了本发明的另一个实施例的代码文件处理方法的流程示意图;
图3示出了本发明的再一个实施例的代码文件处理方法的流程示意图;
图4示出了本发明的一个实施例的代码文件处理系统的示意框图;
图5示出了本发明的另一个实施例的代码文件处理系统的示意框图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不限于下面公开的具体实施例的限制。
本发明第一方面的实施例,提出一种代码文件处理方法,图1示出了本发明的一个实施例的代码文件处理方法的流程示意图。其中,该方法包括:
步骤102,编译每行代码文件引用,以确定无效的代码文件引用和有效的代码文件引用;
步骤104,删除无效的代码文件引用;
步骤106,根据有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件;
步骤108,删除第一类代码文件。
本发明提供的代码文件处理方法,首先获取无效的代码文件引用,并进行清理,留下有效的代码文件引用。进一步地,根据有效的代码文件引用查找出没有被其他代码文件引用的代码文件,即无引用的代码文件,将这类代码文件进行清除,快速且准确检查出工程项目中已经无用的代码文件,并自动删除,完成移动应用的瘦身。
图2示出了本发明的另一个实施例的代码文件处理方法的流程示意图。其中,该方法包括:
步骤202,通过xcodebuild命令行工具增量编译每行代码文件引用;
步骤204,判断在通过xcodebuild命令行工具编译代码文件引用时是否能够输出编译结果;
步骤206,若在通过xcodebuild命令行工具编译代码文件引用时能够输出编译结果,则确定代码文件引用无效;
步骤208,若在通过xcodebuild命令行工具编译代码文件引用时不能够输出编译结果,则确定代码文件引用有效;
步骤210,删除无效的代码文件引用;
步骤212,根据有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件;
步骤214,删除第一类代码文件。
在该实施例中,借助NSTask和NSPipe使用xcodebuild工具编译代码文件引用,其中NSTask是用来执行系统命令的一个类库,NSPipe表示一个可以单向通信的对象,xcodebuild工具是一个自动构建的工具。具体为每次注释掉一行代码文件引用,看该行代码文件引用能否编译通过,若能则可以删除,否则解开注释。其中,在xcodebuild输出中如果编译成功会提示BUILD SUCCEEDED,所以可以在输出中匹配BUILD SUCCEEDED文本,如果匹配到则表明编译成功,否则编译失败。能够准确并完整的找到工程中无用的代码文件引用。需要说明的是,编译方式选择增量编译,即在源程序已经完成前一次编译的基础上再次编译。
图3示出了本发明的再一个实施例的代码文件处理方法的流程示意图。其中,该方法包括:
步骤302,通过xcodebuild命令行工具增量编译每行代码文件引用;
步骤304,判断在通过xcodebuild命令行工具编译代码文件引用时是否能够输出编译结果;
步骤306,若在通过xcodebuild命令行工具编译代码文件引用时能够输出编译结果,则确定代码文件引用无效;
步骤308,若在通过xcodebuild命令行工具编译代码文件引用时不能够输出编译结果,则确定代码文件引用有效;
步骤310,删除无效的代码文件引用;
步骤312,通过预设命令查找工程目录下存在的预设后缀文件,并将预设后缀文件存储至本地类文件集合;
步骤314,读取工程目录下的所有代码文件,根据有效的代码文件引用获取所有代码文件中当前项目中正在使用的代码文件,并将正在使用的代码文件存储至使用类文件集合;解析预设类文件得到解析后代码文件,并将解析后代码文件存储至使用类文件集合;
步骤316,获取本地类文件集合中与使用类文件集合中的代码文件不重复的代码文件作为第一类代码文件;
步骤318,删除第一类代码文件。
优选地,预设命令为/usr/bin/find命令;预设后缀文件包括以下至少一种或其组合:.h文件、.m文件、.mm文件;预设类文件包括以下至少一种或其组合:使用+(void)load{}方式进行URL跳转的类文件、通过字符串名称初始化的类文件、通过json配置文件初始化的类文件。
在该实施例中,获取无效的代码文件引用,并进行清理,留下有效的代码文件引用。进一步地,根据有效的代码文件引用查找出没有被其他代码文件引用的代码文件,具体包括:第一步通过/usr/bin/find命令找到工程目录下存在的.h、.m、.mm文件并将它们放在一个集合中,称为本地类文件集合;第二步递归读取工程目录下的代码文件,通过正则匹配出目前项目中正在使用的代码文件并放在一个集合中,称为使用类文件集合;第三步解析UIViewController使用+(void)load{}方式进行URL跳转的类文件、自定义UITableViewCell通过字符串名称初始化的类文件以及iOS组件化工程中通过json配置文件初始化的类文件,并将解析结果放至在使用类文件集合中;最后将两个集合做交集得到交集元素,然后用本地类文件集合减去交集元素就是无用的代码文件。删除无用代码文件,重新打包工程即可达到工程瘦身的目的。
对于较大的工程项目,自定义类较多时可能耗时较长达数小时之久。针对这点提出了两种优化方案:一是提供编译速度,二是减少需要判断的文件个数。提供编译速度的方案有:除要检查的模块外其他模块全部使用二进制集成;通过xcodebuild命令行工具增量编译每行代码文件引用时不输出dsym文件;使用性能更强大的机器进行编译;使用Clang模块编译器;关闭一切可能的优化(仅支持armv7,关闭编译优化即Optimize level改为00,使用虚拟内存)。减少需要判断的文件数的方案是:为只检查自定义类并且在遍历的过程中建立白名单如果一个类被注释导致了编译失败下次遇到就可以直接跳过。
本发明第二方面的实施例,提出一种代码文件处理系统,图4示出了本发明的一个实施例的代码文件处理系统40的示意框图。其中,该系统40包括:
编译单元42,用于编译每行代码文件引用,以确定无效的代码文件引用和有效的代码文件引用;引用删除单元44,用于删除无效的代码文件引用;获取单元46,用于根据有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件;文件删除单元48,用于删除第一类代码文件。
本发明提供的代码文件处理系统40,首先获取无效的代码文件引用,并进行清理,留下有效的代码文件引用。进一步地,根据有效的代码文件引用查找出没有被其他代码文件引用的代码文件,即无引用的代码文件,将这类代码文件进行清除,快速且准确检查出工程项目中已经无用的代码文件,并自动删除,完成移动应用的瘦身。
图5示出了本发明的另一个实施例的代码文件处理系统50的示意框图。其中,该系统包括:
编译单元52,用于通过xcodebuild命令行工具增量编译每行所述代码文件引用;
编译单元52包括:
判断单元520,用于判断在通过xcodebuild命令行工具编译代码文件引用时是否能够输出编译结果;确定单元522,用于若在通过xcodebuild命令行工具编译代码文件引用时能够输出编译结果,则确定代码文件引用无效;以及若在通过xcodebuild命令行工具编译代码文件引用时不能够输出所述编译结果,则确定代码文件引用有效;
集成单元524,用于使用二进制方式集成代码文件引用所在文件模块外的其他文件模块;处理单元526,用于通过xcodebuild命令行工具增量编译每行代码文件引用时,关闭编译优化,以及不输出dsym文件;记录单元528,用于若由于编译类被注释使通过xcodebuild命令行工具增量编译每行代码文件引用失败,则将编译类记录至白名单,以及在再一次通过xcodebuild命令行工具增量编译每行代码文件引用时跳过编译类;
引用删除单元54,用于删除无效的代码文件引用;
获取单元56包括:
查找单元562,用于通过预设命令查找工程目录下存在的预设后缀文件,并将预设后缀文件存储至本地类文件集合;读取单元564,用于读取工程目录下的所有代码文件,根据有效的代码文件引用获取所有代码文件中当前项目中正在使用的代码文件,并将正在使用的代码文件存储至使用类文件集合;解析单元566,用于解析预设类文件得到解析后代码文件,并将解析后代码文件存储至使用类文件集合;获取单元56,具体用于获取本地类文件集合中与使用类文件集合中的代码文件不重复的代码文件作为第一类代码文件;
文件删除单元58,用于删除第一类代码文件。
在该实施例中,借助NSTask和NSPipe使用xcodebuild工具编译代码文件引用,其中NSTask是用来执行系统命令的一个类库,NSPipe表示一个可以单向通信的对象,xcodebuild工具是一个自动构建的工具。具体为每次注释掉一行代码文件引用,看该行代码文件引用能否编译通过,若能则可以删除,否则解开注释。其中,在xcodebuild输出中如果编译成功会提示BUILD SUCCEEDED,所以可以在输出中匹配BUILD SUCCEEDED文本,如果匹配到则表明编译成功,否则编译失败。能够准确并完整的找到工程中无用的代码文件引用。
需要说明的是,编译方式选择增量编译,即在源程序已经完成前一次编译的基础上再次编译。
在该实施例中,对于较大的工程项目,为了在自定义类较多时避免查找无效的代码文件引用耗时较长,提出了提高编译速度的优化方案,包括除要检查的模块外其他模块全部使用二进制集成;通过xcodebuild命令行工具增量编译每行代码文件引用时不输出dsym文件;使用性能更强大的机器进行编译;使用Clang模块编译器;关闭一切可能的优化(仅支持armv7,关闭编译优化即Optimize level改为00,使用虚拟内存)。提出了另一种优化方案,即减少需要判断的文件数的方案是,具体为只检查自定义类并且在遍历的过程中建立白名单如果一个类被注释导致了编译失败下次遇到就可以直接跳过。
优选地,预设命令为/usr/bin/find命令;预设后缀文件包括以下至少一种或其组合:.h文件、.m文件、.mm文件;预设类文件包括以下至少一种或其组合:使用+(void)load{}方式进行URL跳转的类文件、通过字符串名称初始化的类文件、通过json配置文件初始化的类文件。
在该实施例中,获取单元56中第一步通过/usr/bin/find命令找到工程目录下存在的.h、.m、.mm文件并将它们放在一个集合中,称为本地类文件集合;第二步递归读取工程目录下的代码文件,通过正则匹配出目前项目中正在使用的代码文件并放在一个集合中,称为使用类文件集合;第三步解析UIViewController使用+(void)load{}方式进行URL跳转的类文件、自定义UITableViewCell通过字符串名称初始化的类文件以及iOS组件化工程中通过json配置文件初始化的类文件,并将解析结果放至在使用类文件集合中;最后将两个集合做交集得到交集元素,然后用本地类文件集合减去交集元素就是无用的代码文件。删除无用代码文件,重新打包工程即可达到工程瘦身的目的。
本发明第三方面的实施例,提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述任一项的代码文件处理方法的步骤。
本发明提供的计算机设备,处理器执行计算机程序时实现上述任一项的代码文件处理方法的步骤,能够实现上述技术效果,不再赘述。
本发明第四方面的实施例,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一项的代码文件处理方法的步骤。
本发明提供的计算机可读存储介质,计算机程序被处理器执行时实现上述任一项的代码文件处理方法的步骤,能够实现上述技术效果,不再赘述。
在本说明书的描述中,术语“一个实施例”、“一些实施例”、“具体实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或实例。而且,描述的具体特征、结构、材料或特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (14)

1.一种代码文件处理方法,其特征在于,包括:
编译每行代码文件引用,以确定无效的代码文件引用和有效的代码文件引用;
删除所述无效的代码文件引用;
根据所述有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件;
删除所述第一类代码文件。
2.根据权利要求1所述的代码文件处理方法,其特征在于,所述编译每行所述代码文件引用,以确定所述无效的代码文件引用和所述有效的代码文件引用的步骤,具体包括:
通过xcodebuild命令行工具增量编译每行所述代码文件引用;
判断在通过所述xcodebuild命令行工具编译所述代码文件引用时是否能够输出编译结果;
若在通过所述xcodebuild命令行工具编译所述代码文件引用时能够输出所述编译结果,则确定所述代码文件引用无效;
若在通过所述xcodebuild命令行工具编译所述代码文件引用时不能够输出所述编译结果,则确定所述代码文件引用有效。
3.根据权利要求2所述的代码文件处理方法,其特征在于,还包括:
使用二进制方式集成所述代码文件引用所在文件模块外的其他文件模块;
通过所述xcodebuild命令行工具增量编译每行所述代码文件引用时,关闭编译优化,以及不输出dsym文件。
4.根据权利要求1所述的代码文件处理方法,其特征在于,所述根据所述有效的代码文件引用,获取未被引用的代码文件作为所述第一类代码文件的步骤,具体包括:
通过预设命令查找工程目录下存在的预设后缀文件,并将所述预设后缀文件存储至本地类文件集合;
读取所述工程目录下的所有代码文件,根据所述有效的代码文件引用获取所述所有代码文件中当前项目中正在使用的代码文件,并将所述正在使用的代码文件存储至使用类文件集合;
解析预设类文件得到解析后代码文件,并将所述解析后代码文件存储至所述使用类文件集合;
获取所述本地类文件集合中与所述使用类文件集合中的代码文件不重复的代码文件作为所述第一类代码文件。
5.根据权利要求4所述的代码文件处理方法,其特征在于,
所述预设命令为/usr/bin/find命令;
所述预设后缀文件包括以下至少一种或其组合:.h文件、.m文件、.mm文件;
所述预设类文件包括以下至少一种或其组合:使用+(void)load{}方式进行URL跳转的类文件、通过字符串名称初始化的类文件、通过json配置文件初始化的类文件。
6.根据权利要求1至5中任一项所述的代码文件处理方法,其特征在于,还包括:
若由于编译类被注释使通过所述xcodebuild命令行工具增量编译每行所述代码文件引用失败,则将所述编译类记录至白名单,以及在再一次通过所述xcodebuild命令行工具增量编译每行所述代码文件引用时跳过所述编译类。
7.一种代码文件处理系统,其特征在于,包括:
编译单元,用于编译每行代码文件引用,以确定无效的代码文件引用和有效的代码文件引用;
引用删除单元,用于删除所述无效的代码文件引用;
获取单元,用于根据所述有效的代码文件引用,获取未被引用的代码文件作为第一类代码文件;
文件删除单元,用于删除所述第一类代码文件。
8.根据权利要求7所述的代码文件处理系统,其特征在于,
所述编译单元,具体用于通过xcodebuild命令行工具增量编译每行所述代码文件引用;
所述编译单元包括:
判断单元,用于判断在通过所述xcodebuild命令行工具编译所述代码文件引用时是否能够输出编译结果;
确定单元,用于若在通过所述xcodebuild命令行工具编译所述代码文件引用时能够输出所述编译结果,则确定所述代码文件引用无效;以及若在通过所述xcodebuild命令行工具编译所述代码文件引用时不能够输出所述编译结果,则确定所述代码文件引用有效。
9.根据权利要求8所述的代码文件处理系统,其特征在于,还包括:
集成单元,用于使用二进制方式集成所述代码文件引用所在文件模块外的其他文件模块;
处理单元,用于通过所述xcodebuild命令行工具增量编译每行所述代码文件引用时,关闭编译优化,以及不输出dsym文件。
10.根据权利要求7所述的代码文件处理系统,其特征在于,所述获取单元,包括:
查找单元,用于通过预设命令查找工程目录下存在的预设后缀文件,并将所述预设后缀文件存储至本地类文件集合;
读取单元,用于读取所述工程目录下的所有代码文件,根据所述有效的代码文件引用获取所述所有代码文件中当前项目中正在使用的代码文件,并将所述正在使用的代码文件存储至使用类文件集合;
解析单元,用于解析预设类文件得到解析后代码文件,并将所述解析后代码文件存储至所述使用类文件集合;
所述获取单元,具体用于获取所述本地类文件集合中与所述使用类文件集合中的代码文件不重复的代码文件作为所述第一类代码文件。
11.根据权利要求10所述的代码文件处理系统,其特征在于,
所述预设命令为/usr/bin/find命令;
所述预设后缀文件包括以下至少一种或其组合:.h文件、.m文件、.mm文件;
所述预设类文件包括以下至少一种或其组合:使用+(void)load{}方式进行URL跳转的类文件、通过字符串名称初始化的类文件、通过json配置文件初始化的类文件。
12.根据权利要求7至11中任一项所述的代码文件处理系统,其特征在于,还包括:
记录单元,用于若由于编译类被注释使通过所述xcodebuild命令行工具增量编译每行所述代码文件引用失败,则将所述编译类记录至白名单,以及在再一次通过所述xcodebuild命令行工具增量编译每行所述代码文件引用时跳过所述编译类。
13.一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6中任一项所述的代码文件处理方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的代码文件处理方法的步骤。
CN201711332422.9A 2017-12-13 2017-12-13 代码文件处理方法、系统、计算机设备及可读存储介质 Active CN109918076B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711332422.9A CN109918076B (zh) 2017-12-13 2017-12-13 代码文件处理方法、系统、计算机设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711332422.9A CN109918076B (zh) 2017-12-13 2017-12-13 代码文件处理方法、系统、计算机设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN109918076A true CN109918076A (zh) 2019-06-21
CN109918076B CN109918076B (zh) 2022-09-09

Family

ID=66959282

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711332422.9A Active CN109918076B (zh) 2017-12-13 2017-12-13 代码文件处理方法、系统、计算机设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN109918076B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110413282A (zh) * 2019-08-01 2019-11-05 腾讯科技(深圳)有限公司 一种冗余资源处理方法、装置、设备及存储介质
CN110597547A (zh) * 2019-08-14 2019-12-20 平安国际智慧城市科技股份有限公司 基于Javascript的代码打包方法、装置及介质
CN111580824A (zh) * 2020-03-30 2020-08-25 北京达佳互联信息技术有限公司 程序优化方法、装置及存储介质
CN111722874A (zh) * 2020-06-24 2020-09-29 中国平安财产保险股份有限公司 移动端代码的自动清理方法、装置、设备及存储介质
CN113238760A (zh) * 2021-05-28 2021-08-10 统信软件技术有限公司 一种软件迁移方法、装置、计算设备及可读存储介质
CN113238760B (zh) * 2021-05-28 2024-06-04 统信软件技术有限公司 一种软件迁移方法、装置、计算设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103870303A (zh) * 2014-02-10 2014-06-18 广东欧珀移动通信有限公司 减小软件安装包大小的方法及装置
US20160132303A1 (en) * 2014-11-10 2016-05-12 Xamarin Inc. Multi-sized data types for managed code
CN106599151A (zh) * 2016-12-07 2017-04-26 Tcl集团股份有限公司 一种Android工程无用资源并行清理的方法及系统
CN106708565A (zh) * 2016-11-29 2017-05-24 武汉斗鱼网络科技有限公司 一种清除apk中无用图片资源的方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103870303A (zh) * 2014-02-10 2014-06-18 广东欧珀移动通信有限公司 减小软件安装包大小的方法及装置
US20160132303A1 (en) * 2014-11-10 2016-05-12 Xamarin Inc. Multi-sized data types for managed code
CN106708565A (zh) * 2016-11-29 2017-05-24 武汉斗鱼网络科技有限公司 一种清除apk中无用图片资源的方法及装置
CN106599151A (zh) * 2016-12-07 2017-04-26 Tcl集团股份有限公司 一种Android工程无用资源并行清理的方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
红薯: "Fui清除无用 Xcode 的 import", 《HTTPS://WWW.OSCHINA.NET/P/FUI》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110413282A (zh) * 2019-08-01 2019-11-05 腾讯科技(深圳)有限公司 一种冗余资源处理方法、装置、设备及存储介质
CN110413282B (zh) * 2019-08-01 2024-01-30 腾讯科技(深圳)有限公司 一种冗余资源处理方法、装置、设备及存储介质
CN110597547A (zh) * 2019-08-14 2019-12-20 平安国际智慧城市科技股份有限公司 基于Javascript的代码打包方法、装置及介质
CN111580824A (zh) * 2020-03-30 2020-08-25 北京达佳互联信息技术有限公司 程序优化方法、装置及存储介质
CN111580824B (zh) * 2020-03-30 2024-05-07 北京达佳互联信息技术有限公司 程序优化方法、装置及存储介质
CN111722874A (zh) * 2020-06-24 2020-09-29 中国平安财产保险股份有限公司 移动端代码的自动清理方法、装置、设备及存储介质
CN111722874B (zh) * 2020-06-24 2024-04-02 中国平安财产保险股份有限公司 移动端代码的自动清理方法、装置、设备及存储介质
CN113238760A (zh) * 2021-05-28 2021-08-10 统信软件技术有限公司 一种软件迁移方法、装置、计算设备及可读存储介质
CN113238760B (zh) * 2021-05-28 2024-06-04 统信软件技术有限公司 一种软件迁移方法、装置、计算设备及可读存储介质

Also Published As

Publication number Publication date
CN109918076B (zh) 2022-09-09

Similar Documents

Publication Publication Date Title
CN109918076A (zh) 代码文件处理方法、系统、计算机设备及可读存储介质
CN104133772B (zh) 一种自动生成测试数据的方法
CN106227668B (zh) 数据处理方法和装置
CN107688748B (zh) 基于漏洞指纹的脆弱性代码克隆检测方法及其装置
Roy et al. Scenario-based comparison of clone detection techniques
US11372630B2 (en) Efficient immutable syntax representation with incremental change
CN105095168B (zh) 一种合同文档的自动生成方法和装置
CN105793818A (zh) 源代码翻译
CN101490666A (zh) 对齐分层和顺序文档树以标识并行数据
CN108628751A (zh) 一种无用依赖项检测方法及装置
CN104699613B (zh) 一种航天器测试需求自动生成系统及其方法
CN106708565A (zh) 一种清除apk中无用图片资源的方法及装置
CN106648638B (zh) 一种基于python的R.java文件的优化方法及优化系统
CN1526104A (zh) 分析结构化数据
JP4951416B2 (ja) プログラム検証方法、プログラム検証装置
CN105335246A (zh) 一种基于问答网站分析的程序崩溃缺陷自动修复方法
CN105550169A (zh) 一种基于字符长度识别兴趣点名称的方法和装置
CN106406913A (zh) 一种从项目中提取代码的方法及系统
CN102622344A (zh) 一种面向Mediawiki的图片批量上传的控制方法及系统
CN106776266A (zh) 测试工具的配置方法及终端设备
CN109816038A (zh) 一种物联网固件程序分类方法及其装置
CN103927212B (zh) 自动分析源文件信息的方法及装置
CN104378362A (zh) 用于进行报文接口转换的方法及装置
CN106293862B (zh) 一种可扩展标记语言xml数据的解析方法和装置
CN111796833A (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