CN113900704A - 应用程序安装包的发布方法、装置、可读介质及电子设备 - Google Patents

应用程序安装包的发布方法、装置、可读介质及电子设备 Download PDF

Info

Publication number
CN113900704A
CN113900704A CN202111192574.XA CN202111192574A CN113900704A CN 113900704 A CN113900704 A CN 113900704A CN 202111192574 A CN202111192574 A CN 202111192574A CN 113900704 A CN113900704 A CN 113900704A
Authority
CN
China
Prior art keywords
code
module
dynamic
installation package
modules
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.)
Pending
Application number
CN202111192574.XA
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202111192574.XA priority Critical patent/CN113900704A/zh
Publication of CN113900704A publication Critical patent/CN113900704A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions

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

应用程序安装包的发布方法、装置、可读介质及电子设备
技术领域
本申请属于计算机技术领域,具体涉及一种应用程序安装包的发布方法、装置、可读介质以及电子设备。
背景技术
应用程序(Application,APP)在互联网世界中随处可见,用户要使用应用程序,在设备上安装应用程序安装包即可。随着互联网技术的发展,应用程序的规模也变得越来越大,并且,很多超大型应用程序需要同时在国内外市场运行。目前,国内外市场的应用程序开发模式有所不同,国外通常将一个超大型应用程序拆分为多个应用套件进行开发,使用Google Play进行多个应用套件APK的发布;国内对于超大型应用程序,通常按应用程序的功能模块进行模块化开发,然后将多个模块合并为应用程序的最终APK进行发布。在这种情况下,如果一款应用程序需要同时在国内外市场运行,这就需要开发人员根据发布方式分别编写不同的应用程序源代码来生成国内外两种不同的安装包。这样,不仅耗费大量的人力资源,而且开发效率低下,也不便于后期维护。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本申请的目的在于提供一种应用程序安装包的发布方法、装置、可读介质以及电子设备,以解决相关技术中,不同应用程序发布方式下需要编写不同的应用程序源代码来生成应用程序安装包的问题,至少可以提高应用程序的开发效率。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供一种应用程序安装包的发布方法,包括:
获取应用程序源代码,所述应用程序源代码包括至少两个代码模块,一个所述代码模块对应于应用程序的一个功能模块;
根据所述代码模块所对应的功能模块的安装方式对所述代码模块进行分类,得到基础代码模块和动态代码模块;
对所述至少两个代码模块进行资源配置,以确定各个代码模块对应的资源;
对分类得到的所有基础代码模块及所述所有基础代码模块对应的资源进行整合编译,得到基础安装包;对分类得到的各个动态代码模块及所述各个动态代码模块对应的资源分别进行编译,得到所述各个动态代码模块对应的动态安装包;
基于应用程序发布方式,根据所述基础安装包和所述各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布。
根据本申请实施例的一个方面,提供一种应用程序安装包的发布装置,包括:
代码获取模块,用于获取应用程序源代码,所述应用程序源代码包括至少两个代码模块,一个所述代码模块对应于应用程序的一个功能模块;
代码分类模块,用于根据所述代码模块所对应的功能模块的安装方式对所述代码模块进行分类,得到基础代码模块和动态代码模块;
资源配置模块,用于对所述至少两个代码模块进行资源配置,以确定各个代码模块对应的资源;
编译模块,用于对分类得到的所有基础代码模块及所述所有基础代码模块对应的资源进行整合编译,得到基础安装包;对分类得到的各个动态代码模块及所述各个动态代码模块对应的资源分别进行编译,得到所述各个动态代码模块对应的动态安装包;
发布模块,用于基于应用程序发布方式,根据所述基础安装包和所述各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布。
在本申请的一个实施例中,资源配置模块具体用于:
为所述代码模块配置资源名称和资源标识,以基于所述资源名称和所述资源标识确定所述代码模块对应的资源。
在本申请的一个实施例中,资源配置模块还用于:
根据所述代码模块对应的资源名称、资源标识以及所述代码模块与其他代码模块之间的依赖关系,生成所述代码模块的资源索引;
当存在资源名称相同的第一代码模块和第二代码模块时,将所述第一代码模块的资源标识移除,并将所述第一代码模块的资源索引继承所述第二代码模块的资源索引;其中,所述第一代码模块的类型为动态代码模块,所述第二代码模块的类型为基础代码模块。
在本申请的一个实施例中,所述装置还包括:
依赖配置模块,用于对所述各个代码模块进行依赖关系配置,其中,动态代码模块依赖于基础代码模块,各动态代码模块之间不能相互依赖。
在本申请的一个实施例中,所述应用程序发布方式包括第一发布方式,发布模块包括:
解包单元,用于基于所述第一发布方式,对所述基础安装包和所述各个动态代码模块对应的动态安装包进行解包,以得到至少两个代码包和至少两个资源包,其中,所述代码包与所述资源包一一对应;
代码包整合单元,用于将所述至少两个资源包整合为目标资源包,并将所述至少两个代码包整合为至少一个目标代码包,其中,所述目标代码包的数量小于所述代码包的数量;
第一发布单元,用于根据所述目标资源包和所述至少一个目标代码包形成所述应用程序安装包并进行发布。
在本申请的一个实施例中,所述代码包整合单元具体用于:
根据各代码包的执行顺序对所述至少两个代码包排序;
按照所述至少两个代码包的排列顺序,分别获取预设数量的代码包整合为一个目标代码包,得到至少一个目标代码包。
在本申请的一个实施例中,所述应用程序发布方式包括第二发布方式,基于应用程序发布方式,发布模块包括:
第二发布单元,用于基于所述第二发布方式,将所述基础安装包作为所述应用程序安装包发布,并将所述各个动态代码模块对应的动态安装包作为应用程序的动态组件发布。
根据本申请实施例的一个方面,提供一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如以上技术方案中的应用程序安装包的发布方法。
根据本申请实施例的一个方面,提供一种电子设备,该电子设备包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器被执行所述可执行指令使得所述电子设备执行如以上技术方案中的应用程序安装包的发布方法。
根据本申请实施例的一个方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行如以上技术方案中的应用程序安装包的发布方法。
在本申请实施例提供的技术方案中,应用程序源代码的一个代码模块对应一个功能模块,相当于对应用程序进行了模块化开发,使得应用程序源代码更加便于管理;根据功能模块的安装方式对代码模块进行分类,然后对不同类型的代码模块进行不同方式的编译,最后应用程序安装包包括一个基础安装包和多个动态安装包,这样可以实现多个代码模块的并行编译,加快编译速度;根据不同的应用程序发布方式形成最终的应用程序安装包,使得在不同应用程序发布方式下的应用程序安装包可以具备相同的应用程序源代码,无需开发人员根据不同应用程序发布方式分别编写应用程序源代码,减少了开发人员的工作量,极大地提高了开发效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性地示出了应用本申请技术方案的示例性系统架构框图。
图2示意性地示出了本申请一个实施例提供的应用程序安装包的发布方法的流程图。
图3示意性地示出了本申请一个实施例提供的第一发布方式的发布流程图。
图4A示意性地示出了分层依赖结构的App架构示意图。
图4B示意性地示出了分组重构后的App架构示意图。
图5示意性地示出了实现本申请技术方案的编译过程的系统架构图。
图6示意性地示出了本申请实施例提供的编译过程的示意图。
图7示意性地示出了应用本申请技术方案的系统架构图。
图8示意性地示出了本申请4种发布方式的综合系统架构图。
图9示意性地示出了本申请实施例提供的应用程序安装包的发布装置的结构框图。
图10示意性示出了适于用来实现本申请实施例的电子设备的计算机系统结构框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
图1示意性地示出了应用本申请技术方案的示例性系统架构框图。
如图1所示,系统架构100可以包括终端设备110、网络120和服务器130。终端设备110可以包括但不限于智能手机、平板电脑、笔记本电脑、台式电脑、智能语音交互设备、智能家电、车载终端等。服务器130可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。网络120可以是能够在终端设备110和服务器130之间提供通信链路的各种连接类型的通信介质,例如可以是有线通信链路或者无线通信链路。
根据实现需要,本申请实施例中的系统架构可以具有任意数目的终端设备、网络和服务器。例如,服务器130可以是由多个服务器设备组成的服务器群组。另外,本申请实施例提供的技术方案可以应用于终端设备110,也可以应用于服务器130,或者可以由终端设备110和服务器130共同实施,本申请对此不做特殊限定。
举例而言,开发人员通过终端设备110编写应用程序源代码,该应用程序源代码包括至少两个代码模块,一个代码模块对应于应用程序的一个功能模块。终端设备110将应用程序源代码发送至服务器130,服务器130获取应用程序源代码后,根据代码模块所对应的功能模块的安装方式对代码模块进行分类,得到基础代码模块和动态代码模块;再对至少两个代码模块进行资源配置,以确定各个代码模块对应的资源;然后对分类得到的所有基础代码模块及所有基础代码模块对应的资源进行整合编译,得到基础安装包;对分类得到的各个动态代码模块及各个动态代码模块对应的资源分别进行编译,得到各个动态代码模块对应的动态安装包;最后基于应用程序发布方式,根据基础安装包和各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布。
在本申请的一个实施例中,服务器130在发布应用程序安装包之后,用户可以通过终端设备110下载和使用该应用程序安装包。
在本申请的一个实施例中,本申请实施例提供的应用程序安装包的发布方法也可以由终端设备110执行,相应地,应用程序安装包的发布装置也可以设置于终端设备110中,本示例性实施例中对此不做特殊限定。
下面结合具体实施方式对本申请提供的应用程序安装包的发布方法做出详细说明。
图2示意性地示出了本申请一个实施例提供的应用程序安装包的发布方法的流程图,该方法可以通过服务器实现,如图1所示的服务器130;也可以通过终端设备实现,如图1所示的终端设备110。如图2所示,本申请实施例提供的应用程序安装包的发布方法包括步骤210至步骤250,具体如下:
步骤210、获取应用程序源代码,应用程序源代码包括至少两个代码模块,一个代码模块对应于应用程序的一个功能模块。
具体的,应用程序源代码是开发人员使用开发工具所支持的语言(通常为高级语言,如c++、Java等语言)编写出来的,能够实现应用程序的规定功能的计算机语言指令。在本申请实施例中,采用模块化开发的方式,根据应用程序源代码所需的功能模块进行代码编写,使得应用程序原代码由至少两个代码模块组成,一个代码模块对应于应用程序的一个功能模块,也即,一个代码模块的计算机语言指令被执行时,可以实现应用程序的一种功能。应用程序的功能如注册、登录、搜索、信息接收、信息发送、流程审批、备忘录、云备份等等。
在本申请的一个实施例中,应用程序源代码包括的至少两个代码模块可以由不同的开发人员同时进行编写得到。
步骤220、根据代码模块所对应的功能模块的安装方式对代码模块进行分类,得到基础代码模块和动态代码模块。
具体的,一个应用程序通常具备多个功能模块,有些功能模块是应用程序为了实现其功能所必须安装的,而有些功能模块是可以让用户根据自身需求进行选择性安装的。这种必须安装的功能模块的安装方式为首次安装,可选择性安装的功能模块的安装方式为按需安装。根据功能模块的安装方式,对代码模块进行分类,使应用程序源代码的至少两个代码模块分为两类:基础代码模块和动态代码模块。
在本申请的一个实施例中,对代码模块进行分类的方式为:若功能模块的安装方式为首次安装,则将该功能模块对应的代码模块分类为基础代码模块;若功能模块的安装方式为按需安装,则将该功能模块对应的代码模块分类为动态代码模块。例如,注册、登录、搜索、信息接收、信息发送等功能均为应用程序必须安装的,其安装方式为首次安装,则将对应的代码模块分类为基础代码模块。流程审批、备忘录、云备份等功能是用户根据自身需求安装的,其安装方式为按需安装,则将对应的代码模块分类为动态代码模块。
在本申请的一个实施例中,开发人员在编写好应用程序源代码之后,可以根据各功能模块的安装方式对对应的代码模块设置安装标识,在对代码模块进行分类时,即可根据安装标识对代码模块进行分类。例如,首次安装对应的安装标识设为0,按需安装对应的安装标识设为1。
步骤230、对至少两个代码模块进行资源配置,以确定各个代码模块对应的资源。
具体的,资源的具体内容就是可以在屏幕上绘制的东西的文件、类的布局文件或可以在应用程序中访问的值,例如字符串、彩色十六进制值、图片、页面布局等。
在本申请的一个实施例中,对代码模块进行资源配置的具体过程包括:为代码模块配置资源名称和资源标识,以基于资源名称和资源标识确定代码模块对应的资源。
具体的,资源可以通过资源名称和资源标识来表示,资源标识也就是资源ID,其通常用于指示资源的存储位置。当配置了资源名称和资源标识后,将代码模块的资源存储到资本标识所指示的位置,最终生成res(resource)文件,该res文件的具体内容即代表代码模块对应的资源。
在本申请的一个实施例中,代码模块对应的资源还包括资源索引,资源索引用于查找资源。在确定代码模块对应的资源之后,还包括:根据代码模块对应的资源名称、资源标识以及代码模块与其他代码模块之间的依赖关系,生成代码模块的资源索引。
具体的,两个代码模块之间的依赖关系相当于两个代码模块之间的逻辑关系,当两个代码模块之间存在依赖关系,表示其中一个代码模块的运行会变更将会影响到另一个代码模块。代码模块的资源索引根据代码模块对应的资源名称、资源标识以及该代码模块与其他代码模块之间的依赖关系自动生成,资源索引以R.java文件的形式存在。
在本申请的一个实施例中,为各代码模块分配资源名称时可能存在重复,为了避免这种情况,在生成资源索引的过程中,当存在资源名称相同的第一代码模块和第二代码模块时,将第一代码模块的资源标识移除,并将第一代码模块的资源索引继承第二代码模块的资源索引;其中,第一代码模块的类型为动态代码模块,第二代码模块的类型为基础代码模块。
具体的,根据前述步骤对代码模块的分类,代码模块的类型包括动态代码模块和基础代码模块,在进行资源配置时,动态代码模块与基础代码模块之间可能存在资源名称相同当资源标识不同的情况。当一个动态代码模块对应的资源名称与一个基础代码模块对应的资源名称相同时,说明二者引用了相同的资源,为了避免重复,将该动态代码模块对应的资源标识移除,然后将动态代码模块对应的资源索引继承基础代码模块的资源索引,如此,可以保证动态代码模块也具备正确的资源索引。
在本申请的一个实施例中,由于生成资源索引需要确定各代码模块之间的依赖关系,因此,在进行资源配置之前,还包括:对各个代码模块进行依赖关系配置,其中,动态代码模块依赖于基础代码模块,各动态代码模块之间不能相互依赖。也即,动态代码模块应依赖于基础代码模块,而不能依赖于其他动态代码模块,并且,基础代码模块不能反依赖于动态代码模块。同时,各代码模块的之间的依赖关系符合分层依赖结构,该分成依赖结构表现为:app/module/api/library。
示例性的,如图4A所示,图4A示出了分层依赖结构的App架构示意图。library代表库,库是一组可以单独与应用程序进行编译时(compile time)或运行时(runtime)链接的二进制可重定位的目标码文件,其中,library1、library2和library3是相同的库模块,采用了基础库模块复用的方式,编号仅用于与其他编号相同的结构对应。api(ApplicationProgramming Interface,应用程序接口)代表接口,接口是预先定义的一组函数或程序,其中,api1、api2和api3表示三组不同的接口。module代表具有特定功能的代码模块,module1、module2和module3表示三个不同的模块。app代表应用程序的基础功能模块。
在配置了分层依赖关系之后,将module、api和library进行分组重构,重构后的App架构示意图如图4B所示。Feature1、Feature2和Feature3即为本申请实施例的动态代码模块,Base为本申请实施例的基础代码模块。0x7fTTNNNN为基础代码模块Base的资源标识,0x7eTTNNNN、0x7dTTNNNN和0x7cTTNNNN分别为动态代码模块Feature1、Feature2和Feature3对应的资源标识。一种分组重构方式为:library1、api1和module1重构为动态代码模块Feature1,library2、api2和module2重构为动态代码模块Feature2,library3、api3和module3重构为动态代码模块Feature3,最后,app代表应用程序的基础功能模块作为基础代码模块Base。
步骤240、对分类得到的所有基础代码模块及所有基础代码模块对应的资源进行整合编译,得到基础安装包;对分类得到的各个动态代码模块及各个动态代码模块对应的资源分别进行编译,得到各个动态代码模块对应的动态安装包。
具体的,编译就是将用高级语言编写的源代码转换为由计算机可以识别的二进制语言所构成的目标代码的过程,编译所得产物为安装包(Android Package,APK),计算机通过运行APK内的目标代码,可实现对应源代码所表示的功能。
在本申请实施例中,对分类得到的所有基础代码模块及所有基础代码模块对应的资源进行整合编译,得到基础安装包(base_apk),也就是所有的基础代码模块形成一个基础安装包。对分类得到的各个动态代码模块及各个动态代码模块对应的资源分别进行编译,得到各个动态代码模块对应的动态安装包,也就是将一个动态代码模块形成一个动态安装包(feature_apk)。如此,经过编译后,最终可以得到一个基础安装包和多个动态安装包。
在本申请的一个实施例中,各个动态代码模块及各个动态代码模块对应的资源的编译为并行编译,并行编译是指各个动态代码模块的编译是相互独立且同时进行的。可通过分布式的构建机集群对各个动态代码模块进行并行编译,构建机是用来构建应用的专用机器,又称为构建服务器。并行编译可以加快编译速度,提高编译效率。
示例性的,图5示出了实现本申请技术方案的编译过程的系统架构图。如图5所示,base表示基础代码模块511,m_account、m_msg等用以表示不同的动态代码模块521,base.apk表示基础安装包512,m_account.apk、m_msg.apk等用以表示不同的动态安装包522。
在图5所示系统架构中,不同的用户可在自己的工作区(WxWork)独立开发基础代码模块511或动态代码模块521。在进行编译时,一方面,可以直接采用本地编译的方式将动态代码模块521编译为对应的动态安装包522;另一方面,为了加快编译速度,可以采用远程流水线编译的方式,将多个代码模块同时编译生成对应的安装包,例如,base编译得到base.apk,m_account编译得到m_account.apk,m_msg编译得到m_msg.apk。远程流水线编译是使用多个构建机组成的分布式构建机群同时编译多个代码包。可选的,流水线编译也可以是将多个代码包按照排列顺序依次编译,这种编译方式适用于代码包数量较少的情况。
在编译得到各安装包之后,即可生成对应的应用程序安装包进行发布。通过Google Play可以实现多apk发布方式,在Google Play之外的地方,要实现多apk发布方式,则需要采用adb install-multiple进行调试,如图5所示。安装包发布之后,终端设备530即可下载安装apk,使用该应用程序。
在本申请的一个实施例中,由于各动态代码模块可以并行编译,当有部分动态安装包的内容需要进行变更,则只需要关注变更的动态安装包并对其进行重新编译即可,无需对所有的动态安装包进行重编译。如此,可以加速变更配置,提高变更效率。
在本申请的一个实施例中,基础代码模块与动态代码模块采用不同的编译步骤,图6示出了本申请实施例提供的编译过程的示意图。如图6所示,编译包括三大部分:模块依赖冲突、Manifest合并错误和代码资源编译错误。对于模块依赖冲突,是指编译过程中可能出现的各模块的依赖关系发生冲突的情况,此时基础代码模块Base采用步骤1和步骤3解决该问题,动态代码模块Dynamic Feature采用步骤2解决该问题。步骤1是指生成debug特征依赖(generateDebugFeatureTransitiveDeps),步骤2是指检查debug库(checkDebugLibraries),步骤3与步骤1相同。上述步骤1-3可以通过Gradle工具进行冲突策略管理。
对于Manifest合并错误,基础代码模块Base采用步骤5和步骤6解决该问题,动态代码模块Dynamic Feature采用步骤4解决该问题。步骤4是指合并debug资源(mergeDebugResources),步骤5与步骤4相同,步骤6是指处理debug资源(processDebugResources)。上述步骤4-6可过滤Manifest合并配置,在符合系统运行规则的前提下跳过bundle编译中的合并错误(如重复资源、无效资源等)。
对于代码资源编译错误,基础代码模块Base采用步骤7和步骤8解决该问题,动态代码模块Dynamic Feature采用步骤9解决该问题。步骤7是指处理debug资源(processDebugResources),步骤8是指通过budndle工具处理debug类(budndleDebugClasses),步骤9是指Java和Javac中的编译debug(compileDebugJavaWithJavac)。步骤250、基于应用程序发布方式,根据基础安装包和各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布。
具体的,应用程序发布方式有多种,是可选的。当应用程序发布方式不同,最终得到的应用程序安装包也不相同。
在本申请实施例提供的技术方案中,应用程序源代码的一个代码模块对应一个功能模块,相当于对应用程序进行了模块化开发,使得应用程序源代码更加便于管理;根据功能模块的安装方式对代码模块进行分类,然后对不同类型的代码模块进行不同方式的编译,最后应用程序安装包包括一个基础安装包和多个动态安装包,这样可以实现多个代码模块的并行编译,加快编译速度;根据不同的应用程序发布方式形成最终的应用程序安装包,使得在不同应用程序发布方式下的应用程序安装包可以具备相同的应用程序源代码,无需开发人员根据不同应用程序发布方式分别编写应用程序源代码,减少了开发人员的工作量,极大地提高了开发效率。在本申请的一个实施例中,若应用程序发布方式为第一发布方式,则应用程序安装包的发布过程如图3所示,包括步骤310至步骤330,具体为:
步骤310、基于第一发布方式,对基础安装包和各个动态代码模块对应的动态安装包进行解包,以得到至少两个代码包和至少两个资源包,其中,代码包与资源包一一对应。
具体的,第一发布方式为国内发布,即应用程序需要在国内上线。此时先对基础安装包和各个动态安装包进行解包处理,一个安装包(基础安装包和动态安装包统称为安装包)解包可以得到一个代码包(Java包)和一个资源包(res包)。基础安装包解包得到一个基础代码包,一个动态安装包解包得到一个动态代码包。
步骤320、将至少两个资源包整合为目标资源包,并将至少两个代码包整合为至少一个目标代码包,其中,目标代码包的数量小于代码包的数量。
具体的,安装包解包后,将所有的资源包整合为一个目标资源包,将至少两个代码包按照一定的规律整合为至少一个目标代码包,一个目标代码包应包括多个代码包。可见,目标代码包的大小应大于代码包的大小,目标代码包的数量小于代码包的数量。
在本申请的一个实施例中,代码包的整合过程为:根据各代码包的执行顺序对至少两个代码包排序;按照至少两个代码包的排列顺序,分别获取预设数量的代码包整合为一个目标代码包,得到至少一个目标代码包。
具体的,将所有代码包按照代码执行的先后顺序进行排序,然后根据代码包的排列顺序,分别获取预设数量的代码包整合为一个目标代码包。一个目标代码包具体包括多少代码包,需要根据实际需要的目标代码包的大小来确定,即目标代码包的大小是可以预先确定的。
示例性的,一共有50个代码包,假设这50个代码包按照代码执行先后顺序排序后,依次编号1、2、3……50。若一个目标代码包可以包含10个代码包,则将编号1~10的代码包整合为一个目标代码包,将编号11~20的代码包整合为一个目标代码包,将编号21~30的代码包整合为一个目标代码包,将编号31~40的代码包整合为一个目标代码包,将编号41~50的代码包整合为一个目标代码包。最终可以得到5个目标代码包。
步骤330、根据目标资源包和至少一个目标代码包形成应用程序安装包并进行发布。
具体的,得到目标资源包和目标代码包之后,基于该目标资源包和至少一个目标代码包形成最终的应用程序安装包,也即,最终形成一个APK。发布该APK,也就是以第一发布方式发布应用程序安装包。在这种发布方式下,当通过终端设备运行该应用程序安装包时,终端设备仅需加载数量较少的目标代码包即可,而非加载数据较多的代码包,例如,终端设备仅需加载5个目标代码包而非50个代码包。这样极大地减少了代码包的加载数量,提高应用程序安装包运行时的加载速度。
在本申请的一个实施例中,若应用程序发布方式为第二发布方式,该第二发布方式为国外发布方式,即应用程序需要在国外上线,此时应用程序安装包的发布过程为:基于第二发布方式,将基础安装包作为应用程序安装包发布,并将各个动态代码模块对应的动态安装包作为应用程序的动态组件发布。
具体的,在国外发布方式下,基础安装包和动态安装包分开发布,基础安装包作为应用程序安装包发布,动态安装包作为应用程序的动态组件发布,基础安装包和动态安装包可以通过Google Play进行发布。这种发布方式可以减少用户侧下载的应用程序安装包的大小,用户若要使用该应用程序,首先下载基础安装包进行安装,然后根据自身需要有选择性地下载动态安装包进行安装。这样,用户不必一次下载应用程序的所有安装包,故而减少了用户侧下载的应用程序安装包的大小。
在本申请的一个实施例中,在得到基础安装包和动态安装包之后,还可以进行debug开发。在debug开发模式下,由基础安装包和动态安装包组成的多个安装包中,一个安装包可以快速调起其余所有安装包的功能,实现了快速联调。
示例性的,图7示出了应用本申请技术方案的系统架构图。如图7所示,本申请技术方案可以包括本地构建和远程构建两个部分,其中,远程构建包括基础安装包(Base APK)发布和动态安装包(Feature APK)发布。
如图7所示,本地构建包括版本控制、配置、编译和部署四个步骤。版本控制步骤包括拉取代码(git checkout)、同步元数据(rsync.moudule_metadata)和版本比较(gitdiff)。配置步骤包括模块管理(local.group)、加速配置(settings.gradle.kit)、依赖管理(deps.json)、maven重定向(library>.aar,featur>.apk)和base固定R(aapt2-stable-ids)。编译步骤包括base加速(build-cache)、base依赖检查阻断(checkDebugLibraries)、base预分配和PP包号段(generateDebugFeatureMetadata)、base manifest阻断(processDebugManifest)、base non-final R处理(processDebugReasources)、feature缓存同步(maven resalve)和并行编译优化步骤(assembelDebugfeature),其中,并行编译优化步骤包括feature资源&R处理(processDebugReasources)、feature依赖优化(compileOnlybotinc/javac)和feature增量优化。部署步骤包括增量diff(adb shell pmpath)、增量安装(adb install compile)和启动检测(launchintent)。
继续参考图7,基础安装包(Base APK)发布包括版本控制、预编译和预分配。其中,版本控制包括拉取代码(git clone)、同步元数据(rsync.moudule_metadata)、依赖比较(git gradle configuration.incoming)和编排feature子流水线任务。预编译包括base同步和固定R、固定R缓存包(r-stable-ids.txt maven-publishing)、资源包(resources-debug.ap_-R.java processDebugResources)和代码包(classes.jarbundleDEbugClasses)。预分配包括代码commit、maven base缓存GAV和PP包号段。
继续参考图7,动态安装包(Feature APK)发布包括预置、并行编译和发布。预置包括拉取代码、指定版本和解压base缓存。并行编译包括feature构建bundle.zip(bundleDebug)和feature构建APK(assembleDebug)。发布包括base合并.aab(bundleDebug)、feature缓存优化(.apk maven-publishing)和更新元数据(push.moudule_metadata)。
示例性的,图8示出了本申请4种发布方式的综合系统架构图。如图8所示,本申请的4种发布方式为:国内发布、Debug开发、海外发布(即国外发布)和合作开发。
如图8所示,国内发布的架构包括:repo、研发流程、build.apk、应用商店和国内用户。repo是Android为了方便管理多个git库而开发的Python脚本。研发流程用于执行本申请实施例提供的应用程序安装包的发布方法。基本申请的技术方案,得到应用程序安装包,通过应用商店发布,从而达到国内用户。
继续参考图8,Debug开发的架构包括:repo、研发流程、build.apk、cache/.apk、adb install-multiple和企业微信开发。Debug开发主要是为了调试通过本申请技术方案得到的应用程序安装包。
继续参考图8,海外发布(即国外发布)的架构包括:repo、研发流程、cache/.aab、Google Play和海外用户。海外发布与国内发布相类似,不同处在于,海外发布最后通过Google Play发布至海外用户。
继续参考图8,合作开发的架构包括内部团队开发和外部团队开发,内部团队开发包括cache/.aar、研发流程、build/.json、预分配模块和cache/.aab。外部团队开发包括第三方repo、maven-publishing、bundletool、build/.apks、Andriod Studio和虚拟模块,该虚拟模块包括占位feature、三方lib、空base和外部aab构建。预分配模块用于为虚拟模块预先分配依赖接口、对外接口、预分配资源号段以及对应包名和模块名。应当注意,尽管在附图中以特定顺序描述了本申请中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的应用程序安装包的发布方法。图9示意性地示出了本申请实施例提供的应用程序安装包的发布装置的结构框图。如图9所示,本申请实施例提供的应用程序安装包的发布装置包括:
代码获取模块910,用于获取应用程序源代码,所述应用程序源代码包括至少两个代码模块,一个所述代码模块对应于应用程序的一个功能模块;
代码分类模块920,用于根据所述代码模块所对应的功能模块的安装方式对所述代码模块进行分类,得到基础代码模块和动态代码模块;
资源配置模块930,用于对所述至少两个代码模块进行资源配置,以确定各个代码模块对应的资源;
编译模块940,用于对分类得到的所有基础代码模块及所述所有基础代码模块对应的资源进行整合编译,得到基础安装包;对分类得到的各个动态代码模块及所述各个动态代码模块对应的资源分别进行编译,得到所述各个动态代码模块对应的动态安装包;
发布模块950,用于基于应用程序发布方式,根据所述基础安装包和所述各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布。
在本申请的一个实施例中,资源配置模块930具体用于:
为所述代码模块配置资源名称和资源标识,以基于所述资源名称和所述资源标识确定所述代码模块对应的资源。
在本申请的一个实施例中,资源配置模块930还用于:
根据所述代码模块对应的资源名称、资源标识以及所述代码模块与其他代码模块之间的依赖关系,生成所述代码模块的资源索引;
当存在资源名称相同的第一代码模块和第二代码模块时,将所述第一代码模块的资源标识移除,并将所述第一代码模块的资源索引继承所述第二代码模块的资源索引;其中,所述第一代码模块的类型为动态代码模块,所述第二代码模块的类型为基础代码模块。
在本申请的一个实施例中,所述装置还包括:
依赖配置模块,用于对所述各个代码模块进行依赖关系配置,其中,动态代码模块依赖于基础代码模块,各动态代码模块之间不能相互依赖。
在本申请的一个实施例中,所述应用程序发布方式包括第一发布方式,发布模块950包括:
解包单元,用于基于所述第一发布方式,对所述基础安装包和所述各个动态代码模块对应的动态安装包进行解包,以得到至少两个代码包和至少两个资源包,其中,所述代码包与所述资源包一一对应;
代码包整合单元,用于将所述至少两个资源包整合为目标资源包,并将所述至少两个代码包整合为至少一个目标代码包,其中,所述目标代码包的数量小于所述代码包的数量;
第一发布单元,用于根据所述目标资源包和所述至少一个目标代码包形成所述应用程序安装包并进行发布。
在本申请的一个实施例中,所述代码包整合单元具体用于:
根据各代码包的执行顺序对所述至少两个代码包排序;
按照所述至少两个代码包的排列顺序,分别获取预设数量的代码包整合为一个目标代码包,得到至少一个目标代码包。
在本申请的一个实施例中,所述应用程序发布方式包括第二发布方式,基于应用程序发布方式,发布模块950包括:
第二发布单元,用于基于所述第二发布方式,将所述基础安装包作为所述应用程序安装包发布,并将所述各个动态代码模块对应的动态安装包作为应用程序的动态组件发布。
本申请各实施例中提供的应用程序安装包的发布装置的具体细节已经在对应的方法实施例中进行了详细的描述,此处不再赘述。
图10示意性地示出了用于实现本申请实施例的电子设备的计算机系统结构框图。
需要说明的是,图10示出的电子设备的计算机系统1000仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图10所示,计算机系统1000包括中央处理器1001(Central Processing Unit,CPU),其可以根据存储在只读存储器1002(Read-Only Memory,ROM)中的程序或者从存储部分1008加载到随机访问存储器1003(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器1003中,还存储有系统操作所需的各种程序和数据。中央处理器1001、在只读存储器1002以及随机访问存储器1003通过总线1004彼此相连。输入/输出接口1005(Input/Output接口,即I/O接口)也连接至总线1004。
以下部件连接至输入/输出接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至输入/输出接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理器1001执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

Claims (10)

1.一种应用程序安装包的发布方法,其特征在于,包括:
获取应用程序源代码,所述应用程序源代码包括至少两个代码模块,一个所述代码模块对应于应用程序的一个功能模块;
根据所述代码模块所对应的功能模块的安装方式对所述代码模块进行分类,得到基础代码模块和动态代码模块;
对所述至少两个代码模块进行资源配置,以确定各个代码模块对应的资源;
对分类得到的所有基础代码模块及所述所有基础代码模块对应的资源进行整合编译,得到基础安装包;对分类得到的各个动态代码模块及所述各个动态代码模块对应的资源分别进行编译,得到所述各个动态代码模块对应的动态安装包;
基于应用程序发布方式,根据所述基础安装包和所述各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布。
2.根据权利要求1所述的应用程序安装包的发布方法,其特征在于,对所述至少两个代码模块进行资源配置,以确定各个代码模块对应的资源,包括:
为所述代码模块配置资源名称和资源标识,以基于所述资源名称和所述资源标识确定所述代码模块对应的资源。
3.根据权利要求2所述的应用程序安装包的发布方法,其特征在于,所述代码模块对应的资源包括资源索引,所述方法还包括:
根据所述代码模块对应的资源名称、资源标识以及所述代码模块与其他代码模块之间的依赖关系,生成所述代码模块的资源索引;
当存在资源名称相同的第一代码模块和第二代码模块时,将所述第一代码模块的资源标识移除,并将所述第一代码模块的资源索引继承所述第二代码模块的资源索引;其中,所述第一代码模块的类型为动态代码模块,所述第二代码模块的类型为基础代码模块。
4.根据权利要求3所述的应用程序安装包的发布方法,其特征在于,在对所述至少两个代码模块进行资源配置,以确定各个代码模块对应的资源之前,所述方法还包括:
对所述各个代码模块进行依赖关系配置,其中,动态代码模块依赖于基础代码模块,各动态代码模块之间不能相互依赖。
5.根据权利要求1所述的应用程序安装包的发布方法,其特征在于,所述应用程序发布方式包括第一发布方式,基于应用程序发布方式,根据所述基础安装包和所述各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布,包括:
基于所述第一发布方式,对所述基础安装包和所述各个动态代码模块对应的动态安装包进行解包,以得到至少两个代码包和至少两个资源包,其中,所述代码包与所述资源包一一对应;
将所述至少两个资源包整合为目标资源包,并将所述至少两个代码包整合为至少一个目标代码包,其中,所述目标代码包的数量小于所述代码包的数量;
根据所述目标资源包和所述至少一个目标代码包形成所述应用程序安装包并进行发布。
6.根据权利要求5所述的应用程序安装包的发布方法,其特征在于,将所述至少两个代码包整合为至少一个目标代码包,包括:
根据各代码包的执行顺序对所述至少两个代码包排序;
按照所述至少两个代码包的排列顺序,分别获取预设数量的代码包整合为一个目标代码包,得到至少一个目标代码包。
7.根据权利要求1所述的应用程序安装包的发布方法,其特征在于,所述应用程序发布方式包括第二发布方式,基于应用程序发布方式,根据所述基础安装包和所述各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布,包括:
基于所述第二发布方式,将所述基础安装包作为所述应用程序安装包发布,并将所述各个动态代码模块对应的动态安装包作为应用程序的动态组件发布。
8.一种应用程序安装包的发布装置,其特征在于,包括:
代码获取模块,用于获取应用程序源代码,所述应用程序源代码包括至少两个代码模块,一个所述代码模块对应于应用程序的一个功能模块;
代码分类模块,用于根据所述代码模块所对应的功能模块的安装方式对所述代码模块进行分类,得到基础代码模块和动态代码模块;
资源配置模块,用于对所述至少两个代码模块进行资源配置,以确定各个代码模块对应的资源;
编译模块,用于对分类得到的所有基础代码模块及所述所有基础代码模块对应的资源进行整合编译,得到基础安装包;对分类得到的各个动态代码模块及所述各个动态代码模块对应的资源分别进行编译,得到所述各个动态代码模块对应的动态安装包;
发布模块,用于基于应用程序发布方式,根据所述基础安装包和所述各个动态代码模块对应的动态安装包形成应用程序安装包并进行发布。
9.一种计算机可读介质,其特征在于,其上存储有计算机程序,该计算机程序被处理器执行时实现权利要求1至7中任意一项所述的应用程序安装包的发布方法。
10.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器执行所述可执行指令使得所述电子设备执行权利要求1至7中任意一项所述的应用程序安装包的发布方法。
CN202111192574.XA 2021-10-13 2021-10-13 应用程序安装包的发布方法、装置、可读介质及电子设备 Pending CN113900704A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111192574.XA CN113900704A (zh) 2021-10-13 2021-10-13 应用程序安装包的发布方法、装置、可读介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111192574.XA CN113900704A (zh) 2021-10-13 2021-10-13 应用程序安装包的发布方法、装置、可读介质及电子设备

Publications (1)

Publication Number Publication Date
CN113900704A true CN113900704A (zh) 2022-01-07

Family

ID=79191813

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111192574.XA Pending CN113900704A (zh) 2021-10-13 2021-10-13 应用程序安装包的发布方法、装置、可读介质及电子设备

Country Status (1)

Country Link
CN (1) CN113900704A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114579135A (zh) * 2022-03-01 2022-06-03 北京字节跳动网络技术有限公司 一种安装包生成方法及装置
CN116991380A (zh) * 2023-09-21 2023-11-03 腾讯科技(深圳)有限公司 一种应用程序的构建方法、装置、电子设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114579135A (zh) * 2022-03-01 2022-06-03 北京字节跳动网络技术有限公司 一种安装包生成方法及装置
CN114579135B (zh) * 2022-03-01 2023-09-05 抖音视界有限公司 一种安装包生成方法及装置
CN116991380A (zh) * 2023-09-21 2023-11-03 腾讯科技(深圳)有限公司 一种应用程序的构建方法、装置、电子设备及存储介质
CN116991380B (zh) * 2023-09-21 2024-01-09 腾讯科技(深圳)有限公司 一种应用程序的构建方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
US10795660B1 (en) Live code updates
JP6294886B2 (ja) アプリケーション用の中間言語コードからネイティブコードを生成すること
CN106462412B (zh) 动态地产生的基于模式的类的结构识别
CN106605212B (zh) 在动态链接的运行时环境中的模块化共同版本管理
CN112104709B (zh) 智能合约的处理方法、装置、介质及电子设备
CN113900704A (zh) 应用程序安装包的发布方法、装置、可读介质及电子设备
US9459986B2 (en) Automatic generation of analysis-equivalent application constructs
US8935686B2 (en) Error-code and exception-based function dispatch tables
CN114911481A (zh) 代码编译方法、装置以及电子设备
Ji Scalability evaluation of the GIPSY runtime system
US9830204B2 (en) Facilitating communication between software components that use middleware
CN114721647B (zh) 一种基于无代码应用开发的面向对象编程方法
CN114237760B (zh) 一种将工业机理模型封装为容器镜像并发布web服务的方法
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
CN115857999A (zh) 基于vue的系统架构改造获得微前端系统架构的方法及系统
AU2014338988A1 (en) Facilitating communication between software components that use middleware
CN113778451A (zh) 文件加载方法、装置、计算机系统和计算机可读存储介质
Kyriakou et al. Enhancing C/C++ based OSS development and discoverability with CBRJS: A Rust/Node. js/WebAssembly framework for repackaging legacy codebases
Madushan Cloud Native Applications with Ballerina: A guide for programmers interested in developing cloud native applications using Ballerina Swan Lake
TWI835545B (zh) 軟體開發套組之方法、運算裝置及非暫時性電腦可讀儲存媒體
de Oliveira Dantas et al. Certification of workflows in a component-based cloud of high performance computing services
CN115421772A (zh) 多渠道发布的应用程序的生成方法、装置、设备及介质
Kyriakou et al. Improving C/C++ Open Source Software Discoverability by Utilizing Rust and Node. js Ecosystems
US12001860B1 (en) Methods and apparatus to generate code as a plug-in in a cloud computing environment
Starkman The Robot Operating System in Transition: Experiments and Tutorials

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