CN111176717A - 生成安装包的方法、装置及电子设备 - Google Patents
生成安装包的方法、装置及电子设备 Download PDFInfo
- Publication number
- CN111176717A CN111176717A CN201911327492.4A CN201911327492A CN111176717A CN 111176717 A CN111176717 A CN 111176717A CN 201911327492 A CN201911327492 A CN 201911327492A CN 111176717 A CN111176717 A CN 111176717A
- Authority
- CN
- China
- Prior art keywords
- file
- resource
- files
- class
- byte code
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种生成安装包的方法、装置及电子设备,涉及计算机技术领域。其中,该方法包括:获取根据应用程序的源码编译得到的字节码文件;从字节码文件中查找与资源索引类文件对应的复制文件;从字节码文件中删除查找到的复制文件;根据字节码文件中剩余的文件生成虚拟机可执行文件,得到应用程序的安装包。如此,可以从字节码文件中删除不需要使用的文件,减小最终得到的安装包大小。
Description
技术领域
本申请涉及计算机技术领域,更具体地,涉及一种生成安装包的方法、装置及电子设备。
背景技术
应用程序的安装包越大,下载安装包所需的流量越大,安装后得到的应用程序所占的空间越大,导致用户体验不佳,影响用户对应用程序的下载使用量,因此减小安装包非常必要。
发明内容
鉴于上述问题,本申请提出了一种生成安装包的方法、装置及电子设备,用以改善上述问题。
第一方面,本申请实施例提供了一种生成安装包的方法,包括:获取根据应用程序的源码编译得到的字节码文件;从属字节码文件查找与资源索引类文件对应的复制文件;从所述字节码文件中删除查找到的复制文件;根据所述字节码文件中剩余的文件生成虚拟机可执行文件,得到所述应用程序的安装包。
第二方面,本申请实施例提供了一种生成安装包的装置,包括:获取模块,用于获取根据应用程序的源码编译得到的字节码文件;查找模块,用于从所述字节码文件中查找与资源索引类文件对应的复制文件;删除模块,用于从所述字节码文件中删除查找到的复制文件;安装包生成模块,用于根据所述字节码文件中剩余的文件生成虚拟机可执行文件,得到所述应用程序的安装包。
第三方面,本申请实施例提供了一种电子设备,包括:一个或多个处理器;存储器;一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其中存储有程序代码,所述程序代码可被处理器调用执行上述的方法。
相对于现有技术,本申请提供的方案,在得到应用程序的字节码文件后,从中删除资源索引类文件的复制文件,再根据字节码文件中剩余的文件生成虚拟机可执行文件,以得到应用程序的安装包,可以减小最终得到的安装包大小。
本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了一种适用于本申请实施例的应用环境示意图。
图2示出了根据本申请一个实施例的生成安装包的方法流程图。
图3示出了根据本申请另一个实施例的生成安装包的方法流程图。
图4是本申请实施例的用于执行根据本申请实施例的生成安装包的方法的电子设备的框图。
图5示出了根据本申请实施例的生成安装包的装置的框图。
图6是本申请实施例的用于保存或者携带实现根据本申请实施例的生成安装包的方法的程序代码的存储单元。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
请参照图1,图1为一种适用于本申请实施例的应用环境示意图。电子设备100和用户终端200分别通过网络与服务器300通信。
本申请实施例中,电子设备100可以是服务器、个人计算机(Personal Computer)、笔记本电脑等任意可以提供编程开发环境的设备。服务器300可以是用于提供安装包下载服务的服务端设备。用户终端200可以是任意能够下载安装包并运行安装得到的应用程序的终端设备,例如可以是,但不限于,智能手机、平板电脑、个人计算机(PersonalComputer,PC)、笔记本电脑、电子书等。
详细地,电子设备100可以按照下文描述的方法生成安装包,以减小安装包的体积,并可以将生成的安装包上传至服务器300。服务器300可以发布电子设备100上传的安装包。用户终端200可以从服务器300下载应用程序的安装包,对下载的安装包进行安装以得到对应的应用程序,并运行得到的应用程序。
可以理解,电子设备100也可以作为服务端设备与服务器100组成集群,用以共同为用户提供安装包服务,换言之,电子设备100也可以是能够提供安装包下载服务的服务器。在此情况下,电子设备100在按照下文描述的方法生成安装包后,不必进行安装包的上传操作。
请参照图2,图2为本申请一实施例提供的一种生成安装包的方法的流程示意图,可以应用于图1所示的电子设备100。下面对该方法的步骤进行阐述。
步骤S110,获取根据应用程序的源码编译得到的字节码文件。
其中,字节码文件可以是动态编译得到的二进制的字节码文件。详细地,电子设备100可以对应用程序的源码进行打包,以形成安装包。例如,基于安卓(Android)平台的项目源码可以被打包成APK(Android application package,应用程序包),打包过程可以为:
对源码中的res资源文件进行打包,生成R.java文件、resources.arsc文件和res目录;对Android接口定义语言进行处理,生成对应的Java接口文件;将R.java文件、Java接口文件等动态编译(Java Compile)成所述二进制的字节码文件,例如以“class”为后缀的文件(即,类文件);对所有的类文件进行转换,得到虚拟机可执行(Dalvik Executable,dex)文件,如classes.dex文件;将上述过程得到的classes.dex文件、resources.arsc文件、res目录打包进APK中,将assets目录、AndroidManifest.xml。META-INF(元数据)目录、libs目录及经过编译的其他资源打包进入APK。META-INF目录下的文件为签名文件和manifest(清单)文件,AndroidManifest.xml文件中存放着应用程序的应用信息,libs目录下存放的是应用程序的C++层编译完成后的代码,例如动态链接库。
Android系统中,每一个应用程序会配置很多资源,终端设备200在运行应用程序时可以根据本设备的配置信息适配对应的资源,例如,可以根据屏幕的大小、方向、分辨率等适配所需的具体资源。基于此,给定一个相同的资源标识(例如,资源ID),在终端设备200的配置信息不同时,查找到的可能是不同的资源。查找过程可以通过Android资源管理框架实现,Android资源管理框架提供了AssetManager和Resources两个工具类。
其中,AssetManager类可以直接根据资源文件名称打开对应的资源文件,从而找到对应的资源。Resources类可以用于根据资源标识查找对应的资源文件名称,再通过AssetManager类找到对应的资源。上述的resources.arsc文件存储了资源标识、资源文件名称、资源文件路径等的对应关系,Resources类可以通过resources.arsc文件将资源标识转换为资源文件名称,所有资源标识将会被定义在R.java中。res目录下的文件为资源文件。assets目录下的文件也是资源文件,没有对应的资源标识,可以通过AssetManager类直接访问。
步骤S120,从字节码文件中查找到与资源索引类文件对应的复制文件。
步骤S130,从字节码文件中删除查找到的复制文件。
如上所述,在对源码中的res资源文件打包的过程中会生成R.java文件。R.java文件又称R文件,其中定义了源码中使用的每一项资源的资源名称和资源标识。
其中,根据主项目源码的res资源文件生成的R.java文件中,定义的每一项资源为静态常量,而根据子模块(Module)的资源文件生成的R.java中,定义的每一项资源均为静态变量。这是因为,对于Module使用的某一项资源A,如果根据主项目中已经存在同名的资源A,那么,当Module被添加到主项目之后,主项目会根据按照已经定义的资源A对应的资源标识,来获取Module所使用的资源A。换言之,Module使用的资源A会被主项目中的资源A覆盖。但实际上Module使用的资源A与主项目使用的资源A可能是不同的。
在此情况下,在一些语法规定需要使用常量的情况下,无法通过R.java中的资源名称来引用对应的资源标识。例如,一些实施方式中,需要通过注解的方式来自定义一些功能,而在注解的信息中引用的资源只能是常量,因此,通过注解的方式添加的自定义功能将无法通过Module的R.java使用资源。为了改善这一问题,通常会对包含静态变量的R.java进行复制,并在复制文件中的每一资源的定义后添加final字段,以将该资源改为静态常量,添加final字段的复制文件通常被命名为R2.java文件(又称“R2文件”)。如此,在注解的信息中,可以通过R2.java文件中的资源名称来引用对应的资源标识,从而可以符合注解的语法规定。
此外,注解处理器(Annotation Processing Tool,APT)在根据注解的信息生成代码时,会将对R2.java文件中资源名称的引用修改为对R2.java文件所对应的R.java文件中相同资源名称的引用,以避免后续运行出错。
本实施例中,每个R.java文件会被动态编译为R.class文件,每个R2.java文件会被动态编译为R2.class文件。任意一个R.class文件可以是步骤S120中的资源索引类文件,任意一个R.class文件对应的R2.class文件可以是步骤S120和步骤S130中的复制文件。
基于上述过程,在注解处理器根据注解的信息生成代码之后,R2.java文件将不再被使用,对应地,R2.class文件也不再会被使用,因此,可以删除至少一个R2.class文件,例如可以删除部分R2.class文件,也可以将全部R2.class文件删除。
步骤S140,根据字节码文件中剩余的文件生成虚拟机可执行文件,得到应用程序的安装包。
以上述基于Android平台的应用程序为例,电子设备在从动态编译到得到的文件中删除R2.class文件之后,可以根据剩余的文件生成dex文件,该dex文件例如可以为classes.dex文件,再将classes.dex文件与其他文件一起打包成APK。由于删除了不需要使用的R2.class文件,减小了最终得到的安装包的大小,降低了用户下载安装包所需的流量,以及减小了安装得到的应用程序所占的空间,从而改善用户体验,增加应用程序的下载使用量。
请参照图3,图3为本申请另一实施例提供的一种生成安装包的方法的流程示意图,该方法可以应用于图1中的电子设备100。下面对该方法的步骤进行阐述。
步骤S210,获取根据应用程序的源码编译得到的字节码文件。
步骤S220,从字节码文件中查找资源索引类文件,每个资源索引类文件包括相互对应的资源名称和资源标识。
步骤S210的详细实现流程与前述的步骤S110类似。详细地,参照前一实施例的描述,以基于Android平台的应用程序的APK打包过程为例,字节码文件是指动态编译得到的二进制的字节码文件,通常是以“class”为后缀的类文件,资源索引类文件可以是R.class文件。实施过程中,在将R.java文件、Java接口定义语言等动态编译成类文件后,可以获取编译得到的各类文件,并从获取的各类文件中查找R.class文件。
步骤S220可以有多种实现方式。一种可选的方式中,可以对动态编译处理后的所有文件进行遍历,从中查找以R为前缀、以class为后缀的文件,作为资源索引类文件。
此外,如前述实施例中所述的,一个应用程序可能包括多个Module,每个Module可以视作一个功能组件,每个Module具有一个对应的清单(manifest)文件,该清单文件中存在一package字段,package字段的值为该Module的R.class文件所在的jar包的包名。因此,另一种可选的方式中,可以获取应用程序中每个功能组件的清单文件,从获取的每个功能组件的清单文件中查找package字段,读取package字段的值,得到该功能组件对应的包名,遍历所述包名表征的文件,从中查找前缀为R、后缀为class的文件,作为资源索引类文件。如此,可以减少遍历的文件数量,提高查找资源索引类文件的效率。
步骤S230,从字节码文件中查找到与资源索引类文件对应的复制文件。
步骤S240,从字节码文件中删除查找到的复制文件。
其中,步骤S230-步骤S240的实现流程与前述的步骤S120-步骤S130的实现流程类似。详细地,本实施例中,步骤S220和步骤S230之间没有执行顺序的限制,两者可以按照一定顺序先后执行,也可以并行执行。
针对基于Android平台的应用程序,一种可选的实施方式中,为了提升查找复制文件(R2.class文件)的效率,可以在通过步骤S220查找到任一资源索引类文件(R.class文件)后,确定该资源索引类文件在所述字节码文件中所在的目录,并遍历该目录下的文件,查找以R2为前缀、以class为后缀的文件,查找到的文件即为复制文件。
步骤S250,通过设定的转换接口,遍历每个目标类文件,所述目标类文件为所述字节码文件中除资源索引类文件之外的类文件。
本实施例中,步骤S250在步骤S220之后执行,步骤S250与步骤S230、步骤S240之间没有严格的顺序限制。
以基于Android平台的应用程序为例,通常是采用构建工具gradle来实现字节码文件到虚拟机可执行文件的转换。本实施例中,设定的转换接口可以是TransformAPI。详细地,配置的TransformAPI的输入类型可以为类文件,作用域为整个工程,如此,电子设备100可以将应用程序的所有类文件输入到配置的TransformAPI中。配置的TransformAPI可以用于识别输入的每个类文件是否为资源索引类文件,若不是,则确定该类文件为目标类文件,并遍历所确定的每个目标类文件,按照步骤S260-步骤S280对当前遍历的目标类文件进行处理。
步骤S260,检测当前遍历的目标类文件是否引用任一资源索引类文件中的资源名称。若是,执行步骤S270,若否,返回步骤S260。
步骤S270,确定当前遍历的目标类文件中被引用的资源名称,从查找到的各资源索引类文件中确定与所述被引用的资源名称匹配的资源标识,并在当前遍历的目标类文件中将所述被引用的资源名称替换为所述匹配的资源标识。
步骤S280,删除所述字节码文件中的资源索引类文件。
本实施例中,目标类文件通常需要按照特定格式来引用资源索引类文件中的资源名称,例如通过形如“R.资源类.资源名称”的格式来引用。因而,电子设备100通过设定的转换接口,可以从当前遍历的目标类文件中查找是否存在符合特定格式的代码,例如是否存在“R.id.xx”、“R.style.xx”、“R.string.xx”、“R.drawable.xx”等格式的代码中的任意一个。若存在,则确定当前遍历的目标类文件引用了资源索引类文件中的资源名称,从而查找出当前遍历的目标类文件中引用的所有资源名称。若不存在,则可以返回执行步骤S260,即继续遍历下一目标类文件,直至遍历完所有目标类文件时结束处理。
本实施例中,在执行步骤S220之后,可以对查找到的各资源索引类文件中的资源名称与资源标识的对应关系进行保存。如此,针对从当前遍历的目标类文件中引用的每个资源名称,根据保存的对应关系,可以确定与该资源名称对应的资源标识,所确定的资源标识即为该资源名称匹配的资源标识,可以在当前遍历的目标类文件中将针对该资源名称的引用代码替换为对匹配的资源标识。例如,string资源类中的资源名称“app_name”与资源标识“0x123456”对应,一目标类文件中存在对资源名称“app_name”的引用代码“R.string.app_name”,则可以将该目标类文件中的引用代码“R.string.app_name”替换为资源标识“0x123456”。
在完成对所有目标类文件中的所有针对资源名称的引用代码的替换后,则可以不再需要队员的资源索引类文件,从而可以将资源索引类文件删除。具体地,可以在配置的TransformAPI的输出文件流中过滤掉(滤除)以R为前缀、以class为后缀的文件(即,资源索引类文件),从而实现对资源索引类文件的删除。
步骤S290,根据所述字节码文件中剩余的文件生成虚拟机可执行文件,得到所述应用程序的安装包。
其中,剩余的文件是指从字节码文件中删除资源索引类文件和复制文件后剩下的文件。
通过上述流程,可以删除无需使用的资源索引类文件的复制文件,并在将对资源索引类文件的引用代码替换为对应的常量值后,删除资源索引类文件,可以有效地减小生成的安装包的大小,减少用户下载安装包所需的流量,以及减少按照得到的应用程序在电子设备中占据的空间,从而改善用户体验。
进一步地,在通过步骤S220从字节码文件中查找到各资源索引类文件之后,可以从查找到的各资源索引类文件中获取相互对应的资源名称和资源标识,对于相互对应的资源名称和资源标识,可以以其中一者为键(key)、以另一者为值(value),形成一键值对(key-value),并将形成的键值对存储于跳跃链表中。示例性地,可以以资源名称为键,以该资源名称对应的资源标识为值。在此情况下,步骤S270中,从查找到的各资源索引类文件中确定与所述被引用的资源名称匹配的资源标识的步骤可以通过如下过程实现:从所述跳跃链表中查找与所述被引用的资源名称匹配的资源标识。
相较于通常采用的哈希表存储结构,从跳跃链表从查询数据的效率更高。进一步地,本实施例中,在将目标类文件中的被引用的资源名称与保存的对应关系中的资源名称匹配时,需要多次数据查询,因而通过跳跃链表可以大大提高匹配效率。
可选地,在实施上述步骤S220的过程中,电子设备100可以通过至少两个线程来并行获取各个Module的清单文件,其中,每个线程用于获取一部分Module的清单文件,并根据获取的清单文件找到对应的资源索引类文件,并从找到的资源索引类文件中获取资源名称和资源标识的对应关系,存储于跳跃链表中。此外,在实施上述的步骤S250-步骤S280的过程中,电子设备100可以通过至少两个线程并行地遍历各个目标类文件,其中,每个线程用于遍历一部分目标类文件,并按照步骤S260-步骤S280对当前遍历的目标类文件进行处理。通过多线程并行处理,可以提升处理效率。
考虑到除了上述的资源名称之外,应用程序的源码中还定义有一些字符串常量,以通过引用该字符串常量来使用对应的常量值,可选地,在执行步骤S290之前,本实施例提供的生成安装包的方法还可以包括以下步骤:
从字节码文件中查找字符串常量的定义信息;针对查找到的每个定义信息所定义的字符串常量,从字节码文件中查找该字符串常量,将查找到的该字符串常量替换为该字符串常量的定义信息中的常量值,并从字节码文件中删除该字符串常量的定义信息。
其中,字符串常量的定义信息用于将该字符串常量的值定义为某一具体的常量值,换言之,任意一个字符串常量的定义信息可以为一条包括该字符串常量和一常量值的数据记录。详细地,针对字节码文件中的每一所述数据记录,电子设备100可以获取所述数据记录中的字符串常量,并从字节码文件中查找该字符串常量,若查找到,将查找到的字符串常量替换为所述数据记录中的常量值,在完成字节码文件中所有的该字符串常量的替换后,可以删除该字符串常量的定义信息。如此,可以进一步减小生成的应用程序的安装包,改善用户体验。
可选地,可以配置本实施例提供的方法的运行阶段,以避免在debug(调试)阶段就将上述的资源索引类文件、资源索引类文件的复制文件等删除,从而避免在debug阶段影响编译速度,提高调试效率。
可选地,在上述流程的基础上,本实施例中的电子设备100在生成安装包的过程中,还可以通过其他方式来进一步减小安装包。以基于Android平台的应用程序为例,比如可以通过Android平台提供的lint工具对应用程序的整个项目工程进行扫描,以扫描出未被使用的资源文件,然后开启shrinkResource功能,以在打包过程中将未被使用的资源文件删除,从而可以减小最终打包得到的安装包。又比如,考虑到当应用程序随业务发展一段时间后,极有可能存在过时的代码,或是引入无用代码,因而可以删除这些代码及其对应的动态链接库(so库),从而减小应用程序的安装包。再比如,图片、视频等资源文件在安装包中所占体积比重较大,一方面可以将部分资源文件远程存储,当应用程序运行过程中需要使用该部分资源文件时,再从对应的存储位置获取;另一方面可以对存储于本地的资源文件进行压缩,例如图片资源可以通过TinyPNG、WebP等方式来进行压缩,从而可以减小安装包。
请参照图4,图4为本申请实施例提供的一种电子设备的结构框图。本申请实施例中的电子设备100可以包括一个或多个如下部件:处理器101、存储器102、以及一个或多个程序,其中一个或多个程序可以被存储在存储器102中并被配置为由一个或多个处理器101执行,一个或多个程序配置用于执行如上文的方法实施例描述的方法。
处理器101可以包括一个或多个处理核。处理器101利用各种接口和线路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器102内的指令、程序、代码集或指令集,通过运行或执行存储器102内的数据,执行电子设备100的各种功能和处理数据。可选地,处理器101可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种形式来实现。处理器101可集成中央处理器(Central ProcessingUnit,CPU)、图像处理器(Graphic Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器101中,单独通过一块通信芯片进行实现。
存储器102可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器102可用于存储指令、程序、代码、代码集或指令集。存储器102可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备100在使用中所创建的数据(比如跳跃链表)等。
可以理解,图1所示结构仅为示意,本申请实施例中的电子设备还可以包括比图1所示更多或更少的组件,本申请实施例对此没有限制。
请参照图5,图5为本申请实施例提供的一种生成安装包的装置的结构框图。本申请实施例中,生成安装包的装置500可以应用于电子设备100,从功能上划分,装置500可以包括:获取模块510、查找模块520、删除模块530以及安装包生成模块540。
其中,获取模块510用于获取根据应用程序的源码编译得到的字节码文件。
查找模块520用于从所述字节码文件中查找与资源索引类文件对应的复制文件。
删除模块530用于从所述字节码文件中删除查找到的复制文件。
安装包生成模块540用于根据所述字节码文件中剩余的文件生成虚拟机可执行文件,得到所述应用程序的安装包。
可选地,本实施例中,查找模块520还可以用于:
从所述字节码文件中查找资源索引类文件,每个资源索引类文件包括相互对应的资源名称和资源标识;通过设定的转换接口,遍历每个目标类文件,所述目标类文件为所述字节码文件中除资源索引类文件之外的类文件;检测当前遍历的目标类文件是否引用任一资源索引类文件中的资源名称,若是,确定当前遍历的目标类文件中被引用的资源名称,从查找到的各资源索引类文件中确定与所述被引用的资源名称匹配的资源标识,并在当前遍历的目标类文件中将所述被引用的资源名称替换为所述匹配的资源标识。
删除模块530还可以用于删除所述字节码中的资源索引类文件。
可选地,所述查找模块520还可以用于:在从所述字节码文件中查找资源索引类文件之后,从所述字节码文件中查找到的各资源索引类文件中获取相互对应的资源名称和资源标识,将相互对应的资源名称和资源标识形成键值对,并将形成的键值对存储于跳跃链表中。在此情况下,所述查找模块520从查找到的各资源索引类文件中确定与所述被引用的资源名称匹配的资源标识的方式可以为:从所述跳跃链表中查找与所述被引用的资源名称匹配的资源标识。
可选地,所述查找模块520从所述字节码文件中查找资源索引类文件的方式可以为:获取所述应用程序中每个功能组件的清单文件;从获取的每个功能组件的清单文件中,获取该功能组件对应的包名,遍历所述包名表征的文件,查找前缀为R、后缀为class的文件,作为资源索引类文件。
进一步地,所述查找模块520可以通过电子设备100的至少两个线程并行获取所述应用程序中各功能组件的清单文件。所述查找模块520还可以通过电子设备100的至少两个线程并行遍历所述字节码文件中的各目标类文件。
可选地,本申请实施例中,装置400还可以包括配置模块。
所述配置模块可以用于在所述查找模块520通过设定的转换接口遍历每个目标类文件之前,将所述设定的转换接口的输入类型配置为类文件,使所述电子设备将所述应用程序的类文件输入所述设定的转换接口;通过所述设定的转换接口识别输入的类文件是否为资源索引类文件,若不是,则将所述输入的类文件确定为目标类文件。
在此情况下,所述删除模块530可以通过如下方式来删除字节码文件中的资源索引类文件:从所述设定的转换接口的输出文件流中过滤掉资源索引类文件。
可选地,所述查找模块520从所述字节码文件中查找与资源索引类文件对应的复制文件的方式可以为:在从所述字节码文件中查找到任意一个资源索引类文件后,确定该资源索引类文件在所述字节码文件中所在的目录,遍历该目录下的文件,查找以R2为前缀、以class为后缀的文件;将查找到的文件确定为所述复制文件。
可选地,所述查找模块520还可以用于:从所述字节码文件中查找针对字符串常量的定义信息,所述定义信息用于将所述字符串常量定义为一常量值;针对查找到的每个定义信息所定义的字符串常量,从所述字节码文件中查找所述字符串常量;在所述字节码文件中将查找到的所述字符串常量替换为所述字符串常量的定义信息中的常量值。对应地,所述删除模块530还可以用于:从所述字节码文件中删除所述字符串常量的定义信息。
值得说明的是,本申请实施例提供的装置400可以作为插件集成不同应用程序的项目文件中,从而实现对该应用程序的安装包的减小。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,所显示或讨论的模块相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
请参考图6,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质600中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质600可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质600包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质600具有执行上述方法中的任何方法步骤的程序代码610的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码610可以例如以适当形式进行压缩。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (11)
1.一种生成安装包的方法,其特征在于,包括:
获取根据应用程序的源码编译得到的字节码文件;
从所述字节码文件中查找与资源索引类文件对应的复制文件;
从所述字节码文件中删除查找到的复制文件;
根据所述字节码文件中剩余的文件生成虚拟机可执行文件,得到所述应用程序的安装包。
2.根据权利要求1所述的方法,其特征在于,在所述根据所述字节码文件中剩余的文件生成虚拟机可执行文件之前,还包括:
从所述字节码文件中查找资源索引类文件,每个资源索引类文件包括相互对应的资源名称和资源标识;
通过设定的转换接口,遍历每个目标类文件,所述目标类文件为所述字节码文件中除资源索引类文件之外的类文件;
检测当前遍历的目标类文件是否引用任一资源索引类文件中的资源名称,若是,确定当前遍历的目标类文件中被引用的资源名称,从查找到的各资源索引类文件中确定与所述被引用的资源名称匹配的资源标识,并在当前遍历的目标类文件中将所述被引用的资源名称替换为所述匹配的资源标识;
删除所述字节码文件中的资源索引类文件。
3.根据权利要求2所述的方法,其特征在于,在所述从所述字节码文件中查找资源索引类文件之后,还包括:
从查找到的各资源索引类文件中获取相互对应的资源名称和资源标识,将相互对应的资源名称和资源标识形成键值对,并将形成的键值对存储于跳跃链表中;
所述从查找到的各资源索引类文件中确定与所述被引用的资源名称匹配的资源标识,包括:
从所述跳跃链表中查找与所述被引用的资源名称匹配的资源标识。
4.根据权利要求2所述的方法,其特征在于,所述从所述字节码文件中查找资源索引类文件,包括:
获取所述应用程序中每个功能组件的清单文件;
从获取的每个功能组件的清单文件中,获取该功能组件对应的包名,遍历所述包名表征的文件,查找前缀为R、后缀为class的文件,作为资源索引类文件。
5.根据权利要求4所述的方法,其特征在于,所述获取所述应用程序中每个功能组件的清单文件,包括:
通过至少两个线程并行获取所述应用程序中各功能组件的清单文件;
所述遍历所述目标类文件,包括:
通过至少两个线程并行遍历所述字节码文件中的各目标类文件。
6.根据权利要求2-5中任意一项所述的方法,其特征在于,应用于电子设备,在所述通过设定的转换接口,遍历每个目标类文件之前,所述方法还包括:
将所述设定的转换接口的输入类型配置为类文件,使所述电子设备将所述应用程序的类文件输入所述设定的转换接口;
通过所述设定的转换接口识别输入的类文件是否为资源索引类文件,若不是,则将所述输入的类文件确定为目标类文件;
所述删除所述字节码文件中的资源索引类文件,包括:
从所述设定的转换接口的输出文件流中过滤掉资源索引类文件。
7.根据权利要求1-5中任意一项所述的方法,其特征在于,所述从所述字节码文件中查找与资源索引类文件对应的复制文件,包括:
在从所述字节码文件中查找到任意一个资源索引类文件后,确定该资源索引类文件在所述字节码文件中所在的目录,遍历该目录下的文件,查找以R2为前缀、以class为后缀的文件;
将查找到的文件确定为所述复制文件。
8.根据权利要求1-5中任意一项所述的方法,其特征在于,在所述根据所述字节码文件中剩余的文件生成虚拟机可执行文件之前,还包括:
从所述字节码文件中查找针对字符串常量的定义信息,所述定义信息用于将所述字符串常量定义为一常量值;
针对查找到的每个定义信息所定义的字符串常量,从所述字节码文件中查找所述字符串常量,在所述字节码文件中将查找到的所述字符串常量替换为所述字符串常量的定义信息中的常量值;
从所述字节码文件中删除所述字符串常量的定义信息。
9.一种生成安装包的装置,其特征在于,包括:
获取模块,用于获取根据应用程序的源码编译得到的字节码文件;
查找模块,用于从所述字节码文件中查找与资源索引类文件对应的复制文件;
删除模块,用于从所述字节码文件中删除查找到的复制文件;
安装包生成模块,用于根据所述字节码文件中剩余的文件生成虚拟机可执行文件,得到所述应用程序的安装包。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器;
一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行如权利要求1-8中任意一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序代码,所述程序代码可被处理器调用执行如权利要求1-8中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911327492.4A CN111176717B (zh) | 2019-12-20 | 2019-12-20 | 生成安装包的方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911327492.4A CN111176717B (zh) | 2019-12-20 | 2019-12-20 | 生成安装包的方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111176717A true CN111176717A (zh) | 2020-05-19 |
CN111176717B CN111176717B (zh) | 2023-05-16 |
Family
ID=70657435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911327492.4A Active CN111176717B (zh) | 2019-12-20 | 2019-12-20 | 生成安装包的方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111176717B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112083928A (zh) * | 2020-08-31 | 2020-12-15 | 广州新视展投资咨询有限公司 | 应用程序安装包的构建方法、应用程序运行方法及装置 |
CN112148386A (zh) * | 2020-10-12 | 2020-12-29 | Oppo广东移动通信有限公司 | 一种应用加载方法、装置及计算机可读存储介质 |
CN112416418A (zh) * | 2020-08-13 | 2021-02-26 | 上海哔哩哔哩科技有限公司 | 应用组件的生成方法、装置、计算机设备和可读存储介质 |
CN113918164A (zh) * | 2021-10-09 | 2022-01-11 | 北京字节跳动网络技术有限公司 | 应用程序包的生成方法、装置、可读介质和电子设备 |
CN114579135A (zh) * | 2022-03-01 | 2022-06-03 | 北京字节跳动网络技术有限公司 | 一种安装包生成方法及装置 |
CN117454817A (zh) * | 2023-12-25 | 2024-01-26 | 芯能量集成电路(上海)有限公司 | 一种基于fpga的工程处理方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150331882A1 (en) * | 2013-01-30 | 2015-11-19 | Tencent Technology (Shenzhen) Co., Ltd. | Redundant file deletion method, apparatus and storage medium |
CN106599151A (zh) * | 2016-12-07 | 2017-04-26 | Tcl集团股份有限公司 | 一种Android工程无用资源并行清理的方法及系统 |
CN107783766A (zh) * | 2016-08-25 | 2018-03-09 | 腾讯科技(深圳)有限公司 | 对应用程序的文件进行清理的方法和装置 |
CN110321134A (zh) * | 2018-03-30 | 2019-10-11 | 深圳Tcl新技术有限公司 | 一种生成应用安装包的方法、存储介质以应用服务器 |
CN110442353A (zh) * | 2019-07-26 | 2019-11-12 | 北京奇艺世纪科技有限公司 | 一种安装包管理的方法、装置及电子设备 |
-
2019
- 2019-12-20 CN CN201911327492.4A patent/CN111176717B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150331882A1 (en) * | 2013-01-30 | 2015-11-19 | Tencent Technology (Shenzhen) Co., Ltd. | Redundant file deletion method, apparatus and storage medium |
CN107783766A (zh) * | 2016-08-25 | 2018-03-09 | 腾讯科技(深圳)有限公司 | 对应用程序的文件进行清理的方法和装置 |
CN106599151A (zh) * | 2016-12-07 | 2017-04-26 | Tcl集团股份有限公司 | 一种Android工程无用资源并行清理的方法及系统 |
CN110321134A (zh) * | 2018-03-30 | 2019-10-11 | 深圳Tcl新技术有限公司 | 一种生成应用安装包的方法、存储介质以应用服务器 |
CN110442353A (zh) * | 2019-07-26 | 2019-11-12 | 北京奇艺世纪科技有限公司 | 一种安装包管理的方法、装置及电子设备 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416418A (zh) * | 2020-08-13 | 2021-02-26 | 上海哔哩哔哩科技有限公司 | 应用组件的生成方法、装置、计算机设备和可读存储介质 |
CN112083928A (zh) * | 2020-08-31 | 2020-12-15 | 广州新视展投资咨询有限公司 | 应用程序安装包的构建方法、应用程序运行方法及装置 |
CN112148386A (zh) * | 2020-10-12 | 2020-12-29 | Oppo广东移动通信有限公司 | 一种应用加载方法、装置及计算机可读存储介质 |
CN113918164A (zh) * | 2021-10-09 | 2022-01-11 | 北京字节跳动网络技术有限公司 | 应用程序包的生成方法、装置、可读介质和电子设备 |
CN114579135A (zh) * | 2022-03-01 | 2022-06-03 | 北京字节跳动网络技术有限公司 | 一种安装包生成方法及装置 |
CN114579135B (zh) * | 2022-03-01 | 2023-09-05 | 抖音视界有限公司 | 一种安装包生成方法及装置 |
CN117454817A (zh) * | 2023-12-25 | 2024-01-26 | 芯能量集成电路(上海)有限公司 | 一种基于fpga的工程处理方法、装置、电子设备及存储介质 |
CN117454817B (zh) * | 2023-12-25 | 2024-04-12 | 芯能量集成电路(上海)有限公司 | 一种基于fpga的工程处理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111176717B (zh) | 2023-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111176717B (zh) | 生成安装包的方法、装置及电子设备 | |
US10990367B2 (en) | Application development method, tool, and device, and storage medium | |
US8863082B2 (en) | Transformational context-aware data source management | |
US11429365B2 (en) | Systems and methods for automated retrofitting of customized code objects | |
CN109491695A (zh) | 一种集成安卓应用的增量更新方法 | |
CN111309335B (zh) | 插件应用的编译方法、装置及计算机可读存储介质 | |
CN109976793B (zh) | 一种应用程序的运行方法、装置、设备和介质 | |
CN111880777A (zh) | 程序信息下发方法、装置、电子设备 | |
CN111359219B (zh) | 虚幻引擎的文件处理方法、装置、设备及存储介质 | |
US11474796B1 (en) | Build system for distributed applications | |
CN112769706B (zh) | 组件化路由方法及系统 | |
CN112395253A (zh) | 索引文件生成方法、终端设备、电子设备及介质 | |
CN110532016B (zh) | 版本管理方法、版本更新方法和版本管理系统 | |
CN112612502A (zh) | 补丁生成方法、装置、设备及存储介质 | |
CN112000334A (zh) | 页面开发方法、装置、服务器及存储介质 | |
CN115756451A (zh) | 一种多项目代码文件重用的方法、装置、设备、存储介质 | |
CN116934330A (zh) | 一种调用智能合约的方法及执行方法、计算机设备及存储介质 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN114879976A (zh) | 版本的环境部署方法、装置及电子设备 | |
CN117008920A (zh) | 引擎系统、请求处理方法、装置、计算机设备及存储介质 | |
CN114721709A (zh) | 程序包生成方法、装置、存储介质及计算机设备 | |
CN111273944B (zh) | 生成程序文件并上传至代码仓库的方法及装置 | |
Berglund | Gradle Beyond the Basics: Customizing Next-Generation Builds | |
CN110058876B (zh) | 扩展wireshark软件兼容性的方法、装置、服务器及存储介质 | |
CN116679912A (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 | ||
EE01 | Entry into force of recordation of patent licensing contract | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20200519 Assignee: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd. Assignor: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd. Contract record no.: X2021440000031 Denomination of invention: Method, device and electronic equipment for generating installation package License type: Common License Record date: 20210125 |
|
GR01 | Patent grant | ||
GR01 | Patent grant |