CN113296790B - 生成应用数据包的方法、设备以及计算机可读介质 - Google Patents

生成应用数据包的方法、设备以及计算机可读介质 Download PDF

Info

Publication number
CN113296790B
CN113296790B CN202010109107.5A CN202010109107A CN113296790B CN 113296790 B CN113296790 B CN 113296790B CN 202010109107 A CN202010109107 A CN 202010109107A CN 113296790 B CN113296790 B CN 113296790B
Authority
CN
China
Prior art keywords
module
construction
dynamic function
function module
data packet
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.)
Active
Application number
CN202010109107.5A
Other languages
English (en)
Other versions
CN113296790A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN202010109107.5A priority Critical patent/CN113296790B/zh
Publication of CN113296790A publication Critical patent/CN113296790A/zh
Application granted granted Critical
Publication of CN113296790B publication Critical patent/CN113296790B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供了一种生成应用数据包的方案,该方案可以将应用程序中外部依赖指定为动态功能模块对应的代码内容,并将应用程序中除所述外部依赖之外的代码内容指定为主模块对应的代码内容,由于外部依赖构建的动态功能模块与工程依赖所对应的动态功能模块不同,若直接使用app bundle默认的官方构建方式,无法自动组织构建任务的执行顺序,因此可以根据主模块和动态功能模块的依赖关系,确定构建任务的执行顺序,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包,使得发布时对应于主模块的基础包的大小,能够符合特定应用发布平台的要求。

Description

生成应用数据包的方法、设备以及计算机可读介质
技术领域
本申请涉及信息技术领域,尤其涉及一种生成应用数据包的方法、设备以及计算机可读介质。
背景技术
部分应用发布平台中对于发布的apk(Android application package,安卓应用程序包)文件的大小会作出限制,例如一部分应用发布平台中对于文件的大小限制为100M,也就是说开发者在这些应用发布平台上发布应用程序时,只能上传小于100M的apk文件,因此会对内容较多的应用程序造成一些限制。
目前存在一种app bundle的应用数据包构建方案,能够解决包大小问题对于应用程序的限制。app bundle是一种能够根据手机特性等,大幅度降低用户下载apk文件的大小的一套实现方案,开发者以aab格式将应用数据包提交到应用发布平台,由应用发布平台进行识别,并动态下发用户需要的apk文件。
app bundle在实现时一般都是基于应用程序中的工程依赖(ProjectDependency)。因此,若不使用或者使用工程依赖较少的应用程序需要在此类应用发布平台中发布,由于生成环境中没有或者仅有较少的工程依赖,若直接将app bundle官方给出的实现方式套用于此类应用程序的构建,难以缩减应用程序的基础包(base apk)的大小,使得获得的应用数据包无法在此类应用发布平台中发布。由此可知,目前没有一种较好的方式能够适用于使用工程依赖较少的应用程序,直接基于此类应用程序构建出符合此类应用发布平台要求的应用数据包。
申请内容
本申请的一个目的是提供一种构建应用数据包的方案,用以解决现有方案中没有一种较好的构建方案能够适用于使用工程依赖较少的应用程序,使得构建的应用数据包符合特定应用发布平台的要求的问题。
本申请实施例中提供了一种生成应用数据包的方法,该方法包括:
将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容;
根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,其中,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,所述构建产物为构建任务完成后所获得的信息;
根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包。
本申请实施例提供了另一种生成应用数据包的方法,该方法包括:
获取用户输入的模块指定信息,所述模块指定信息用于确定应用程序中用户指定的外部依赖;
根据所述模块指定信息,将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容;
根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,其中,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,所述构建产物为构建任务完成后所获得的信息;
根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的构建任务,以生成包括主模块和动态功能模块的应用数据包;
输出所述应用数据包。
本申请实施例还提供了一种生成应用数据包的设备,该设备包括:
功能指定模块,用于将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容确定为主模块对应的代码内容;
依赖分析模块,用于根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,其中,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,所述构建产物为构建任务完成后所获得的信息;
构建处理模块,用于根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包。
本申请实施例还提供了另一种生成应用数据包的设备,该设备包括:
交互模块,用于获取用户输入的模块指定信息,以及输出应用数据包,所述模块指定信息用于确定应用程序中用户指定的外部依赖;
功能指定模块,用于将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容确定为主模块对应的代码内容;
依赖分析模块,用于根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,其中,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,所述构建产物为构建任务完成后所获得的信息;
构建处理模块,用于根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包。
此外,本申请实施例还提供了一种计算设备,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行所述生成应用数据包的方法。
本申请实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现所述生成应用数据包的方法。
本申请实施例提供的构建应用数据包的方案中,可以将应用程序中外部依赖指定为动态功能模块对应的代码内容,并将应用程序中除所述外部依赖之外的代码内容指定为主模块对应的代码内容,由于外部依赖构建的动态功能模块与工程依赖所对应的动态功能模块不同,若直接使用app bundle默认的官方构建方式,无法自动组织构建任务的执行顺序,因此可以根据主模块和动态功能模块的依赖关系,确定构建任务的执行顺序,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包,使得发布时对应于主模块的基础包的大小,能够符合特定应用发布平台的要求。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为本申请实施例提供的一种生成应用数据包的方法的示意图;
图2为本申请实施例中在主模块构建任务中插入动态功能模块的生成任务的原理示意图;
图3为本申请实施例提供的一种生成应用数据包的设备的结构示意图;
图4为本申请实施例提供的一种用于生成应用数据包的计算设备的结构示意图;
图5为本申请实施例中一个应用程序的应用数据包构建过程中的主要步骤示意图;
图6为本申请实施例在生成应用数据包时的逻辑示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本申请实施例提供了一种生成应用数据包的方法,该方法可以将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容;根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序;根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包,使得发布时对应于主模块的基础包的大小能够,符合特定应用发布平台的要求。
在实际场景中,该方法的执行主体可以是用户设备、网络设备或者用户设备与网络设备通过网络相集成所构成的设备,此外也可以是运行于上述设备中的程序。用户设备包括但不限于计算机、手机、平板电脑等各类终端设备;网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。
由于在本申请实施例的场景中,需要实现应用数据包生成的应用程序中没有或者仅有较少的工程依赖,若直接套用app bundle官方给出的实现方式,由于仅能够对工程依赖进行标记,自动分析获得其依赖关系,将工程依赖生成为动态功能模块,因此,难以缩减应用程序数据包的大小,使得生成获得的应用数据包无法在特定应用发布平台中发布。由此,本申请实施例提供的一种生成应用数据包的方法,该方法可以适用于应用程序没有或者仅有较少的工程依赖时需要生成符合此类应用发布平台要求的应用数据包的场景。
本申请实施例提供的生成应用数据包的方法的处理流程可以如图1所示,包括:
步骤S101,将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容。外部依赖用于为应用程序中的主程序提供功能上的支持,例如提供各类函数以获取需要的计算结果等,在功能上类似于工程依赖,是应用程序中的另一种依赖形式。在实际场景中,各类二方包或者三方包均属于外部依赖,其具体形式可以是采用arr文件或者jar文件等形式存储的代码内容。用户可以通过各类方式指定应用程序中的部分或者全部外部依赖,本方案在将应用程序中用户指定的外部依赖确定为动态功能模块对应的代码内容之后,即可在后续的构建过程中使得外部依赖构建为应用数据包中的动态功能模块,而应用程序中其余部分的代码内容则会构建为应用数据包中的主模块。
以一个应用程序为例,该应用程序可能会具有数百个外部依赖,为了使得生成得到的应用数据包符合特定应用发布平台的发布要求,需要将全部或者部分的外部依赖生成为动态功能模块(dynamic feature module),而将应用程序中的剩余内容生成为主模块(app module)。其中动态功能模块可以在发布时生成为动态功能包下发给用户,而主模块则在发布时生成为基础包下发给用户。
基础包是应用程序首次安装时需要的数据,其它的动态功能模块都需要以基础包中的数据作为基础,而动态功能包对应于构建为动态功能模块的外部依赖,用于提供应用程序运行时需要的可选功能,例如运行时的分辨率、使用的指令集、显示的语言等。这些动态功能模块不需要在首次安装就全部加载,因此将全部或者部分外部依赖都构建为动态功能模块之后,可以减小基础包的大小,将基础包的大小控制在100M以内,从而使得应用程序生成的应用数据包符合特定应用发布平台要求。
由于app bundle官方给出的生成方案中所生成的动态功能模块并非是基于工程依赖所生成的,因此无法自动标记依赖关系完成生成。此时,本方案中需要执行步骤S102,即根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序。依赖关系用于表示应用程序中主模块与外部依赖构建的动态功能模块之间的依赖性,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,构建产物为构建任务完成后所获得的信息。例如主模块在下一步构建任务中需要使用到资源标识resid,此时需要先执行具有依赖关系的动态功能模块的构建任务,完成该动态功能模块的构建任务可以得到功能模块标识feature id。该功能模块标识即为动态功能模块的构建产物,可以提供给主模块的下一步构建任务,作为资源标识在下一步构建任务中使用。此时,该主模块的需求与动态功能模块的构建产物之间即为一种依赖关系,不同的依赖关系使得主模块和动态功能模块的构建任务需要以不同的顺序执行。
依赖关系与应用程序中的代码结构相关,例如一段代码A在运行过程中需要调用另一端代码B,由此代码A对应的构建过程中,可能需要使用到代码B对应动态功能模块的功能模块标识feature id,以作为调用的资源标识resid。此时代码A对应的构建任务需要代码B对应的构建任务的构建产物(构建得到的动态功能模块的功能模块标识feature id)。由此,可以通过分析应用程序中各个代码块之间的关联,来实现依赖分析,从而确定不同代码内容所对应的主模块和动态功能模块的依赖关系,进而可以基于该依赖关系确定主模块的构建任务与动态功能模块的构建任务的执行顺序。
步骤S103,根据执行顺序执行构建任务,在执行过程中,将动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包。
其中,生成应用数据包的过程即为数据格式转换的过程,将应用程序的代码等内容转换为应用发布平台可以识别的数据格式,例如将代码生成各种格式的文件。实际场景中可以采用gradle等已有的构建工具完成该数据格式转换的过程,从而生成包含主模块和动态功能模块的应用数据包。构建产物是构建获得的动态功能模块中能够包含的数据,例如外部依赖构建为动态功能模块之后,会产生相应的功能模块标识,该功能模块编号即为动态功能模块构建任务的构建产物,可以作为与其存在依赖关系的主模块需要的资源标识,应用于主模块的构建任务中。
在应用数据包的构建过程中,包括了如图5所示的几个主要步骤,首先需要合并应用程序的资源(MergeAppAssets),其中各个模块的资源即为这些模块对应的代码内容,例如动态功能模块的资源即为指定的外部依赖,而主模块对应的资源即为应用程序中其它的代码内容。在执行构建任务之间,统一提取这些资源,为后续的构建任务做准备。在完成资源合并之后,即可执行动态功能模块的构建任务(FeatureTask)以及主模块的构建任务(AppTask)。由于主模块的构建任务中会需要使用到动态功能模块的构建任务的构建产物,因此相关的动态功能模块的构建任务需要插入到主模块的特定构建任务之前,使得动态功能模块的构建任务的构建产物能够提供给主模块的特定构建任务。
图2示出了一个主模块base0的构建任务中插入动态功能模块的构建任务的原理示意图。该主模块base0的构建过程需要依次通过task_a、task_b、task_c、task_d四个构建任务实现,通过分析依赖关系可知,主模块在构建任务task_b时需要使用到动态功能模块的一项构建任务task1对应的构建产物,在构建任务task_d时需要使用到动态功能模块的另一项构建任务task2对应的构建产物。由此可以在主模块base0的构建任务task_b之前,插入动态功能模块的构建任务task1,将其构建产物提供给主模块base0的构建任务task_b。之后,在主模块base0的构建任务task_c完成之后,构建任务task_d执行之前,插入动态功能模块的构建任务task2,将其构建产物提供给主模块base0的构建任务task_d,由此使得主模块能够顺利完成构建。当所有模块都完成构建之后,即可获得主模块和动态功能模块的应用数据包。
在本申请的一些实施例中,为了更好的实现上述构建过程,该方法还可以对需要构建为动态功能模块的外部依赖进行标记,生成识别标识。例如,可以采用特定的识别标识,将需要构建为动态功能模块的外部依赖标记出来,而正常app bundle构建时的工程依赖则没有特定的识别标识,以此可以区分两种情况。由此,在将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容之前,还可以先根据识别标记,识别出动态功能模块对应的外部依赖。
本实施例中,进行标记的方式可以是为外部依赖设定特定的依赖包格式,例如本申请实施例中,可以将动态功能模块对应的外部依赖打包为预设格式的文件。其中,预设格式可以是awb格式,该awb格式是本方案中自定义的一种文件格式,其对应于其它外部依赖的依赖包格式,如aar、jar等,文件中的具体内容与aar、jar中类似,区别在于文件名后缀格式不同,awb的格式外部依赖会被指定为动态功能模块对应的代码内容,而其它如aar、jar等常规格式的外部依赖则不会被指定为动态功能模块对应的代码内容,由此文件名的后缀部分即为识别标识。基于此,本申请实施例在根据识别标识,识别出对应于动态功能模块的外部依赖时,可以将打包为预设格式的文件的外部依赖确定为动态功能模块对应的外部依赖。
图6示出了采用本申请实施例提供的方案来生成aab格式的应用数据包时的处理逻辑,对于需要构建为动态功能模块的外部依赖,可以在指定之前进行标记,标记的方式为将其打包为awb格式的文件。例如,本实施例中,若需要指定的外部依赖为两个,对其打包为awb格式中,即可获得图中所示的文件,即dynamic feature1.awb和dynamicfeature2.awb,而应用程序中除这两个外部依赖之外的代码内容,则可以指定为主模块对应的代码内容,即图中的base。在完成各自的构建任务之后,可以初步获得的动态功能模块和主模块,这些模块可以采用zip格式的文件保存,在需要时可以进行打包、签名,获得aab格式的文件输出。
为了在输出应用数据包时更加方便,本申请的一些实施例中还可以获取输出开关信息,该输出开关信息用于控制输出的应用数据包的具体格式,例如在本申请实施例中可以控制的格式为对应于应用发布平台的两种格式,分为别apk格式以及aab格式。
apk格式的应用数据包中的具体内容至少包括了基础包base apk和动态功能包dynamic feature apk。对于本申请实施例中apk格式的应用数据包,其中的动态功能包对应于指定为动态功能模块的外部依赖,而非如常规实现方式中仅对应于内部的工程依赖。aab格式的应用数据包中的具体内容可以包括主模块app module、动态功能模块dynamicfeature module,其中的动态功能模块对应于外部依赖,而非如常规实现方式中仅对应于内部的工程依赖。
由此,对于具有大量外部依赖的应用程序而言,可以在无需改动应用程序的开发构架的情况下,即可使得生成的应用数据包符合特定应用发布平台的要求,解决了appbundle在此场景下的局限性,可以使得app bundle得到更加广泛的使用。
在本申请的一些实施例中,在生成包括主模块和动态功能模块的应用数据包时,可以获取应用数据包生成命令的配置信息,并通过应用数据包生成命令生成目标格式的应用数据包。由于配置信息中至少包括了输出开关信息,使得生成的应用数据包可以由输出开关信息进行控制,输出用户需要的目标格式。在官方app bundle的实现场景中,若需要生成abb或者apk格式的应用数据包,需要分别使用不同的命令。而在本申请实施例的方案中,可以获取./gradlew assembleDebug命令的配置信息,配置信息至少包括输出开关信息,而后通过./gradlew assembleDebug命令生成apk格式和/或aab格式的应用数据包。输出的应用数据包的格式可以由输出开关信息来控制,例如同时生成apk格式和aab格式的应用数据包,或者仅生成apk格式的应用数据包等,由此,使得应用数据包的生成更加灵活。
本申请实施例还提供了另一种生成应用数据包的方法,该方法可以先获取获取用户输入的模块指定信息,该模块指定信息用于确定应用程序中用户指定的外部依赖。在实际场景中,可以向用户提供一交互界面,使得用户可以通过交互界面输入模块指定信息,该模块指定信息中可以包含用户指定的外部依赖的标识信息,以便于根据此标识信息确定用户指定的外部依赖。
在获取到根据所述模块指定信息之后,即可采用前述的方案,将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容;
而后根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,并根据所述执行顺序执行构建任务。在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的构建任务,以生成包括主模块和动态功能模块的应用数据包。
在生成应用数据包之后,输出该应用数据包。
基于同一发明构思,本申请实施例中还提供了一种生成应用数据包的设备,设备对应的方法是前述实施例中实施的生成应用数据包的方法,并且其解决问题的原理与该方法相似。
本申请实施例提供的一种生成应用数据包的设备可以将应用程序中外部依赖指定为动态功能模块对应的代码内容,并将应用程序中除外部依赖之外的代码内容指定为主模块对应的代码内容;对主模块和动态功能模块进行依赖分析,确定主模块和动态功能模块的依赖关系;进而根据依赖关系,在主模块的构建过程中插入动态功能模块的构建任务,并将动态功能模块的构建任务对应的构建产物提供给主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包,使得发布时对应于主模块的基础包的大小能够,符合特定应用发布平台的要求。
在实际场景中,生成应用数据包的设备可以是用户设备、网络设备或者用户设备与网络设备通过网络相集成所构成的设备,此外也可以是运行于上述设备中的程序。用户设备包括但不限于计算机、手机、平板电脑等各类终端设备;网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。
由于在本申请实施例的场景中,需要实现应用数据包生成的应用程序中没有或者仅有较少的工程依赖,若直接套用app bundle官方给出的实现方式,由于仅能够对工程依赖进行标记,自动分析获得其依赖关系,将工程依赖生成为动态功能模块,因此,难以缩减应用程序数据包的大小,使得生成获得的应用数据包无法在特定应用发布平台中发布。由此,本申请实施例提供的一种生成应用数据包的方法,该方法可以适用于应用程序没有或者仅有较少的工程依赖时需要生成符合磁此类应用发布平台要求的应用数据包的场景。
图3示出了本申请实施例提供的一种生成应用数据包的设备的结构,该设备包括功能指定模块310、依赖分析模块320和生成处理模块330。其中,功能指定模块310用于将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容;依赖分析模块320用于根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序;构建处理模块330用于执行顺序执行构建任务,在执行过程中,将动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包。
外部依赖用于为应用程序中的主程序提供功能上的支持,例如提供各类函数以获取需要的计算结果等,在功能上类似于工程依赖,是应用程序中的另一种依赖形式。在实际场景中,各类二方包或者三方包均属于外部依赖,其具体形式可以是采用arr文件或者jar文件等形式存储的代码内容。用户可以通过各类方式指定应用程序中的部分或者全部外部依赖,本方案在将应用程序中用户指定的外部依赖确定为动态功能模块对应的代码内容之后,即可在后续的构建过程中使得外部依赖会构建为应用数据包中的动态功能模块,而应用程序中其余部分的代码内容则会构建为应用数据包中的主模块。
以一个应用程序为例,该应用程序可能会具有数百个外部依赖,为了使得生成得到的应用数据包符合特定应用发布平台的发布要求,需要将全部或者部分的外部依赖生成为动态功能模块(dynamic feature module),而将应用程序中的剩余内容生成为主模块(app module)。其中动态功能模块可以在发布时生成为动态功能包下发给用户,而主模块则在发布时生成为基础包下发给用户。
基础包是应用程序首次安装时需要的数据,其它的动态功能模块都需要以基础包中的数据作为基础,而动态功能包对应于构建为动态功能模块的外部依赖,用于提供应用程序运行时需要的可选功能,例如运行时的分辨率、使用的指令集、显示的语言等。这些动态功能模块不需要在首次安装就全部加载,因此将全部或者部分外部依赖都构建为动态功能模块之后,可以减小基础包的大小,将基础包的大小控制在100M以内,从而使得应用程序生成的应用数据包符合特定应用发布平台要求。
由于app bundle官方给出的生成方案中所生成的动态功能模块并非是基于工程依赖所生成的,因此无法自动标记依赖关系完成生成。此时,可以由依赖分析模块320对根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序。依赖关系用于表示应用程序中主模块与外部依赖构建的动态功能模块之间的依赖性,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,构建产物为构建任务完成后所获得的信息。例如主模块在下一步构建任务中需要使用到资源标识resid,此时需要各个动态功能模块则需要通过相应的构建任务,产生出构建产物(如功能模块标识feature id),供主模块作为资源标识,在下一步构建任务中使用。此时,该主模块的需求与动态功能模块的构建产物之间即为一种依赖关系,不同的依赖关系使得主模块和动态功能模块的构建任务需要以不同的顺序执行。
依赖关系与应用程序中的代码结构相关,例如一段代码A在运行过程中需要调用另一端代码B,由此代码A对应的构建过程中,可能需要使用到代码B对应动态功能模块的功能模块标识feature id,以作为调用的资源标识resid。此时代码A对应的构建任务需要代码B对应的构建任务的构建产物(构建得到的动态功能模块的功能模块标识feature id)。由此,可以通过分析应用程序中各个代码块之间的关联,来实现依赖分析,从而确定不同代码内容所对应的主模块和动态功能模块的依赖关系,进而可以基于该依赖关系确定主模块的构建任务与动态功能模块的构建任务的执行顺序。
构建处理模块330生成应用数据包的过程即为数据格式转换的过程,将应用程序的代码等内容转换为应用发布平台可以识别的数据格式,实际场景中可以采用gradle等已有的构建工具完成该数据格式转换的过程,从而生成包含主模块和动态功能模块的应用数据包。构建产物是构建获得的动态功能模块中能够包含的数据,例如外部依赖构建为动态功能模块之后,会产生相应的功能模块标识,该功能模块编号即为动态功能模块构建任务的构建产物,可以作为与其存在依赖关系的主模块需要的资源标识,应用于主模块的构建任务中。
图2示出了一个主模块base0的构建任务中插入动态功能模块的构建任务的原理示意图。该主模块base0的构建过程需要依次通过task_a、task_b、task_c、task_d四个构建任务实现,通过分析依赖关系可知,主模块在构建任务task_b时需要使用到动态功能模块的一项构建任务task1对应的构建产物,在构建任务task_d时需要使用到动态功能模块的另一项构建任务task2对应的构建产物。由此可以在主模块base0的构建任务task_b之前,插入动态功能模块的构建任务task1,将其构建产物提供给主模块base0的构建任务task_b。之后,在主模块base0的构建任务task_c完成之后,构建任务task_d执行之前,插入动态功能模块的构建任务task2,将其构建产物提供给主模块base0的构建任务task_d,由此使得主模块能够顺利完成构建。当所有模块都完成构建之后,即可获得主模块和动态功能模块的应用数据包。
在本申请的一些实施例中,为了更好的实现上述构建过程,功能指定模块310还可以对需要构建为动态功能模块的外部依赖进行标记,生成识别标识。例如,可以采用特定的识别标识,将需要构建为动态功能模块的外部依赖标记出来,而正常app bundle构建时的工程依赖则没有特定的识别标识,以此可以区分两种情况。由此,在将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容之前,功能指定模块还可以先根据识别标记,识别出动态功能模块对应的外部依赖。
本实施例中,进行标记的方式可以是为外部依赖设定特定的依赖包格式,例如本申请实施例中,可以将动态功能模块对应的外部依赖打包为预设格式的文件。其中,预设格式可以是awb格式,该awb格式是本方案中自定义的一种文件格式,其对应于其它外部依赖的依赖包格式,如aar、jar等,文件中的具体内容与aar、jar中类似,区别在于文件名后缀格式不同,awb的格式外部依赖会被指定为动态功能模块对应的代码内容,而其它如aar、jar等常规格式的外部依赖则不会被指定为动态功能模块对应的代码内容,由此文件名的后缀部分即为识别标识。基于此,本申请实施例在根据识别标识,识别出对应于动态功能模块的外部依赖时,可以将打包为预设格式的文件的外部依赖确定为动态功能模块对应的外部依赖。
为了在输出应用数据包时更加方便,本申请的一些实施例中还可以获取输出开关信息,该输出开关信息用于控制输出的应用数据包的具体格式,例如在本申请实施例中可以控制的格式为对应于应用发布平台的两种格式,分为别apk格式以及aab格式。
apk格式的应用数据包中的具体内容至少包括了基础包base apk和动态功能包dynamic feature apk。对于本申请实施例中apk格式的应用数据包,其中的动态功能包对应于指定为动态功能模块的外部依赖,而非如常规实现方式中仅对应于内部的工程依赖。aab格式的应用数据包中的具体内容可以包括主模块app module、动态功能模块dynamicfeature module,其中的动态功能模块对应于外部依赖,而非如常规实现方式中仅对应于内部的工程依赖。
由此,对于具有大量外部依赖的应用程序而言,可以在无需改动应用程序的开发构架的情况下,即可使得生成的应用数据包符合特定应用发布平台的要求,解决了appbundle在此场景下的局限性,可以使得app bundle得到更加广泛的使用。
在本申请的一些实施例中,在生成包括主模块和动态功能模块的应用数据包时,构建处理模块可以获取应用数据包生成命令的配置信息,并通过应用数据包生成命令生成目标格式的应用数据包。由于配置信息中至少包括了输出开关信息,使得生成的应用数据包可以由输出开关信息进行控制,输出用户需要的目标格式。在官方app bundle的实现场景中,若需要生成abb或者apk格式的应用数据包,需要分别使用不同的命令。而在本申请实施例的方案中,可以获取./gradlew assembleDebug命令的配置信息,配置信息至少包括输出开关信息,而后通过./gradlew assembleDebug命令生成apk格式和/或aab格式的应用数据包。输出的应用数据包的格式可以由输出开关信息来控制,例如同时生成apk格式和aab格式的应用数据包,或者仅生成apk格式的应用数据包等,由此,使得应用数据包的生成更加灵活。
本申请实施例还提供了另一种生成应用数据包的设备,该设备可以包括交互模块、功能指定模块、依赖分析模块和生成处理模块。交互模块可以获取获取用户输入的模块指定信息,该模块指定信息用于确定应用程序中用户指定的外部依赖。在实际场景中,交互模块可以向用户提供一交互界面,使得用户可以通过交互界面输入模块指定信息,该模块指定信息中可以包含用户指定的外部依赖的标识信息,以便于根据此标识信息确定用户指定的外部依赖。
在获取到根据所述模块指定信息之后,即功能指定模块可以将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容;
而后依赖分析模块根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,并由构建处理模块根据所述执行顺序执行构建任务。在执行过程中,构建处理模块将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的构建任务,以生成包括主模块和动态功能模块的应用数据包。
在生成应用数据包之后,交互模块输出该应用数据包。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一些实施例包括一个如图4所示的计算设备,该设备包括存储有计算机可读指令的一个或多个存储器410和用于执行计算机可读指令的处理器420,其中,当该计算机可读指令被该处理器执行时,使得设备执行基于前述本申请的多个实施例的方法和/或技术方案。
此外,本申请的一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,计算机可读指令可被处理器执行以实现前述本申请的多个实施例的方法和/或技术方案。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在实施例中,本申请的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

Claims (10)

1.一种生成应用数据包的方法,其中,该方法包括:
将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容;
根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,其中,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,所述构建产物为构建任务完成后所获得的信息;
根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包。
2.根据权利要求1所述的方法,其中,该方法还包括:
对动态功能模块对应的所述外部依赖进行标记,生成识别标识;
在将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容之前,根据所述识别标识,识别出所述外部依赖。
3.根据权利要求2所述的方法,其中,对动态功能模块对应的所述外部依赖进行标记,生成识别标识,包括:
将动态功能模块对应的所述外部依赖打包为预设格式的文件;
根据识别标识,识别出所述外部依赖,包括:
将打包为预设格式的文件的外部依赖确定为动态功能模块对应的所述外部依赖。
4.根据权利要求1所述的方法,其中,该方法还包括:
获取输出开关信息;
根据所述输出开关信息,控制生成的包括主模块和动态功能模块的应用数据包的格式。
5.根据权利要求4所述的方法,其中,生成包括主模块和动态功能模块的应用数据包,包括:
获取应用数据包生成命令的配置信息,所述配置信息至少包括输出开关信息;
通过应用数据包生成命令生成目标格式的应用数据包。
6.一种生成应用数据包的方法,其中,该方法包括:
获取用户输入的模块指定信息,所述模块指定信息用于确定应用程序中用户指定的外部依赖;
根据所述模块指定信息,将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容,确定为主模块对应的代码内容;
根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,其中,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,所述构建产物为构建任务完成后所获得的信息;
根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的构建任务,以生成包括主模块和动态功能模块的应用数据包;
输出所述应用数据包。
7.一种生成应用数据包的设备,其中,该设备包括:
功能指定模块,用于将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容确定为主模块对应的代码内容;
依赖分析模块,用于根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,其中,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,所述构建产物为构建任务完成后所获得的信息;
构建处理模块,用于根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包。
8.一种生成应用数据包的设备,其中,该设备包括:
交互模块,用于获取用户输入的模块指定信息,以及输出应用数据包,所述模块指定信息用于确定应用程序中用户指定的外部依赖;
功能指定模块,用于将应用程序中用户指定的外部依赖,确定为动态功能模块对应的代码内容,并将应用程序中除所述用户指定的外部依赖之外的代码内容确定为主模块对应的代码内容;
依赖分析模块,用于根据所述主模块和所述动态功能模块的依赖关系,确定主模块的构建任务与动态功能模块的构建任务的执行顺序,其中,主模块的构建任务需要获取与其具有依赖关系的动态功能模块的构建任务所对应的构建产物,所述构建产物为构建任务完成后所获得的信息;
构建处理模块,用于根据所述执行顺序执行构建任务,在执行过程中,将所述动态功能模块的构建任务对应的构建产物提供给与其具有依赖关系的主模块的相应构建任务,以生成包括主模块和动态功能模块的应用数据包。
9.一种计算设备,其中,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行权利要求1至6中任一项所述的方法。
10.一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现如权利要求1至6中任一项所述的方法。
CN202010109107.5A 2020-02-21 2020-02-21 生成应用数据包的方法、设备以及计算机可读介质 Active CN113296790B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010109107.5A CN113296790B (zh) 2020-02-21 2020-02-21 生成应用数据包的方法、设备以及计算机可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010109107.5A CN113296790B (zh) 2020-02-21 2020-02-21 生成应用数据包的方法、设备以及计算机可读介质

Publications (2)

Publication Number Publication Date
CN113296790A CN113296790A (zh) 2021-08-24
CN113296790B true CN113296790B (zh) 2023-12-29

Family

ID=77317526

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010109107.5A Active CN113296790B (zh) 2020-02-21 2020-02-21 生成应用数据包的方法、设备以及计算机可读介质

Country Status (1)

Country Link
CN (1) CN113296790B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117648074B (zh) * 2024-01-29 2024-04-19 深圳市恒永达科技股份有限公司 一种用于c#软件开发的程序处理方法、系统及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019072110A1 (zh) * 2017-10-11 2019-04-18 阿里巴巴集团控股有限公司 应用程序的生成方法、装置、系统、设备和介质
CN110442327A (zh) * 2018-05-03 2019-11-12 阿里巴巴集团控股有限公司 一种应用程序构建方法、装置、服务器

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9104794B2 (en) * 2008-07-15 2015-08-11 Microsoft Technology Licensing, Llc Automatic incremental application dependency discovery through code instrumentation

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019072110A1 (zh) * 2017-10-11 2019-04-18 阿里巴巴集团控股有限公司 应用程序的生成方法、装置、系统、设备和介质
CN110442327A (zh) * 2018-05-03 2019-11-12 阿里巴巴集团控股有限公司 一种应用程序构建方法、装置、服务器

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于静态代码分析的自动化对象行为协议提取工具;黄洲;彭鑫;赵文耘;;计算机科学(08);全文 *

Also Published As

Publication number Publication date
CN113296790A (zh) 2021-08-24

Similar Documents

Publication Publication Date Title
US8782554B2 (en) Context menu dependency on many objects of different type
CN102708234A (zh) 基于HLA的Matlab仿真模型集成平台和方法
CN106897107B (zh) 一种web远程数据计算与仿真的实现系统和方法
CN110515620B (zh) 一种自动化资源处理方法及系统
CN108897543B (zh) 版本的临时编译系统、方法、装置及存储介质
US20200210829A1 (en) Network off-line model processing method, artificial intelligence processing device and related products
CN110532182B (zh) 一种虚拟化平台的自动化测试方法及装置
CN109376088A (zh) 一种自动化测试系统及自动化测试方法
EP4310667A1 (en) Ai application deployment method, and related platform, cluster, medium and program product
CN111459541A (zh) 应用程序的打包方法、装置、计算机设备和存储介质
CN110674083A (zh) 工作流迁移方法、装置、设备及计算机可读存储介质
CN111459621B (zh) 云仿真集成与调度方法、装置、计算机设备和存储介质
CN113296790B (zh) 生成应用数据包的方法、设备以及计算机可读介质
CN111736810A (zh) 基于jenkins实时任务动态创建docker容器节点执行任务的方法
CN115964185A (zh) 面向技术资源共享的微服务管理系统
US20090300648A1 (en) Continuation-Based Runtime Callback Invocation
CN114895893A (zh) 多源数据处理方法、装置、设备及存储介质
CN115328997A (zh) 数据同步方法、系统、设备及存储介质
CN114296883A (zh) 一种轻载虚拟化网络实验行为仿真器构建和调度方法
JP2008250838A (ja) ソフトウェア生成装置、方法、およびプログラム
CN103530091A (zh) Cpmd的计算任务的实现方法和装置
CN114064176A (zh) 一种视图交互方法、装置、电子设备及计算机可读介质
CN111522536A (zh) 一种编程语言调用的方法及其相关设备
CN108573142B (zh) 一种实现hook的方法及装置
JP7014173B2 (ja) 分散処理システム

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