CN109460234A - 应用程序瘦身方法、装置、终端及存储介质 - Google Patents
应用程序瘦身方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN109460234A CN109460234A CN201811027658.6A CN201811027658A CN109460234A CN 109460234 A CN109460234 A CN 109460234A CN 201811027658 A CN201811027658 A CN 201811027658A CN 109460234 A CN109460234 A CN 109460234A
- Authority
- CN
- China
- Prior art keywords
- class
- source code
- useless
- installation kit
- app
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal 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)
- Stored Programmes (AREA)
Abstract
一种应用程序瘦身方法,包括:获取APP安装包的源码;对APP安装包的源码进行扫描,得到APP源码中的所有类;根据预设方式对源码进行编译打包生成具备数据上报能力的安装包文件;使用Monkey自动化测试工具测试并收集控件覆盖率数据和代码覆盖率数据;判断控件覆盖率是否大于预设覆盖率阈值;当大于时,获取上报的代码覆盖率数据中的类名,将类名对应的类作为有用类;将有用类从所有类中剔除,得到伪无用类;对伪无用类进行排查确认,剔除真正无用类后生成瘦身安装包。本发明还提供一种应用程序瘦身装置、终端及存储介质。本发明利用人工智能中的自动程序设计,先得到所有类,再得到有用类,通过所有类减去有用类后得到伪无用类,最后在伪无用类中排查出真正无用类,效率高且准确率高。
Description
技术领域
本发明涉及移动终端技术领域,具体涉及一种应用程序瘦身方法、装置、终端及存储介质。
背景技术
目前,终端的应用程序(application,APP)都是采用安装包的形式。安装包主要由两大部分内容组成,代码文件和静态资源(如图片,音视频文件等)。而且随着APP功能不断地丰富,安装包也变得越来越大,相应地冗余资源也越来越多,当用户进行应用程序升级时,必然会消耗更多的流量。
APP安装包瘦身主要从静态资源维度和代码维度来进行。静态资源通过工具扫描就可以实现,而现有技术中,对代码层面的瘦身大多基于研发人员的自身经验,在代码中进行筛选查找,剔除先前弃用的类或方法。然而当研发人员的经验不足或欠缺时,查找筛选的过程就会非常缓慢,工作效率低下,且瘦身效果并不理想。
发明内容
鉴于以上内容,有必要提出一种应用程序瘦身方法、装置、终端及存储介质,能够借助Monkey减少先扫描源码得到所有类,借助Monkey自动化测试工具得到有用类,通过所有类减去有用类后得到伪无用类,最后在伪无用类中排查出真正无用类,减少了人工点击实现数据上报的人力成本,且Monkey自动化测试不必依赖开发人员的经验,客观性强,准确率高。
本发明的第一方面提供一种应用程序瘦身方法,应用于终端中,所述方法包括:
获取APP安装包的源码;
对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类;
根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件;
使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据;
判断所述控件覆盖率是否大于预设覆盖率阈值;
当确定所述控件覆盖率大于所述预设覆盖率阈值时,获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类;
将所述有用类从所述所有类中剔除,得到伪无用类;及
对所述伪无用类进行排查确认出真正无用类;及
根据所述所有类及所述真正无用类生成瘦身安装包。
根据本发明的一个优选实施例,所述对所述APP安装包的源码进行扫描包括:
通过python或者其他语言实现的自动化测试脚本对所述APP安装包的源码文件进行逐行扫描;
根据预设正则函数提取扫描的每行源码目录中的所述APP安装包中的所有类名。
根据本发明的一个优选实施例,所述根据预设方式对所述源码进行编译打包是指根据精准测试对所述源码进行编译打包。
根据本发明的一个优选实施例,所述生成具备数据上报能力的安装包文件包括:
对所述源码进行静态插桩处理或动态hook处理;
对处理后的源码进行编译打包,生成具备数据上报能力的安装包文件。
根据本发明的一个优选实施例,所述对所述伪无用类进行排查确认出真正无用类为:
将所述伪无用类中的有用类进行剔除,得到真正无用类;或者
从所述伪无用类中挑选出无用类,得到真正无用类。。
根据本发明的一个优选实施例,所述根据所述所有类及所述真正无用类生成瘦身安装包包括:
将所述真正无用类所包含的代码从所述应用程序安装包源码中进行删除;
将删除后的应用程序安装包源码进行编译打包成新的应用程序安装包。
根据本发明的一个优选实施例,当确定所述控件覆盖率小于或者等于预设覆盖率阈值时,所述方法还包括:
使用Monkey自动化测试工具重新测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据。
本发明的第二方面提供一种应用程序瘦身装置,运行于终端中,所述装置包括:
获取模块,用于获取APP安装包的源码;
扫描模块,用于对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类;
生成模块,用于根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件;
测试模块,用于使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据;
判断模块,用于判断所述控件覆盖率是否大于预设覆盖率阈值;
所述获取模块,还用于当所述判断模块确定所述控件覆盖率大于所述预设覆盖率阈值时,获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类;
剔除模块,用于将所述有用类从所述所有类中剔除,得到伪无用类;
所述剔除模块,还用于对所述伪无用类进行排查确认出真正无用类;及
瘦身模块,用于根据所述所有类及所述真正无用类生成瘦身安装包。
本发明的第三方面提供一种终端,所述终端包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现所述应用程序瘦身方法。
本发明的第四方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述应用程序瘦身方法。
本发明所述的应用程序瘦身方法、装置、终端及存储介质,使用更加有效的方式取代了只能根据经验来从大量文件中排查冗余代码的方式,极大地提升了排查效率。借助Monkey自动化测试极大程度上减少了人工点击实现数据上报的人力成本,且Monkey自动化测试不必依赖开发人员的经验,因而客观性强,准确率高。借助精准测试的方式解决了“动态获取APP实际使用过程中涉及的相关类”这个难点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本发明实施例一提供的应用程序瘦身方法的流程图。
图2是本发明实施例二提供的应用程序瘦身装置的结构图。
图3是本发明实施例三提供的终端的示意图。
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
优选地,本发明的应用程序瘦身方法应用在一个或者多个终端或者服务器中。所述终端是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述终端可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端可以与客户客户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
实施例一
图1是本发明实施例一提供的应用程序瘦身方法的流程图。
在本实施例中,所述应用程序瘦身方法可以应用于具备显示功能的终端或者固定终端中,所述终端并不限定于个人电脑、智能手机、平板电脑、安装有摄像头的台式机或一体机等。
所述应用程序瘦身方法也可以应用于由终端和通过网络与所述终端进行连接的服务器所构成的硬件环境中。网络包括但不限于:广域网、城域网或局域网。本发明实施例的应用程序瘦身方法可以由服务器来执行,也可以由终端来执行,还可以是由服务器和终端共同执行。
例如,对于需要进行应用程序瘦身的终端,可以直接在终端上集成本发明的方法所提供的应用程序瘦身功能,或者安装用于实现本发明的方法的客户端。再如,本发明所提供的方法还可以软件开发工具包(Software Development Kit,SDK)的形式运行在服务器等设备上。
如图1所示,所述应用程序瘦身方法具体包括以下步骤,根据不同的需求,该流程图中步骤的顺序可以改变,某些步骤可以省略。
S11:获取APP安装包的源码。
APP安装包是APP包文件,是一种操作系统(例如,IOS系统或者Android系统)上的APP安装文件。而安装包是由程序源码(源代码)文件被编译打包后生成的,源码文件的大小就决定了安装包的大小,所以说要对安装包进行瘦身就要获取APP源码,从源码着手。所述APP安装包的源码中包含了多个资源文件及可执行文件。
S12:对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类。
本实施例中,对所述APP安装包的源码进行扫描可以包括:
1)通过python或者其他语言实现的自动化测试脚本对所述APP安装包的源码文件进行逐行扫描;
2)根据预设正则函数提取扫描的每行源码目录中的所述APP安装包中的所有类名。
无论是何种编码语音,源码目录中的类名都有特定的修饰符,通过预先编写正则函数,即可从APP源码文件中匹配出具有特定修饰符的类名。
S13:根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件。
本实施例中,所述根据预设方式对所述源码进行编译打包是指根据精准测试对所述源码进行编译打包。
所述生成具备数据上报能力的安装包文件可以包括:
1)对所述源码进行静态插桩处理或动态hook处理。
安卓APP和IOS APP各有多种静态插桩或动态hook方式,可根据APP的类型决定采用何种静态插桩或动态hook方式,在此不做赘述。对所述源码进行静态插桩处理或动态hook处理可使得每个类执行后都可以进行相应的数据上报。
2)对处理后的源码进行编译打包,生成具备数据上报能力的安装包文件。
S14:使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据。
本实施例中,可以将所述安装包文件安装到测试设备,例如手机或者电脑中进行一次完整的Monkey自动化测试。所述Monkey自动化测试是一种高效的测试方法,可以通过Monkey自动化测试来模拟用户的按键输入、触摸屏输入、手势输入等,其主要用于APP的稳定性测试,测试可用性强,适用范围广。而且通过Monkey自动化测试覆盖APP所有界面/控件相比于纯人工点击APP所有界面/控件的效率更高。
在Monkey自动化的界面/控件覆盖率达到一定的标准之后,便可以采用本次的代码覆盖率数据进行下一步的排查操作。
S15:判断所述控件覆盖率是否大于预设覆盖率阈值。
本实施例中,可以把步骤S14中收集的控件覆盖率数据和预设覆盖率阈值进行比较。当确定所述控件覆盖率大于预设覆盖率阈值时,执行步骤S16;否则,当确定所述控件覆盖率小于或者等于预设覆盖率阈值时,可重新执行上述步骤S14。即当确定所述控件覆盖率小于或者等于预设覆盖率阈值时,所述方法还包括:使用Monkey自动化测试工具重新测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据。
S16:获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类。
当确定所述控件覆盖率大于预设覆盖率阈值时,即认为Monkey自动化测试已基本达到了APP的界面或控件覆盖要求。此时从收集的代码覆盖率数据中提取出的类名可作为有用类名,所述有用类名对应的类作为有用类。
S17:将所述有用类从所述所有类中剔除,得到伪无用类。
本实施例中,将S16中得到的所有有用类从S12中获取的所有类中剔除,得到的剩余类即为伪无用类。
所述伪无用类是指因Monkey自动化测试自身覆盖率的原因,会导致还存在一些有用类并未进行上报,所以剩余的伪无用类中还会存在少许有用类。
S18:对所述伪无用类进行排查确认出真正无用类。本实施例中,通过Monkey自动化测试后得到的伪无用类在所述源码中的所有类的比例非常小,此时便可以进行人工排查,当开发人员在所述伪无用类中发现真正无用类后,排查确认出真正无用类。
本实施例中,所述对所述伪无用类进行排查确认出真正无用类为:将所述伪无用类中的有用类进行剔除,得到真正无用类。
开发人员可以通过删除的方式将所述有用类从所述伪无用类中剔除。将有用类从伪无用类中进行剔除之后得到的剩余类,为真正无用类。终端接收到用户的删除操作后,将用户删除的类从所述伪无用类中去掉,得到真正无用类。
可选地,所述对所述伪无用类进行排查确认出真正无用类为:从所述伪无用类中挑选出无用类,得到真正无用类。
开发人员可以在通过勾选的方式将真正无用类从所述伪无用类中挑选出。终端接收到用户的勾选操作后,将用户勾选的类从所述伪无用类中挑选出,得到真正无用类。
S19:根据所述所有类及所述真正无用类生成瘦身安装包。
删除真正的无用类之后对源码进行重新打包,就生成了瘦身后的安装包。
本实施例中,根据所述所有类及所述真正无用类生成瘦身安装包可以包括:
1)将所述真正无用类所包含的代码从所述应用程序安装包源码中进行删除;
2)将删除后的应用程序安装包源码进行编译打包成新的应用程序安装包。
综上所述,本发明实施例所述的应用程序瘦身装置,获取APP安装包的源码;对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类;根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件;使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据;在所述控件覆盖率大于预设覆盖率阈值时,获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类;将所述有用类从所述所有类中剔除,得到伪无用类;对所述伪无用类进行排查确认出真正无用类;根据所述所有类及所述真正无用类生成瘦身安装包。即先对安装包进行扫描得到所有类,使用Monkey自动化测试工具获取有用类,用所有类减去有用类后得到伪无用类。但因Monkey自动化测试自身覆盖率的原因,会导致还存在一些有用类并未进行上报,所以剩余的伪无用类中还会存在少许有用类。此时在伪无用类中进行人工排查将会节省大量时间,较易于将真正无用类排查出,最后将真正无用类从所有类中排除后生成瘦身安装包。
本发明使用更加有效的方式取代了只能根据经验来从大量文件中排查冗余代码的方式,极大地提升了排查效率。借助Monkey自动化测试极大程度上减少了人工点击实现数据上报的人力成本,且Monkey自动化测试不必依赖开发人员的经验,因而客观性强,准确率高。借助精准测试的方式解决了“动态获取APP实际使用过程中涉及的相关类”这个难点。
上述图1详细介绍了本发明的应用程序瘦身方法,下面结合第2~3图,分别对实现所述应用程序瘦身方法的软件装置的功能模块以及实现所述应用程序瘦身方法的硬件装置架构进行介绍。
应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
实施例二
参阅图2所示,是本发明应用程序瘦身装置的较佳实施例中的功能模块图。
在一些实施例中,所述应用程序瘦身装置20运行于终端中。所述应用程序瘦身装置20可以包括多个由程序代码段所组成的功能模块。所述应用程序瘦身装置20中的各个程序段的程序代码可以存储于终端的存储器中,并由所述至少一个处理器所执行,以执行(详见图1描述)对货物的出入进行管理。
本实施例中,所述应用程序瘦身装置20根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:获取模块201、扫描模块202、生成模块203、测试模块204、判断模块205、剔除模块206及瘦身模块207。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在本实施例中,关于各模块的功能将在后续的实施例中详述。
获取模块201,用于获取APP安装包的源码。
APP安装包是APP包文件,是一种操作系统(例如,IOS系统或者Android系统)上的APP安装文件。而安装包是由程序源码(源代码)文件被编译打包后生成的,源码文件的大小就决定了安装包的大小,所以说要对安装包进行瘦身就要获取APP源码,从源码着手。所述APP安装包的源码中包含了多个资源文件及可执行文件。
扫描模块202,用于对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类。
本实施例中,所述扫描模块202对所述APP安装包的源码进行扫描可以包括:
1)通过python或者其他语言实现的自动化测试脚本对所述APP安装包的源码文件进行逐行扫描;
2)根据预设正则函数提取扫描的每行源码目录中的所述APP安装包中的所有类名。
无论是何种编码语音,源码目录中的类名都有特定的修饰符,通过预先编写正则函数,即可从APP源码文件中匹配出具有特定修饰符的类名。
生成模块203,用于根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件。
本实施例中,所述根据预设方式对所述源码进行编译打包是指根据精准测试对所述源码进行编译打包。
所述生成模块203生成具备数据上报能力的安装包文件可以包括:
1)对所述源码进行静态插桩处理或动态hook处理。
安卓APP和IOS APP各有多种静态插桩或动态hook方式,可根据APP的类型决定采用何种静态插桩或动态hook方式,在此不做赘述。对所述源码进行静态插桩处理或动态hook处理可使得每个类执行后都可以进行相应的数据上报。
2)对处理后的源码进行编译打包,生成具备数据上报能力的安装包文件。
测试模块204,用于使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据。
本实施例中,可以将所述安装包文件安装到测试设备,例如手机或者电脑中进行一次完整的Monkey自动化测试。所述Monkey自动化测试是一种高效的测试方法,可以通过Monkey自动化测试来模拟用户的按键输入、触摸屏输入、手势输入等,其主要用于APP的稳定性测试,测试可用性强,适用范围广。而且通过Monkey自动化测试覆盖APP所有界面/控件相比于纯人工点击APP所有界面/控件的效率更高。
在Monkey自动化的界面/控件覆盖率达到一定的标准之后,便可以采用本次的代码覆盖率数据进行下一步的排查操作。
判断模块205,用于判断所述控件覆盖率是否大于预设覆盖率阈值。
本实施例中,所述判断模块205可以把所述测试模块204中收集的控件覆盖率数据和预设覆盖率阈值进行比较。
获取模块201,还用于当判断模块205确定所述控件覆盖率大于预设覆盖率阈值时,获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类。
当确定所述控件覆盖率大于预设覆盖率阈值时,即认为Monkey自动化测试已基本达到了APP的界面或控件覆盖要求。此时从收集的代码覆盖率数据中提取出的类名可作为有用类名,所述有用类名对应的类作为有用类。
剔除模块206,用于将所述有用类从所述所有类中剔除,得到伪无用类。
本实施例中,将所有有用类从所有类中剔除,得到的剩余类即为伪无用类。
所述伪无用类是指因Monkey自动化测试自身覆盖率的原因,会导致还存在一些有用类并未进行上报,所以剩余的伪无用类中还会存在少许有用类。
瘦身模块207,用于对所述伪无用类进行排查确认,剔除真正无用类后生成瘦身安装包。
本实施例中,通过Monkey自动化测试后得到的伪无用类在所述源码中的所有类的比例非常小,此时便可以进行人工排查,当开发人员在所述伪无用类中发现真正无用类后,排查确认出真正无用类。
本实施例中,所述对所述伪无用类进行排查确认出真正无用类为:将所述伪无用类中的有用类进行剔除,得到真正无用类。
开发人员可以通过删除的方式将所述有用类从所述伪无用类中剔除。将有用类从伪无用类中进行剔除之后得到的剩余类,为真正无用类。终端接收到用户的删除操作后,将用户删除的类从所述伪无用类中去掉,得到真正无用类。
可选地,所述对所述伪无用类进行排查确认出真正无用类为:从所述伪无用类中挑选出无用类,得到真正无用类。
开发人员可以在通过勾选的方式将真正无用类从所述伪无用类中挑选出。终端接收到用户的勾选操作后,将用户勾选的类从所述伪无用类中挑选出,得到真正无用类。
瘦身模块207,用于根据所述所有类及所述真正无用类生成瘦身安装包。
删除真正的无用类之后对源码进行重新打包,就生成了瘦身后的安装包。
本实施例中,根据所述所有类及所述真正无用类生成瘦身安装包可以包括:
1)将所述真正无用类所包含的代码从所述应用程序安装包源码中进行删除;
2)将删除后的应用程序安装包源码进行编译打包成新的应用程序安装包。
综上所述,本发明实施例所述的应用程序瘦身装置,获取APP安装包的源码,所述APP安装包的源码中包含了多个资源文件及可执行文件;对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类;根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件;使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据;在所述控件覆盖率大于预设覆盖率阈值时,获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类;将所述有用类从所述所有类中剔除,得到伪无用类;对所述伪无用类进行排查确认出真正无用类;根据所述所有类及所述真正无用类生成瘦身安装包。即先对安装包进行扫描得到所有类,使用Monkey自动化测试工具获取有用类,用所有类减去有用类后得到伪无用类。但因Monkey自动化测试自身覆盖率的原因,会导致还存在一些有用类并未进行上报,所以剩余的伪无用类中还会存在少许有用类。此时在伪无用类中进行人工排查将会节省大量时间,较易于将真正无用类排查出,最后将真正无用类从所有类中排除后生成瘦身安装包。
本发明使用更加有效的方式取代了只能根据经验来从大量文件中排查冗余代码的方式,极大地提升了排查效率。借助Monkey自动化测试极大程度上减少了人工点击实现数据上报的人力成本,且Monkey自动化测试不必依赖开发人员的经验,因而客观性强,准确率高。借助精准测试的方式解决了“动态获取APP实际使用过程中涉及的相关类”这个难点。
实施例三
参阅图3所示,为本发明实施例提供的终端的结构示意图。在本发明较佳实施例中,所述终端3包括存储器31、至少一个处理器32、至少一条通信总线33及显示屏幕34。
本领域技术人员应该了解,图3示出的终端的结构并不构成本发明实施例的限定,既可以是总线型结构,也可以是星形结构,所述终端3还可以包括比图示更多或更少的其他硬件或者软件,或者不同的部件布置。
在一些实施例中,所述终端3包括一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的终端,其硬件包括但不限于微处理器、专用集成电路、可编程门阵列、数字处理器、嵌入式设备等。所述终端3还可包括客户客户设备,所述客户客户设备包括但不限于任何一种可与客户客户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、数码相机等。
需要说明的是,所述终端3仅为举例,其他现有的或今后可能出现的电子产品如可适应于本发明,也应包含在本发明的保护范围以内,并以引用方式包含于此。
在一些实施例中,所述存储器31用于存储程序代码和各种数据,例如安装在所述终端3中的应用程序瘦身装置20,并在终端3的运行过程中实现高速、自动地完成程序或数据的存取。所述存储器31包括只读存储器(Read-Only Memory,ROM)、随机存储器(RandomAccess Memory,RAM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、一次可编程只读存储器(One-time Programmable Read-Only Memory,OTPROM)、电子擦除式可复写只读存储器(Electrically-Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(Compact Disc Read-Only Memory,CD-ROM)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。
在一些实施例中,所述至少一个处理器32可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(Central Processing unit,CPU)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。所述至少一个处理器32是所述终端3的控制核心(Control Unit),利用各种接口和线路连接整个终端3的各个部件,通过运行或执行存储在所述存储器31内的程序或者模块,以及调用存储在所述存储器31内的数据,以执行终端3的各种功能和处理数据,例如执行应用程序瘦身的功能。
在一些实施例中,所述至少一条通信总线33被设置为实现所述存储器31、所述至少一个处理器32以及所述显示屏幕34等之间的连接通信。
在一些实施例中,所述显示屏幕34可用于显示由观看者输入的信息或提供给观看者的信息以及终端3的各种图形观看者接口,这些图形观看者接口可以由图形、文本、图标、视频和其任意组合来构成。所述显示屏幕34可包括显示面板,可选的,可以采用液晶显示屏幕(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板。
所述显示屏幕34还可以包括触摸面板。如果所述显示屏幕34包括触摸面板,所述显示屏幕34可以被实现为触摸屏,以接收来自观看者的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。上述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与上述触摸或滑动操作相关的持续时间和压力。所述显示面板与所述触摸面板可以作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将所述显示面板与所述触摸面板进行集成而实现输入和输出功能。
尽管未示出,所述终端3还可以包括给各个部件供电的电源(比如电池),优选的,电源可以通过电源管理装置与所述至少一个处理器32逻辑相连,从而通过电源管理装置实现管理充电、放电、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述终端3还可以包括多种传感器、蓝牙模块、Wi-Fi模块等,在此不再赘述。
应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。
在进一步的实施例中,结合图1,所述至少一个处理器32可执行所述终端3的操作装置以及安装的各类应用程序(如所述的应用程序瘦身装置20)、程序代码等,例如,上述的各个模块(所述获取模块201、所述扫描模块202、所述生成模块203、所述测试模块204、所述判断模块205、所述剔除模块206及所述瘦身模块207)。
所述存储器31中存储有程序代码,且所述至少一个处理器32可调用所述存储器31中存储的程序代码以执行相关的功能。例如,图2中所述的各个模块是存储在所述存储器31中的程序代码,并由所述至少一个处理器32所执行,从而实现所述各个模块的功能以达到应用程序瘦身的目的。
在本发明的一个实施例中,所述存储器31存储多个指令,所述多个指令被所述至少一个处理器32所执行以实现应用程序瘦身。
具体地,所述至少一个处理器32对所述多个指令的执行包括:
获取APP安装包的源码;
对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类;
根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件;
使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据;
判断所述控件覆盖率是否大于预设覆盖率阈值;
当确定所述控件覆盖率大于所述预设覆盖率阈值时,获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类;
将所述有用类从所述所有类中剔除,得到伪无用类;
对所述伪无用类进行排查确认出真正无用类;及
根据所述所有类及所述真正无用类生成瘦身安装包。
在一个优选实施例中,所述对所述APP安装包的源码进行扫描包括:
通过python或者其他语言实现的自动化测试脚本对所述APP安装包的源码文件进行逐行扫描;
根据预设正则函数提取扫描的每行源码目录中的所述APP安装包中的所有类名。
在一个优选实施例中,所述根据预设方式对所述源码进行编译打包是指根据精准测试对所述源码进行编译打包。
在一个优选实施例中,所述生成具备数据上报能力的安装包文件包括:
对所述源码进行静态插桩处理或动态hook处理;
对处理后的源码进行编译打包,生成具备数据上报能力的安装包文件。
在一个优选实施例中,所述对所述伪无用类进行排查确认出真正无用类为:
将所述伪无用类中的有用类进行剔除,得到真正无用类;或者
从所述伪无用类中挑选出无用类,得到真正无用类。
在一个优选实施例中,所述根据所述所有类及所述真正无用类生成瘦身安装包包括:
将所述真正无用类所包含的代码从所述应用程序安装包源码中进行删除;
将删除后的应用程序安装包源码进行编译打包成新的应用程序安装包。
在一个优选实施例中,当确定所述控件覆盖率小于或者等于预设覆盖率阈值时,所述处理器32进一步执行以下指令:
使用Monkey自动化测试工具重新测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
Claims (10)
1.一种应用程序瘦身方法,应用于终端中,其特征在于,所述方法包括:
获取APP安装包的源码;
对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类;
根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件;
使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据;
判断所述控件覆盖率是否大于预设覆盖率阈值;
当确定所述控件覆盖率大于所述预设覆盖率阈值时,获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类;
将所述有用类从所述所有类中剔除,得到伪无用类;
对所述伪无用类进行排查确认出真正无用类;及
根据所述所有类及所述真正无用类生成瘦身安装包。
2.如权利要求1所述的方法,其特征在于,所述对所述APP安装包的源码进行扫描包括:
通过python或者其他语言实现的自动化测试脚本对所述APP安装包的源码文件进行逐行扫描;
根据预设正则函数提取扫描的每行源码目录中的所述APP安装包中的所有类名。
3.如权利要求1所述的方法,其特征在于,所述根据预设方式对所述源码进行编译打包是指根据精准测试对所述源码进行编译打包。
4.如权利要求1所述的方法,其特征在于,所述生成具备数据上报能力的安装包文件包括:
对所述源码进行静态插桩处理或动态hook处理;
对处理后的源码进行编译打包,生成具备数据上报能力的安装包文件。
5.如权利要求1所述的方法,其特征在于,所述对所述伪无用类进行排查确认出真正无用类为:
将所述伪无用类中的有用类进行剔除,得到真正无用类;或者
从所述伪无用类中挑选出无用类,得到真正无用类。
6.如权利要求5所述的方法,其特征在于,所述根据所述所有类及所述真正无用类生成瘦身安装包包括:
将所述真正无用类所包含的代码从所述应用程序安装包源码中进行删除;
将删除后的应用程序安装包源码进行编译打包成新的应用程序安装包。
7.如权利要求1至6中任意一项所述的方法,其特征在于,当确定所述控件覆盖率小于或者等于预设覆盖率阈值时,所述方法还包括:
使用Monkey自动化测试工具重新测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据。
8.一种应用程序瘦身装置,运行于终端中,其特征在于,所述装置包括:
获取模块,用于获取APP安装包的源码;
扫描模块,用于对所述APP安装包的源码进行扫描,得到所述APP源码中的所有类;
生成模块,用于根据预设方式对所述源码进行编译打包生成具备数据上报能力的安装包文件;
测试模块,用于使用Monkey自动化测试工具测试所述安装包文件并收集测试过程中生成的控件覆盖率数据和代码覆盖率数据;
判断模块,用于判断所述控件覆盖率是否大于预设覆盖率阈值;
所述获取模块,还用于当所述判断模块确定所述控件覆盖率大于所述预设覆盖率阈值时,获取Monkey自动化测试工具上报的所述代码覆盖率数据中的类名,将所述类名对应的类作为有用类;
剔除模块,用于将所述有用类从所述所有类中剔除,得到伪无用类;
所述剔除模块,还用于对所述伪无用类进行排查确认出真正无用类;及
瘦身模块,用于根据所述所有类及所述真正无用类生成瘦身安装包。
9.一种终端,其特征在于,所述终端包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1至7中任意一项所述应用程序瘦身方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任意一项所述应用程序瘦身方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811027658.6A CN109460234B (zh) | 2018-09-04 | 2018-09-04 | 应用程序瘦身方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811027658.6A CN109460234B (zh) | 2018-09-04 | 2018-09-04 | 应用程序瘦身方法、装置、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109460234A true CN109460234A (zh) | 2019-03-12 |
CN109460234B CN109460234B (zh) | 2023-04-11 |
Family
ID=65606500
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811027658.6A Active CN109460234B (zh) | 2018-09-04 | 2018-09-04 | 应用程序瘦身方法、装置、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109460234B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110389764A (zh) * | 2019-06-19 | 2019-10-29 | 平安普惠企业管理有限公司 | 无用代码清理方法、设备、存储介质及装置 |
CN113297071A (zh) * | 2021-05-14 | 2021-08-24 | 山东云海国创云计算装备产业创新中心有限公司 | 基于uvm功能覆盖率驱动的验证方法、装置及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150083627A (ko) * | 2014-01-10 | 2015-07-20 | 아리아시큐어 주식회사 | 액티비티 문자열 분석에 의한 안드로이드 악성코드 검출 방법 |
CN106598828A (zh) * | 2015-10-14 | 2017-04-26 | 阿里巴巴集团控股有限公司 | 一种源代码中的无效类确定方法及装置 |
CN106874060A (zh) * | 2017-01-16 | 2017-06-20 | 上海斐讯数据通信技术有限公司 | 一种判断jar包是否被引用的方法及设备 |
CN107239395A (zh) * | 2016-03-29 | 2017-10-10 | 阿里巴巴集团控股有限公司 | 一种源代码中无效函数的查找方法和设备 |
CN108415821A (zh) * | 2017-02-09 | 2018-08-17 | 腾讯科技(深圳)有限公司 | 测试报告的生成方法及装置 |
-
2018
- 2018-09-04 CN CN201811027658.6A patent/CN109460234B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150083627A (ko) * | 2014-01-10 | 2015-07-20 | 아리아시큐어 주식회사 | 액티비티 문자열 분석에 의한 안드로이드 악성코드 검출 방법 |
CN106598828A (zh) * | 2015-10-14 | 2017-04-26 | 阿里巴巴集团控股有限公司 | 一种源代码中的无效类确定方法及装置 |
CN107239395A (zh) * | 2016-03-29 | 2017-10-10 | 阿里巴巴集团控股有限公司 | 一种源代码中无效函数的查找方法和设备 |
CN106874060A (zh) * | 2017-01-16 | 2017-06-20 | 上海斐讯数据通信技术有限公司 | 一种判断jar包是否被引用的方法及设备 |
CN108415821A (zh) * | 2017-02-09 | 2018-08-17 | 腾讯科技(深圳)有限公司 | 测试报告的生成方法及装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110389764A (zh) * | 2019-06-19 | 2019-10-29 | 平安普惠企业管理有限公司 | 无用代码清理方法、设备、存储介质及装置 |
CN113297071A (zh) * | 2021-05-14 | 2021-08-24 | 山东云海国创云计算装备产业创新中心有限公司 | 基于uvm功能覆盖率驱动的验证方法、装置及设备 |
CN113297071B (zh) * | 2021-05-14 | 2022-08-19 | 山东云海国创云计算装备产业创新中心有限公司 | 基于uvm功能覆盖率驱动的验证方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109460234B (zh) | 2023-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109558308A (zh) | 应用程序内存泄露检测方法、装置、电子设备及存储介质 | |
CN109522020A (zh) | 安卓系统安装包瘦身方法、装置、终端及存储介质 | |
US8196116B2 (en) | Tracing objects in object-oriented programming model | |
CN107168841A (zh) | 一种移动设备的远程测试方法和装置 | |
CN110990053A (zh) | 机器学习方案模板的创建方法、使用方法及装置 | |
CN104137066A (zh) | 提供关于应用的信息的方法、用于执行所述方法的装置以及记录有用于运行所述方法的程序的计算机可读记录介质 | |
CN109947832A (zh) | 将excel数据表生成sql文件的方法、装置、终端及存储介质 | |
CN106557308B (zh) | 一种软件持续集成方法及装置 | |
CN113282795B (zh) | 数据结构图生成及更新方法、装置、电子设备及存储介质 | |
CN105893259A (zh) | 代码检测系统、方法及装置 | |
CN108763091A (zh) | 用于回归测试的方法、装置及系统 | |
CN109460234A (zh) | 应用程序瘦身方法、装置、终端及存储介质 | |
CN114880238A (zh) | 移动端界面测试方法、装置、设备及存储介质 | |
US20150370921A1 (en) | Emotion visualization device, emotion visualization method, and emotion visualization program | |
CN110276515A (zh) | 任务分配方法、装置、终端及存储介质 | |
CN113704487A (zh) | 知识图谱的生成方法、装置、计算机设备及存储介质 | |
CN109062469A (zh) | 分屏显示方法、装置、存储介质和电子设备 | |
CN112532483A (zh) | 测试方法、装置、电子设备及存储介质 | |
CN114237829B (zh) | 一种电力设备的数据采集与处理方法 | |
CN110471730A (zh) | 基于Echarts的展示方法、系统、大屏系统和介质 | |
CN109214155A (zh) | 屏幕点亮方法、装置、终端及存储介质 | |
CN114911479A (zh) | 基于配置化的界面生成方法、装置、设备及存储介质 | |
US20160026237A1 (en) | Screen changing device, screen changing method, and screen changing program | |
CN113190154B (zh) | 模型训练、词条分类方法、装置、设备、存储介质及程序 | |
CN114385155A (zh) | vue项目可视化工具生成方法、装置、设备及存储介质 |
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 |