CN111309334A - 生成软件安装包的方法、装置、计算机设备及存储介质 - Google Patents

生成软件安装包的方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN111309334A
CN111309334A CN202010099095.2A CN202010099095A CN111309334A CN 111309334 A CN111309334 A CN 111309334A CN 202010099095 A CN202010099095 A CN 202010099095A CN 111309334 A CN111309334 A CN 111309334A
Authority
CN
China
Prior art keywords
static method
target
class
deletable
target static
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
CN202010099095.2A
Other languages
English (en)
Other versions
CN111309334B (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 QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and Technology 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 QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN202010099095.2A priority Critical patent/CN111309334B/zh
Publication of CN111309334A publication Critical patent/CN111309334A/zh
Application granted granted Critical
Publication of CN111309334B publication Critical patent/CN111309334B/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
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提出的一种生成软件安装包的方法、装置、计算机设备及存储介质,确定用于生成安装包的待编译对象中含有目标静态方法的类,目标静态方法用于实现内部类和外部类之间相互访问私有变量或方法,确定目标静态方法与类中的私有变量或方法之间的引用关系,根据引用关系确定目标静态方法中的可删除静态方法,并将可删除静态方法删除,从而减少了安装包的方法数,缩小了安装包的体积,为了保证减少方法数后安装包对应的应用程序还可以正常运行,修改与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令。该方案即减少了安装包的方法数,又保证了减少方法数后,安装包对应的应用程序还可以正常运行。

Description

生成软件安装包的方法、装置、计算机设备及存储介质
技术领域
本发明实施例涉及互联网技术领域,具体涉及一种生成软件安装包的方法、装置、计算机设备及存储介质。
背景技术
移动互联网高速发展过程中,APP(Application,应用程序)的基础体验和内容越来越重要。随着APP功能越来越丰富,使得APP安装包中的方法数越来越多。在Android系统中,当安装包中的方法数达到上限(比如65536)时,必须采用multidex工具对安装包进行分包,才能使APP正常运行,而且安装包中的方法数增加的同时,会导致安装包的包体积增大。
发明内容
为了解决APP的安装包中方法数太多的技术问题,本发明实施例提供了一种生成软件安装包的方法、装置、计算机设备及存储介质。
有鉴于此,第一方面,本发明实施例提供一种生成软件安装包的方法,包括:
确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类与外部类之间相互访问私有变量或方法;
确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系;
根据所述引用关系确定所述目标静态方法中的可删除静态方法;
将所述可删除静态方法从所述待编译对象中删除;
修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令,得到目标编译对象;
对所述目标编译对象执行编译,生成安装包文件。在一种可能的实现方式中,确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系,包括:
获取所述目标静态方法中的字节码指令,根据所述字节码指令确定所述目标静态方法引用的私有变量或方法;
遍历所述含有目标静态方法的类中的方法调用的字节码指令,根据所述字节码指令,确定引用所述目标静态方法的方法。
在一种可能的实现方式中,根据所述引用关系确定所述目标静态方法中的可删除静态方法,包括:
判断所述目标静态方法是否满足第一预设条件、第二预设条件和第三预设条件中的任一条件,若所述目标静态方法均不满足所述第一预设条件、第二预设条件和第三预设条件,则确定所述目标静态方法为可删除静态方法;
其中,所述第一预设条件为目标静态方法对与其有引用关系的私有变量有写操作;
所述第二预设条件为目标静态方法中字节码指令的条数大于阈值;
所述第三预设条件为目标静态方法引用了从含有该目标静态方法的类的父类中继承的私有变量或方法,且含有该目标静态方法的类中不包含所述从父类中继承的私有变量或方法。
在一种可能的实现方式中,修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限,包括:
确定被可删除静态方法引用的私有变量或方法;
将被该可删除静态方法引用的私有变量或方法的访问控制权限改为包访问。
在一种可能的实现方式中,修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的引用指令,包括:
确定引用所述可删除静态方法的方法,作为目标方法;
若所述可删除静态方法引用的是私有变量,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的私有变量;
若所述可删除静态方法引用的是方法,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的方法。
第二方面,本发明实施例还提供了一种生成软件安装包的装置,包括:
类确定模块,用于确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类与外部类之间相互访问私有变量或方法;
引用关系确定模块,用于确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系;
可删除静态方法确定模块,用于根据所述引用关系确定所述目标静态方法中的可删除静态方法;
删除模块,用于将所述可删除静态方法从所述待编译对象中删除;
修改模块,用于修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令,得到目标编译对象;
生成模块,用于对所述目标编译对象执行编译,生成安装包文件。
在一种可能的实现方式中,所述引用关系确定模块具体用于:
获取所述目标静态方法中的字节码指令,根据所述字节码指令确定所述目标静态方法引用的私有变量或方法;
遍历所述含有目标静态方法的类中的方法调用的字节码指令,根据所述字节码指令,确定引用所述目标静态方法的方法。
在一种可能的实现方式中,所述可删除静态方法确定模块具体用于:
判断所述目标静态方法是否满足第一预设条件、第二预设条件和第三预设条件中的任一条件,若所述目标静态方法均不满足所述第一预设条件、第二预设条件和第三预设条件,则确定所述目标静态方法为可删除静态方法;
其中,所述第一预设条件为目标静态方法对与其有引用关系的私有变量有写操作;
所述第二预设条件为目标静态方法中字节码指令的条数大于阈值;
所述第三预设条件为目标静态方法引用了从含有该目标静态方法的类的父类中继承的私有变量或方法,且含有该目标静态方法的类中不包含所述从父类中继承的私有变量或方法。
在一种可能的实现方式中,所述修改模块具体用于:
确定所述待编译对象中被可删除静态方法引用的私有变量或方法;
将被该可删除静态方法引用的私有变量或方法的访问控制权限改为包访问。
在一种可能的实现方式中,所述修改模块具体用于:
确定所述待编译对象中引用所述可删除静态方法的方法,作为目标方法;
若所述可删除静态方法引用的是私有变量,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的私有变量;
若所述可删除静态方法引用的是方法,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的方法。
第三方面,本发明实施例还提供了一种计算机设备,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的数据处理程序,以实现第一方面所述的生成软件安装包的方法。
第四方面,本发明实施例还提供了一种存储介质,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现第一方面所述的生成软件安装包的方法。
相比现有技术,本发明实施例提出的一种生成软件安装包的方法,确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类和外部类之间相互访问私有变量或方法,确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系,根据所述引用关系确定所述目标静态方法中的可删除静态方法,并将所述可删除静态方法从待编译对象中删除,从而减少了安装包的方法数,缩小了安装包的体积,为了保证减少方法数后安装包对应的应用程序还可以正常运行,修改待编译对象中与可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令,得到目标编译文件,对目标编译文件执行编译,生成安装包文件。通过该方案生成安装包时,即缩小了安装包的体积,又保证安装包对应的应用程序可以正常运行。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种生成软件安装包的方法的流程图;
图2为本发明实施例提供的一种生成软件安装包的装置的框图;
图3为本发明实施例提供的一种计算机设备框图;
图4为本发明实施例提供的一种生成软件安装包的方法的流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
在编译安装包时,在Java源码中,如果Java的内部类(包括匿名内部类)中访问到外部类的私有方法/变量时,或者外部类访问内部类的私有方法/变量时,经过Java编译处理之后,JVM虚拟机认为外部类和内部类是两个类,有独立的访问控制权限,编译器会为这些类生成额外的静态方法来访问私有变量/方法,命名规则为access$xxx方法(其中xxx为递增的数字),内部类或外部类通过调用access$xxx方法就可以实现对外部类或内部类中的私有变量或方法的访问,但是通过这种方式来实现内部类与外部类之间的相互访问无形中增加了安装包的方法数和包体积。如果应用程序的代码量非常大,通过上述方式来编译该应用程序的安装包时这样的场景是普遍存在的,这就导致编译的安装包中方法数过多,且包体积也相应变大。本发明实施例提出一种减少安装包方法数的方法,可以减少安装包的方法数,同时保证该安装包对应的应用程序可以正常运行。
如图1所示,为本发明实施例提供的一种生成软件安装包的方法的流程图,在执行该方法之前,需要先得到用于生成安装包的待编译对象,即Class文件,其中安装包的Class文件可以是通过现有的安装包的编译方法得到的,例如通过javac工具将java文件进行转换,转换后通常得到Class文件,本实施例提供的方法可以通过ASM(字节码处理工具)实现,利用ASM遍历用于生成安装包的所有的Class文件字节码,对Class文件中的内容进行针对性的修改,从而减少安装包的方法数,并保证安装包对应的应用程序可以正常运行,本方案的主要改进在于对Class文件的优化,在应用本实施例提供的方法时,可以通过自定义Gradle(项目自动化构建开源工具)插件,实现Transform接口,将本实施例的方法对应的程序插入到现有的安装包的编译流程中,具体的可以插入到得到Class文件之后,在将Class文件转换成dex文件之前。
如图1所示,本实施例提供的一种生成软件安装包的方法可以包括如下步骤:
S11.确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类与外部类之间相互访问私有变量或方法。
在一种可能的实现方式中,目标静态方法通常都在用于生成安装包的待编译对象中,即Class文件中,而且目标静态方法的格式通常都是已知的(例如access$xxx),所以在知道目标静态方法的情况下,只需遍历所有的Class文件即可确定出所有含有目标静态方法的类,其中类可以是内部类也可以是外部类。
S12.确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系。
目标静态方法通常与私有变量或方法通常存在下述两种引用关系:
第一种引用关系:目标静态方法引用了私有变量或方法。
第二种引用关系:目标静态方法被私有变量或方法引用。
在一种可能的实现方式中,目标静态方法由字节码指令组成的,字节码指令中包含了该目标静态方法所引用的私有变量或方法的信息,所以可以采用下述方式确定第一种引用关系:
获取所述目标静态方法中的字节码指令,根据所述字节码指令确定所述目标静态方法引用的私有变量或方法。
在一种可能的实现方式中,可以通过下述方式确定第二种引用关系:
遍历所述含有目标静态方法的类中的方法所调用的字节码指令,根据所述字节码指令,确定引用所述目标静态方法的方法。
S13.根据所述引用关系确定所述目标静态方法中的可删除静态方法。
其中可删除静态方法指的就是可以删除的静态方法。
本实施例的目的是减少安装包中的方法数,其采用的手段为删除可以删除的静态方法,而在删除可以删除的静态方法之前,需要先确定哪些静态方法是可删除静态方法。
S14.将所述可删除静态方法从所述待编译对象中删除。
将这些可删除静态方法删除可以减少安装包的方法数,从而缩小安装包的体积。
S15.修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量和方法的引用指令,得到目标编译对象。
其中,目标编译对象即为待编译对象删除了可删除静态方法,并对与可删除静态方法有引用关系的私有变量和方法的引用指令进行修改后得到的编译对象。
S14将S13确定的可删除静态方法删除掉,虽然减少了方法数,但由于这些可删除目标静态方法是用于实现内部类与外部类之间相互访问私有变量或方法的,所以将这些可删除静态方法删除后,可能会导致内部类和外部类之间无法访问,进而导致该最后生成的安装包对应的应用程序无法正常运行,所以为了避免应用程序无法正常运行这一问题,还需通过S15对与可删除静态方法有引用关系的私有变量或方法的引用指令进行修改,解除可删除静态方法与私有变量或方法之间的引用关系,从而保证即使删除可删除静态方法后,应用程序还可以正常运行。
S16.对所述目标编译对象执行编译,生成安装包文件。
待编译对象为Class文件,目标编译对象也是Class文件,因此对目标编译对象执行编译,即为执行将目标编译对象转换为dex文件,并将得到的dex文件生成安装包文件的编译过程。
本发明实施例提出的一种生成软件安装包的方法,确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类和外部类之间相互访问私有变量或方法,确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系,根据所述引用关系确定所述目标静态方法中的可删除静态方法,并将所述可删除静态方法从待编译对象中删除,从而减少了安装包的方法数,缩小了安装包的体积,为了保证减少方法数后安装包对应的应用程序还可以正常运行,修改待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令。该方案即减少了安装包的方法数,缩小了安装包的体积,又保证了生成的安装包对应的应用程序可以正常运行。
在上述实施例的基础上,S13可以通过依次判断所有的目标静态方法中的各目标静态方法是否满足预设的条件来确定可删除静态方法,具体的可以包括:
判断所述目标静态方法是否满足第一预设条件、第二预设条件和第三预设条件中的任一条件,若所述目标静态方法均不满足所述第一预设条件、第二预设条件和第三预设条件,则确定所述目标静态方法为可删除静态方法,若所述目标静态方法满足第一预设条件、第二预设条件和第三预设条件中的任一条件,则确定该目标静态方法不是可删除静态方法。
其中,所述第一预设条件可以为目标静态方法对与其有引用关系的私有变量有写操作。
所述第二预设条件可以为目标静态方法中字节码指令的条数大于阈值。
所述第三预设条件可以为目标静态方法引用了从含有该目标静态方法的类的父类中继承的私有变量或方法(访问控制权限为protected),且含有该目标静态方法的类中不包含所述从父类中继承的私有变量或方法。
本实施例通过预设条件来确定可删除静态方法,其中预设条件可以根据具体情况具体设定,该方法具有灵活,可用性强的优点。
在上述实施例的基础上,通过S12可知,私有变量或方法与可删除静态方法之间的引用关系可能为第一种引用关系或第二种引用关系。
针对与可删除静态方法存在第一种引用关系的私有变量或方法,S15可以通过下述来修改该私有变量或方法的访问控制权限:
将被可删除静态方法引用的私有变量或方法的访问控制权限改为包访问。
私有变量或方法的访问控制权限通常分为public、protected、private和default,其中,public一般称之为“公共的”,被其修饰的私有变量或方法不仅可以跨类访问,而且允许跨包(package)访问,private表示私有,私有的意思就是除了该私有变量或方法所在类中的成员可以访问之外,其所在类的子类不能访问,更不能允许跨包访问,protected介于public和private之间的一种访问修饰符,一般称之为“保护形”,被其修饰的私有变量或方法只能被其所在类本身的成员及子类访问,即使子类在不同的包中也可以访问,default包访问权限,只对同包的类具有访问的权限,外包的所有类都不能访问。
因为被目标静态方法引用的私有变量或方法的访问控制权限通常为private,也就是只允许被该私有变量或方法所在的类中的成员访问,而无法被其他类(除该私有变量或方法所在的类之外的类)访问,目标静态方法的作用就是实现该私有变量或方法可以被其他类访问,所以为了保证在引用该私有变量或方法的目标静态方法被删除后,该私有变量或方法还可以被其他类访问,就需对该私有变量或方法的访问控制权限进行修改,将其修改为包访问,也就是将该私有变量或方法的访问控制权限修改为default,这样即使引用该私有变量或方法的目标静态方法被删除后,该私有变量或方法还可以被其他类访问。
针对与可删除静态方法存在第二种引用关系的方法,S15可以通过下述来修改该方法的引用指令:
确定调用可删除静态方法的方法,作为目标方法,若所述可删除静态方法引用的是私有变量,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的私有变量(get Field),若所述可删除静态方法引用的是方法,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的方法(invoke Virtual)。
因为之前此类方法之所以引用目标静态方法,目的是间接访问目标静态方法引用的私用变量或方法,所以当目标静态方法被删除后,将此类方法的引用指令直接指向被删除的目标静态方法引用的私有变量或方法即可。
通过上述方式对与可删除静态方法存在引用关系的方法和/或变量的引用指令进行修改,保证了即使将可删除静态方法删除后,与其存在引用关系的方法和/或变量仍然有效,进一步保证了最后生成的安装包对应的应用程序可以正常运行。
一个具体的例子
如图4所述,本实施例提供的生成软件安装包的方法主要包含两趟扫描,第一趟扫描的目的是确定用于生成安装包的Class文件中可以删除的access$xxx方法,第二趟扫描的目的是根据可以删除的access$xxx方法进行一系列处理,从而减少安装包的方法数,具体的流程主要包括:
第一趟扫描:扫描遍历用于生成安装包的所有的Class文件,遍历收集Class文件中所有的私有方法、私有变量和access$xxx方法,判断access$xxx可否删除,将可以删除的access$xxx方法打上标签。
第二趟扫描:扫描所有需要处理的内部类或外部类,针对被可以删除的access$xxx方法访问的私有变量,将其的访问控制权限修改为包访问权限;针对被可以删除的access$xxx方法访问的私有方法,将其的访问控制权限修改为包访问权限;针对可以删除的access$xxx方法,将其删除;针对调用了外部类的可以删除的access$xxx方法的方法,将其的引用指令替换成getField或者invokeVirtual。
基于与上述方法相同的发明构思,本发明实施例还提供了一种用于实现上述方法的减少安装包方法数的装置,如图2所示,该装置可以包括:
类确定模块201,用于确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类与外部类之间相互访问私有变量或方法;
引用关系确定模块202,用于确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系;
可删除静态方法确定模块203,用于根据所述引用关系确定所述目标静态方法中的可删除静态方法;
删除模块204,用于将所述可删除静态方法从所述待编译对象中删除;
修改模块205,用于修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令,得到目标编译对象;
生成模块206,用于对所述目标编译对象执行编译,生成安装包文件。
在一种可能的实现方式中,所述引用关系确定模块202具体用于:
获取所述目标静态方法中的字节码指令,根据所述字节码指令确定所述目标静态方法引用的私有变量或方法;
遍历所述含有目标静态方法的类中的方法调用的字节码指令,根据所述字节码指令,确定引用所述目标静态方法的方法。
在一种可能的实现方式中,所述可删除静态方法确定模块203具体用于:
判断所述目标静态方法是否满足第一预设条件、第二预设条件和第三预设条件中的任一条件,若所述目标静态方法均不满足所述第一预设条件、第二预设条件和第三预设条件,则确定所述目标静态方法为可删除静态方法;
其中,所述第一预设条件为目标静态方法对与其有引用关系的私有变量有写操作;
所述第二预设条件为目标静态方法中字节码指令的条数大于阈值;
所述第三预设条件为目标静态方法引用了从含有该目标静态方法的类的父类中继承的私有变量或方法,且含有该目标静态方法的类中不包含所述从父类中继承的私有变量或方法。
在一种可能的实现方式中,所述修改模块205具体用于:
确定所述待编译对象中被可删除静态方法引用的私有变量或方法;
将被该可删除静态方法引用的私有变量或方法的访问控制权限改为包访问。
在一种可能的实现方式中,所述修改模块205具体用于:
确定所述待编译对象中引用所述可删除静态方法的方法,作为目标方法;
若所述可删除静态方法引用的是私有变量,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的私有变量;
若所述可删除静态方法引用的是方法,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的方法。
在本申请另一实施例中,还提供了一种计算机设备,如图3所示,包括处理器301、通信接口302、存储器303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信;
存储器303,用于存放计算机程序;
处理器301,用于执行存储器303上所存放的程序时,实现如下步骤:
确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类与外部类之间相互访问私有变量或方法;
确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系;
根据所述引用关系确定所述目标静态方法中的可删除静态方法;
将所述可删除静态方法从所述待编译对象中删除;
修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令,得到目标编译对象;
对所述目标编译对象执行编译,生成安装包文件。
上述电子设备提到的通信总线304可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。该通信总线304可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口302用于上述计算机设备与其他设备之间的通信。
存储器303可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器301可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本申请另一实施例中,还提供了一种存储介质,所述存储介质上存储有数据处理方法程序,所述数据处理方法程序被处理器执行时实现如下所述步骤:
确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类与外部类之间相互访问私有变量或方法;
确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系;
根据所述引用关系确定所述目标静态方法中的可删除静态方法;
将所述可删除静态方法从所述待编译对象中删除;
修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令,得到目标编译对象;
对所述目标编译对象执行编译,生成安装包文件。
本发明实施例在具体实现时,可以参阅上述各个实施例,具有相应的技术效果。
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(Programmable LogicDevice,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本文所述功能的单元来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种生成软件安装包的方法,其特征在于,包括:
确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类与外部类之间相互访问私有变量或方法;
确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系;
根据所述引用关系确定所述目标静态方法中的可删除静态方法;
将所述可删除静态方法从所述待编译对象中删除;
修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令,得到目标编译对象;
对所述目标编译对象执行编译,生成安装包文件。
2.根据权利要求1所述的方法,其特征在于,确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系,包括:
获取所述目标静态方法中的字节码指令,根据所述字节码指令确定所述目标静态方法引用的私有变量或方法;
遍历所述含有目标静态方法的类中的方法调用的字节码指令,根据所述字节码指令,确定引用所述目标静态方法的方法。
3.根据权利要求1所述的方法,其特征在于,根据所述引用关系确定所述目标静态方法中的可删除静态方法,包括:
判断所述目标静态方法是否满足第一预设条件、第二预设条件和第三预设条件中的任一条件,若所述目标静态方法均不满足所述第一预设条件、第二预设条件和第三预设条件,则确定所述目标静态方法为可删除静态方法;
其中,所述第一预设条件为目标静态方法对与其有引用关系的私有变量有写操作;
所述第二预设条件为目标静态方法中字节码指令的条数大于阈值;
所述第三预设条件为目标静态方法引用了从含有该目标静态方法的类的父类中继承的私有变量或方法,且含有该目标静态方法的类中不包含所述从父类中继承的私有变量或方法。
4.根据权利要求1所述的方法,其特征在于,修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限,包括:
确定所述待编译对象中被可删除静态方法引用的私有变量或方法;
将被该可删除静态方法引用的私有变量或方法的访问控制权限改为包访问。
5.根据权利要求1所述的方法,其特征在于,修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的引用指令,包括:
确定所述待编译对象中引用所述可删除静态方法的方法,作为目标方法;
若所述可删除静态方法引用的是私有变量,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的私有变量;
若所述可删除静态方法引用的是方法,则将所述目标方法调用的字节码指令改为访问被所述可删除静态方法引用的方法。
6.一种生成软件安装包的装置,其特征在于,包括:
类确定模块,用于确定用于生成安装包的待编译对象中含有目标静态方法的类,所述目标静态方法用于实现内部类与外部类之间相互访问私有变量或方法;
引用关系确定模块,用于确定所述目标静态方法与所述类中的私有变量或方法之间的引用关系;
可删除静态方法确定模块,用于根据所述引用关系确定所述目标静态方法中的可删除静态方法;
删除模块,用于将所述可删除静态方法从所述待编译对象中删除;
修改模块,用于修改所述待编译对象中与所述可删除静态方法有引用关系的私有变量或方法的访问控制权限或引用指令,得到目标编译对象;
生成模块,用于对所述目标编译对象执行编译,生成安装包文件。
7.根据权利要求6所述的装置,其特征在于,所述引用关系确定模块具体用于:
获取所述目标静态方法中的字节码指令,根据所述字节码指令确定所述目标静态方法引用的私有变量或方法;
遍历所述含有目标静态方法的类中的方法调用的字节码指令,根据所述字节码指令,确定引用所述目标静态方法的方法。
8.根据权利要求6所述的装置,其特征在于,所述可删除静态方法确定模块具体用于:
判断所述目标静态方法是否满足第一预设条件、第二预设条件和第三预设条件中的任一条件,若所述目标静态方法均不满足所述第一预设条件、第二预设条件和第三预设条件,则确定所述目标静态方法为可删除静态方法;
其中,所述第一预设条件为目标静态方法对与其有引用关系的私有变量有写操作;
所述第二预设条件为目标静态方法中字节码指令的条数大于阈值;
所述第三预设条件为目标静态方法引用了从含有该目标静态方法的类的父类中继承的私有变量或方法,且含有该目标静态方法的类中不包含所述从父类中继承的私有变量或方法。
9.一种计算机设备,其特征在于,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的数据处理程序,以实现权利要求1-6任一所述的生成软件安装包的方法。
10.一种存储介质,其特征在于,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现权利要求1-6任一所述的生成软件安装包的方法。
CN202010099095.2A 2020-02-18 2020-02-18 生成软件安装包的方法、装置、计算机设备及存储介质 Active CN111309334B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010099095.2A CN111309334B (zh) 2020-02-18 2020-02-18 生成软件安装包的方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010099095.2A CN111309334B (zh) 2020-02-18 2020-02-18 生成软件安装包的方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN111309334A true CN111309334A (zh) 2020-06-19
CN111309334B CN111309334B (zh) 2023-09-01

Family

ID=71149087

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010099095.2A Active CN111309334B (zh) 2020-02-18 2020-02-18 生成软件安装包的方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN111309334B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111782302A (zh) * 2020-07-13 2020-10-16 腾讯科技(深圳)有限公司 进程更新方法和装置、存储介质及电子设备
CN113126982A (zh) * 2021-04-23 2021-07-16 上海绚显科技有限公司 一种应用程序生成、运行方法及装置
CN116737670A (zh) * 2023-08-11 2023-09-12 英诺达(成都)电子科技有限公司 Upf文件的删除方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070089105A1 (en) * 2005-10-13 2007-04-19 Archambault Roch G Method and system for reducing memory reference overhead associated with threadprivate variables in parallel programs
US20110179402A1 (en) * 2010-01-15 2011-07-21 Sun Microsystems, Inc. Method and system for compiling a dynamically-typed method invocation in a statically-typed programming language
CN107168749A (zh) * 2017-05-31 2017-09-15 腾讯科技(深圳)有限公司 一种编译方法、装置、设备和计算机可读存储介质
CN108958849A (zh) * 2018-06-28 2018-12-07 武汉斗鱼网络科技有限公司 获取当前Activity对象的方法、装置、存储介质及移动终端
CN110609687A (zh) * 2019-04-12 2019-12-24 北京字节跳动网络技术有限公司 一种编译方法、装置、电子设备和存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070089105A1 (en) * 2005-10-13 2007-04-19 Archambault Roch G Method and system for reducing memory reference overhead associated with threadprivate variables in parallel programs
US20110179402A1 (en) * 2010-01-15 2011-07-21 Sun Microsystems, Inc. Method and system for compiling a dynamically-typed method invocation in a statically-typed programming language
CN107168749A (zh) * 2017-05-31 2017-09-15 腾讯科技(深圳)有限公司 一种编译方法、装置、设备和计算机可读存储介质
CN108958849A (zh) * 2018-06-28 2018-12-07 武汉斗鱼网络科技有限公司 获取当前Activity对象的方法、装置、存储介质及移动终端
CN110609687A (zh) * 2019-04-12 2019-12-24 北京字节跳动网络技术有限公司 一种编译方法、装置、电子设备和存储介质

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111782302A (zh) * 2020-07-13 2020-10-16 腾讯科技(深圳)有限公司 进程更新方法和装置、存储介质及电子设备
CN113126982A (zh) * 2021-04-23 2021-07-16 上海绚显科技有限公司 一种应用程序生成、运行方法及装置
CN113126982B (zh) * 2021-04-23 2024-01-19 上海绚显科技有限公司 一种应用程序生成、运行方法及装置
CN116737670A (zh) * 2023-08-11 2023-09-12 英诺达(成都)电子科技有限公司 Upf文件的删除方法、装置、设备及存储介质
CN116737670B (zh) * 2023-08-11 2023-11-17 英诺达(成都)电子科技有限公司 Upf文件的删除方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN111309334B (zh) 2023-09-01

Similar Documents

Publication Publication Date Title
CN111309334A (zh) 生成软件安装包的方法、装置、计算机设备及存储介质
EP3296906A1 (en) Method for protecting dex file from being decompiled in android system
CN104731625A (zh) 一种加载插件的方法、装置和移动终端
US9871800B2 (en) System and method for providing application security in a cloud computing environment
US9971582B2 (en) Selecting application wrapper logic components based on features of a mobile application to be wrapped
US10171502B2 (en) Managed applications
CA3167549A1 (en) Method and apparatus for authority control, computer device and storage medium
US11861364B2 (en) Circular shadow stack in audit mode
US20050172286A1 (en) Hosted code runtime protection
CN114707150A (zh) 一种恶意代码检测方法、装置、电子设备和存储介质
CN110609687A (zh) 一种编译方法、装置、电子设备和存储介质
US10223526B2 (en) Generating packages for managed applications
CN111045746B (zh) 代码扩展方法和框架
CN107636667B (zh) 在设备中创建多个工作空间的系统及方法
KR102323276B1 (ko) 애플리케이션 변환 방법 및 장치
CN112416418B (zh) 应用组件的生成方法、装置、计算机设备和可读存储介质
US11500981B2 (en) Shadow stack enforcement range for dynamic code
US6792596B2 (en) Method and system for protecting resource central programs
CN108628620B (zh) Pos应用开发的实现方法、装置、计算机设备和存储介质
CN113220314B (zh) App资源加载及apk生成方法、装置、设备及介质
CN110941443A (zh) 修改sdk中文件名的方法、装置及电子设备
CN108804083B (zh) 一种代码操作方法及装置
CN110569644B (zh) 调用请求的处理、功能函数的调用方法、装置及设备
CN110737911A (zh) 数据处理方法、装置和计算机可读存储介质
Tiwari et al. Automated Repair of Information Flow Security in Android Implicit Inter-App Communication

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