一种模块开发方法及装置与流程

文档序号:21454175发布日期:2020-07-10 17:48阅读:141来源:国知局
一种模块开发方法及装置与流程

本申请涉及互联网技术领域,尤其涉及一种模块开发方法及装置。



背景技术:

一个程序的功能往往需要由多个模块组合与协作提供的。所以不同的模块之间,必定会存在着功能的相互调用。在现有模块化开发方案中,模块抽取为模块工程后会提供一部分公开接口,并在开发完成后将工程源代码编译打包为二进制归档aar文件发布到maven服务器,其他模块通过下载对应的aar即可引用其中的公开接口,达到模块之间功能调用的目的。然而,当开发的某个功能同时涉及到多个模块、或者定位某个缺陷涉及到多个模块时,可能就需要同时修改多个模块的代码并且验证。软件开发是一个需要不断调试过程,如果代码需要多次修改,则每次都要经历以上繁杂且漫长的过程,拖慢模块联调的效率;而且在联调过程中,会多次上传aar,导致maven服务器资源的浪费。

因此,如何在调试过程中避免多次重复原生方案导致的开发效率低下以及maven服务器资源浪费,是亟待解决的问题。



技术实现要素:

鉴于上述问题,提出了本申请以便提供一种克服上述问题或者至少部分地解决上述问题的一种模块开发方法及装置。

第一方面,本申请实施例提供了一种模块开发方法,可包括:

确定第一模块工程对第二模块工程的编译模式,其中,所述第一模块工程包括第一模块的源代码,第二模块工程包括第二模块的源代码,且第一模块对第二模块具有依赖关系;

若所述编译模式为联调模式,则从代码管理系统中获取所述第二模块对应的目标源代码;

将所述目标源代码以子工程的形式,动态添加到所述第一模块工程中;

在所述第一模块工程的代码编辑器中,对所述第二模块的目标源代码进行编辑;

对所述第一模块的源代码以及所述第二模块编辑后的目标源代码进行编译,得到编译结果。

通过第一方面的方法,本申请实施例可以首先确定第一模块工程对第二模块工程的编译模式,若所述编译模式为联调模式,则从代码管理系统中获取所述第二模块对应的目标源代码;将所述目标源代码以子工程的形式,以动态方式添加到所述第一模块工程中,并对目标源代码进行编辑后编译。将第一模块工程所需要调用的所述第二模块工程对应的目标源代码以子工程的形式,动态添加到该第一模块工程中(即将目标模块工程(如:第一模块工程)对于其他模块工程(如第二:模块工程)的依赖方式由aar依赖切换为源码方式依赖)后,用户可以直接在目标模块工程中查看、修改与编译另一个模块工程的源代码,免去了打开另一个模块工程、修改代码、发布aar、下载aar再进行验证的漫长工作流程,提高了开发效率,并且在这个修改测试的过程中不再需要反复发布aar,也节省了服务器资源。

在一种可能实现的方式中,所述确定第一模块工程对第二模块工程的编译模式,包括:确定所述第一模块工程依赖的所述第二模块工程的模块名称;根据所述模块名称以及所述模块名称与版本信息之间的映射关系,确定所述模块名称对应的目标版本信息;根据所述目标版本信息,确定第一模块工程对第二模块工程的编译模式。

在一种可能实现的方式中,所述第一模块工程和所述第二模块工程均属于主工程,所述确定所述第一模块工程依赖的第二模块工程的模块名称,包括:确定所述主工程中的配置文件,其中,所述配置文件包括js对象简谱json数组,所述json数组中包括多个声明信息,且所述声明信息包括:一个模块工程所依赖的模块工程的模块名称,以及模块名称对应的版本信息;根据所述配置文件中的声明信息,确定所述第一模块工程依赖的第二模块工程的模块名称。

在一种可能实现的方式中,所述根据所述模块名称以及所述模块名称与版本信息之间的映射关系,确定所述模块名称对应的目标版本信息,包括:在所述配置文件的声明信息中,确定所述第二模块工程的模块名称对应的目标版本信息。

在一种可能实现的方式中,所述方法还包括:若所述编译模式为集成模式,则从二进制归档文件管理系统获取所述第二模块工程对应的二进制归档文件;根据所述二进制归档文件生成所述第一模块工程对应的目标应用程序包文件。

第二方面,一种模块开发装置,其特征在于,包括:

第一确定单元,用于确定第一模块工程对应的第二模块工程的编译模式,其中,所述第一模块工程包括第一模块的源代码,第二模块工程包括第二模块的源代码,且第一模块对第二模块具有依赖关系;

第一获取单元,用于若所述编译模式为联调模式,则从代码管理系统中获取所述第二模块对应的目标源代码;

子工程单元,用于将所述目标源代码以子工程的形式,以动态方式添加到所述第一模块工程中;

编辑单元,用于在所述第一模块工程的代码编辑器中,对所述第二模块的目标源代码进行编辑;

编译单元,用于对所述第一模块的源代码以及所述第二模块编辑后的目标源代码进行编译,得到编译结果。

在一种可能实现的方式中,所述第一确定单元,具体用于:确定所述第一模块工程依赖的所述第二模块工程的模块名称;根据所述模块名称,以及所述模块名称与版本信息之间的第一映射关系,确定所述模块名称对应的目标版本信息;根据所述目标版本信息,确定第一模块工程对第二模块工程的编译模式。

在一种可能实现的方式中,所述第一模块工程和所述第二模块工程均属于主工程;所述第一确定单元,用于确定所述第一模块工程依赖的所述第二模块工程的模块名称时,具体用于:确定所述主工程中的配置文件,其中,所述配置文件包括js对象简谱json数组,所述json数组中包括多个声明信息,且所述声明信息包括:一个模块工程所依赖的模块工程的模块名称,以及模块名称对应的版本信息;根据所述配置文件中的声明信息,确定所述第一模块工程依赖的第二模块工程的模块名称。

在一种可能实现的方式中,所述第一确定单元,用于根据所述模块名称以及所述模块名称与版本信息之间的映射关系,确定所述模块名称对应的目标版本信息时,具体用于:在所述配置文件的声明信息中,确定所述第二模块工程的模块名称对应的目标版本信息。

在一种可能实现的方式中,所述装置还包括:生成单元,用于若所述编译模式为集成模式,则从二进制归档文件管理系统获取所述第二模块工程对应的二进制归档文件;根据所述二进制归档文件生成所述第一模块工程对应的目标应用程序包文件。

第三方面,本申请实施例提供了一种模块开发装置,包括存储组件,处理组件和通信组件,存储组件,处理组件和通信组件相互连接,其中,存储组件用于存储计算机程序,通信组件用于与外部设备进行信息交互;处理组件被配置用于调用计算机程序,执行第一方面所述的方法,此处不再赘述

第四方面,本申请实施例提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现上述第一方面的方法。

第五方面,本申请实施例提供了一种计算机程序,该计算机程序包括指令,当该计算机程序被计算机执行时,使得计算机可以执行上述第二方面中的模块开发装置所执行的流程。

附图说明

为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。

图1是本申请实施例提供的一种模块开发的系统架构的示意图;

图2a是本申请实施例提供的一种模块开发方法流程的示意图;

图2b是本申请实施例提供的一种模块开发方法实际应用的流程示意图;

图3是本申请实施例提供的另一种模块开发方法流程的示意图;

图4是本申请实施例提供的一种模块开发装置的结构示意图;

图5是本申请实施例提供的另一种模块开发装置的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例进行描述。

本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

在本申请中使用的术语“服务器”、“单元”、“系统”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件、或执行中的软件。例如,服务器可以是但不限于,处理器,数据处理平台,计算设备,计算机,两个或更多个计算机等。

首先,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。

(1)js对象简谱(javascriptobjectnotation,json),是一种轻量级的数据交换格式。它基于ecmascript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

(2)安卓android,一个基于linux内核的开放源代码移动操作系统,是目前主流的手机操作系统之一,本申请所指的android开发可以指基于android系统的app应用开发。

(3)工程:一个程序往往包含多项功能,这些功能通常由许多个源代码文件实现,工程是对于这些源代码文件的一种组织形式,为具有一定结构的文件目录。

(4)子工程:在android中,一种工程内部可以继续按照功能划分为不同的子目录,每个子目录存储不同的源代码。

(5)模块:指复杂系统(整体)中的一个部分,可以理解为一个单独的功能模块。

(6)模块化:一种将复杂系统分解为更好的可管理模块的方式,在软件开发领域,指的是将某一个业务(功能)划分为独立部分进行开发与维护。

(7)aar(androidarchive),一种android中第三方库的存在形式。主要包含第三方库的代码(class文件)和资源。aar文件通常存放于maven仓库中。

(8)maven仓库:一个依赖管理系统,负责aar的版本管理。通常搭建在远程服务器中,所以也可称为maven服务器。其中,maven仓库被分为两类:本地仓库和远程仓库,但是远程仓库又分为三大类分别是:中央仓库、私服和其他仓库。

(9)git:一个开源的分布式版本控制系统。在软件开发领域通常用于存放和管理工程的源代码。

(10)apk(androidpackage),又称为androidapplicationpackage,android应用程序包。apk是android操作系统使用的一种类似symbiansis或sisx应用程序包文件格式,用于分发和安装移动应用及中间件。一个android应用程序的代码想要在android设备上运行,必须先进行编译,然后被打包成为一个被android系统所能识别的文件才可以被运行,而这种能被android系统识别并运行的文件格式便是“apk”。

其次,对本申请实施例所基于的其中一种模块开发系统架构进行描述。

情况一,模块开发装置可以为云端的一个服务器,这个服务器与本地终端构成一个系统,请参考附图1,图1是本申请实施例提供的一种模块开发的系统架构的示意图,如图1所示,系统架构可以包括一个或多个服务器(多个服务器可以构成一个服务器集群),以及一个或多个终端(或设备),其中包括:模块开发装置101和终端设备102。

模块开发装置101可以包括但不限于后台服务器、组件服务器、数据处理服务器、处理插件(如:gradle插件)等,当上述模块开发装置101为服务器时,所述服务器可以通过互联网与多个终端进行通信,服务器上也需要运行有相应的服务器端程序来提供相应模块开发服务。例如,服务器可以确定第一模块工程对第二模块工程的编译模式,其中,所述第一模块工程包括第一模块的源代码,第二模块工程包括第二模块的源代码,且第一模块对第二模块具有依赖关系;若所述编译模式为联调模式,则从代码管理系统中获取所述第二模块对应的目标源代码;将所述目标源代码以子工程的形式,动态添加到所述第一模块工程中;在所述第一模块工程的代码编辑器中,对所述第二模块的目标源代码进行编辑;对所述第一模块的源代码以及所述第二模块编辑后的目标源代码进行编译,得到编译结果。

终端设备102可以安装并运行相关的应用。应用是指与服务器相对应,为客户提供本地服务的程序。这里,该本地服务可包括但不限于:向服务器发送修改指令,所述修改指令用于修改子工程的目标源代码。其中,子工程包括:第一模块工程调用所述第二模块工程的第一功能对应的目标源代码等等。本方案实施例中的终端可以包括但不限于任何一种基于智能操作系统的电子产品,其可与用户通过键盘、虚拟键盘、触摸板、触摸屏以及声控设备等输入设备来进行人机交互,诸如智能手机、平板电脑、个人电脑等。其中,智能操作系统包括但不限于任何通过向移动设备提供各种移动应用来丰富设备功能的操作系统,诸如:安卓(androidtm)、iostm、windowsphonetm等。

情况二,系统架构可以是一个设备,这个设备可以为本地的一个终端,终端可以安装并运行相关的应用。应用是指与服务器相对应,为客户提供本地服务的程序。例如,该终端可以确定第一模块工程对第二模块工程的编译模式,其中,所述第一模块工程包括第一模块的源代码,第二模块工程包括第二模块的源代码,且第一模块对第二模块具有依赖关系;若所述编译模式为联调模式,则从代码管理系统中获取所述第二模块对应的目标源代码;将所述目标源代码以子工程的形式,动态添加到所述第一模块工程中;在所述第一模块工程的代码编辑器中,对所述第二模块的目标源代码进行编辑;对所述第一模块的源代码以及所述第二模块编辑后的目标源代码进行编译,得到编译结果。本方案实施例中的终端可以包括但不限于任何一种基于智能操作系统的电子产品,其可与用户通过键盘、虚拟键盘、触摸板、触摸屏以及声控设备等输入设备来进行人机交互,诸如智能手机、平板电脑、个人电脑等。其中,智能操作系统包括但不限于任何通过向移动设备提供各种移动应用来丰富设备功能的操作系统,诸如安卓(androidtm)、iostm、windowsphonetm等。

还可以理解的是,图1的模块开发系统架构只是本申请实施例中的部分示例性的实施方式,本申请实施例中的模块开发系统架构包括但不仅限于以上模块开发系统架构。

参考附图2a,图2a是本申请实施例提供的一种模块开发方法流程的示意图。可应用于上述图1中的系统,下面将结合图2a从模块开发装置101的单侧进行描述。该方法可以包括以下步骤s201-步骤s205。

步骤s201:确定第一模块工程对第二模块工程的编译模式。

具体地,模块开发装置可以确定第一模块工程对第二模块工程的编译模式,其中,所述第一模块工程包括第一模块的源代码,第二模块工程包括第二模块的源代码,且第一模块对第二模块具有依赖关系。其中,需要说明的是,模块工程是指模块化拆分后,每个业务(功能)以单独工程的形式存在。模块工程自己是一个完全独立的工程,不同模块工程之间不能够直接访问对方源码,只能通过aar的形式相互调用,具有一定的代码隔离的作用。所述第一模块工程调用所述第二模块工程的第一功能以实现第二功能,即,第一模块工程依赖第二模块工程。

可选的,模块开发装置确定第一模块工程对第二模块工程的编译模式可以包括:确定所述第一模块工程依赖的所述第二模块工程的模块名称;根据所述模块名称以及所述模块名称与版本信息之间的映射关系,确定所述模块名称对应的目标版本信息;根据所述目标版本信息,确定第一模块工程对第二模块工程的编译模式。

模块开发装置可以获取第一模块工程所依赖的第二模块工程的版本信息,根据版本信息确定第二工程模块的编译模式。可以理解的是:版本信息可以包括实际版本号(如1.0.0)、debug#git仓库地址(remotegitrepourl)#git分支名称(branchname)等,其中,不同的版本信息对应不同的编译模式。例如:实际版本号(如1.0.0)对应编译的集成模式。又例如:当第一模块工程在module.json中定义的所依赖的模块工程(即,第二模块工程)的版本信息为debug#git仓库地址(remotegitrepourl)#git分支名称(branchname)时,则编译过程会进入联调模式,该联调模式可以将对于其他模块工程的依赖方式由aar依赖切换为源码方式依赖。其中,git:一个开源的分布式版本控制系统。在软件开发领域通常用于存放和管理工程的源代码。

步骤s202:若编译模式为联调模式,则从代码管理系统中获取第二模块对应的目标源代码。

具体地,若版本信息包括仓库地址和分支名称,且所述编译模式为联调模式,模块开发装置,则从代码管理系统如git系统中获取所述第二模块对应的目标源代码,例如:根据仓库地址和分支名称获取对应的目标源代码。其中,仓库地址可以为远程git仓库地址,分支名称可以为该远程git分支名称。可选的,模块开发装置可以调用git命令行工具,从远程git仓库中使用remotegitrepourl命令将第二模块工程的目标源代码下载到本地的module-xxx目录(xxx为所依赖的模块工程的名称,如:第二工程模块),接着在命令行中使用cd命令进入下载好的module-xxx源码目录,再次使用git命令行工具将该git仓库切换到名称为branchname的分支。

步骤s203:将目标源代码以子工程的形式,动态添加到第一模块工程中。

具体地,模块开发装置将目标源代码以子工程的形式,以动态方式添加到第一模块工程中,以使第一模块工程对于第二模块工程的依赖由aar依赖切换为源代码依赖。

其中,子工程在本申请文件中又可称为子模块工程、子module工程。在android中,一种工程内部可以继续按照功能划分为不同的子目录,每个子目录存储不同的源代码,这种子目录称为子模块工程。

例如:请参考附图2b,图2b是本申请实施例提供的一种模块开发方法实际应用的流程示意图。动态修改模块描述文件(settings.gradle文件)的内容,将目标源代码(如:上述步骤s202中的module-xxx目录下的lib-xxx目录),以子module的形式,包含到当前工程的子module列表中。其中,settings.gradle文件在gradle构建工具中主要用于定义当前模块工程包含哪些子module工程。上述gradle是一个基于apacheant和apachemaven概念的项目自动化构建开源工具,使用一种基于groovy的特定领域语言(dsl)来声明项目设置。

需要说明的是:模块工程与子module工程虽然都可以包含一个独立的功能模块,但是不同子module工程之间由于仍然在同一个父目录中,并没有达到代码隔离的目的,而模块工程自己是一个完全独立的工程,不同模块工程之间不能够直接访问对方源码,只能通过aar的形式相互调用,具有一定的代码隔离的作用。

步骤s204:在第一模块工程的代码编辑器中,对第二模块的目标源代码进行编辑。

具体的,模块开发装置可以在第一模块工程的代码编辑器中,对第二模块的目标源代码进行编辑。例如:可以接收终端设备发送的修改指令,根据该修改指令修改子工程的目标源代码。开发者可以直接在当前第一模块工程中查看、修改与编译第二模块的源代码,免去了打开一个新工程、修改代码、发布aar、下载aar再进行验证的漫长工作流程,提高了开发效率,并且在这个模块联调的过程中不再需要反复发布aar,也节省了服务器资源。可选的,可以改为使用梯度插件(gradleplugin)的扩展(extension)参数传递方式来实现,技术人员只需要修改build.gradle新增对应extension参数,即可快速自动地将对于其他模块的依赖方式由aar依赖切换为源码方式依赖,其中,此声明与控制参数的传递在本申请中主要以独立配置文件的形式存在。

步骤s205:对第一模块的源代码以及第二模块编辑后的目标源代码进行编译,得到编译结果。

具体的,模块开发装置可以对第一模块的源代码以及第二模块编辑后的目标源代码进行编译,得到编译结果。

实施本申请实施例,可以首先确定第一模块工程对第二模块工程的编译模式,若所述编译模式为联调模式,则从代码管理系统中获取所述第二模块对应的目标源代码;将所述目标源代码以子工程的形式,以动态方式添加到所述第一模块工程中,并对目标源代码进行编辑后编译。将第一模块工程所需要调用的所述第二模块工程对应的目标源代码以子工程的形式,动态添加到该第一模块工程中(即将目标模块工程(如:第一模块工程)对于其他模块工程(如第二:模块工程)的依赖方式由aar依赖切换为源码方式依赖)后,用户可以直接在目标模块工程中查看、修改与编译另一个模块工程的源代码,免去了打开另一个模块工程、修改代码、发布aar、下载aar再进行验证的漫长工作流程,提高了开发效率,并且在这个修改测试的过程中不再需要反复发布aar,也节省了服务器资源。

参考附图3,图3是本申请实施例提供的另一种模块开发方法流程的示意图。可应用于上述图1中的系统,下面将结合图3从模块开发装置101的单侧进行描述。该方法可以包括以下步骤s301-步骤s304。

步骤s301:确定主工程中的配置文件。

具体地,模块化开发装置确定所述主工程中的配置文件,其中,所述配置文件包括js对象简谱json数组,所述json数组中包括多个声明信息,且所述声明信息包括:一个模块工程所依赖的模块工程的模块名称,以及模块名称对应的版本信息;根据所述配置文件中的声明信息,确定所述第一模块工程依赖的第二模块工程的模块名称。

首先,将主工程中的每个模块工程命名为module-xxx(其中,xxx为模块工程的模块名)。每个模块工程内部存在两个子module工程:lib-xxx与app。其中一方面,名为lib-xxx的子module为该模块的核心代码,在开发完成后,可以被编译打包为module-xxx.aar(即aar文件),上传至远程maven服务器被其他模块工程调用;另一方面,名为app的子module工程可以调用lib-xxx工程,用于在当前工程内部独立运行验证代码逻辑。

其次,主工程将统计或收集每个模块工程对应的模块名称以及该模块工程实现功能时所需要调用的其他模块工程的模块名称。然后,通过主工程中的一个module.json配置文件来声明该模块工程需要依赖的其他模块工程。该module.json配置文件内部包含一个js对象简谱json数组,数组中的每一项声明了需要依赖的模块的名称(name)和版本信息(version)。可选的,所述第一模块工程和所述第二模块工程均属于主工程。

可选的,所述根据所述模块名称以及所述模块名称与版本信息之间的映射关系,确定所述模块名称对应的目标版本信息,包括:在所述配置文件的声明信息中,确定所述第二模块工程的模块名称对应的目标版本信息。

步骤s302:根据配置文件中的声明信息,确定第一模块工程对第二模块工程的编译模式。

具体地,上述对步骤s302的描述可以对应参照图2a的步骤s201的描述,此处不再赘述。

步骤s303:若编译模式为集成模式,则从二进制归档文件管理系统获取所述第二模块工程对应的二进制归档文件。

具体地,若版本信息为预设版本信息,表示编译模式为集成模式,进而模块开发装置根据第二模块工程的模块名和版本信息,从二进制归档文件管理系统如maven仓库中获取所述第二模块工程对应的二进制归档文件。其中,预设版本信息可以为实际的数字版本信息,如5.3.4。其中预设版本信息为第二功能模块的二进制归档文件的版本信息。

步骤s304:根据二进制归档文件生成第一模块工程对应的目标应用程序包文件。

具体的,模块开发装置根据所述二进制归档文件生成所述第一模块工程对应的目标应用程序包文件。例如:当模块在module.json中定义所依赖的模块的version为实际版本信息(如1.0.0)的时候,则编译时会进入集成模式。本申请的模块开发装置会自动根据模块名和版本信息version去maven服务器下载对应的aar文件到本地,并为当前模块工程的lib-xxx子module添加对于aar文件的依赖。添加完成后,即可让另一模块工程的aar参与到当前模块工程的编译过程,即调用该aar文件实现的功能,最后生成当前模块工程的apk文件。在此过程中,aar文件是不可变的,当前模块工程只负责把aar文件实现的功能集成进来,此模式主要用于开发完毕后的apk打包过程。

实施本申请实施例,模块开发装置将第一模块工程调用的所述第二模块工程中的目标源代码以子工程的形式,动态添加到该第一模块工程中,即,本申请实施例将目标模块工程(如:第一模块工程)对于其他模块工程(如第二:模块工程)的依赖方式由aar依赖切换为源码方式依赖,修改与编译另一个模块工程的源代码前,还可以确定第二模块工程对应的版本信息是否为预设版本信息,若为预设版本信息即可直接调用第二模块工程aar文件,来执行或测试第一模块工程的相应功能,执行或测试的过程中不能修改第二模块工程对应的aar,也节省了修改时间。

总的来说,实施本申请,可以快速地将对于其他模块的依赖方式由aar依赖切换为源码方式依赖,开发者或相关技术人员可以直接在当前工程中查看、修改与编译另一个模块的源码,免去了打开另一个工程、修改代码、发布aar、下载aar再进行验证的漫长操作流程,提高了开发效率,并且在这个模块联调的过程中不再需要反复发布aar,也节省了服务器的资源。

上述详细阐述了本申请实施例的方法,下面提供了与本申请实施例的相关模块开发装置。请参考附图4,图4是本申请实施例提供的一种模块开发装置的结构示意图。可以包括:第一确定单元401,第一获取单元402,子工程单元403,编辑单元404和编译单元405;还可以包括:生成单元406。

第一确定单元401,用于确定第一模块工程对应的第二模块工程的编译模式,其中,所述第一模块工程包括第一模块的源代码,第二模块工程包括第二模块的源代码,且第一模块对第二模块具有依赖关系;

第一获取单元402,用于若所述编译模式为联调模式,则从代码管理系统中获取所述第二模块对应的目标源代码;

子工程单元403,用于将所述目标源代码以子工程的形式,以动态方式添加到所述第一模块工程中;

编辑单元404,用于在所述第一模块工程的代码编辑器中,对所述第二模块的目标源代码进行编辑;

编译单元405,用于对所述第一模块的源代码以及所述第二模块编辑后的目标源代码进行编译,得到编译结果。

在一种可能实现的方式中,所述第一确定单元401,具体用于:确定所述第一模块工程依赖的所述第二模块工程的模块名称;根据所述模块名称,以及所述模块名称与版本信息之间的第一映射关系,确定所述模块名称对应的目标版本信息;根据所述目标版本信息,确定第一模块工程对第二模块工程的编译模式。

在一种可能实现的方式中,所述第一模块工程和所述第二模块工程均属于主工程;所述第一确定单元401,用于确定所述第一模块工程依赖的所述第二模块工程的模块名称时,具体用于:确定所述主工程中的配置文件,其中,所述配置文件包括js对象简谱json数组,所述json数组中包括多个声明信息,且所述声明信息包括:一个模块工程所依赖的模块工程的模块名称,以及模块名称对应的版本信息;根据所述配置文件中的声明信息,确定所述第一模块工程依赖的第二模块工程的模块名称。

在一种可能实现的方式中,所述第一确定单元401,用于根据所述模块名称以及所述模块名称与版本信息之间的映射关系,确定所述模块名称对应的目标版本信息时,具体用于:在所述配置文件的声明信息中,确定所述第二模块工程的模块名称对应的目标版本信息。

在一种可能实现的方式中,所述装置还包括:生成单元406,用于若所述编译模式为集成模式,则从二进制归档文件管理系统获取所述第二模块工程对应的二进制归档文件;根据所述二进制归档文件生成所述第一模块工程对应的目标应用程序包文件。

需要说明的是,各个操作的实现还可以对应参照图2a至图3所示的方法实施例的相应描述,此处不再赘述。

如图5所示,图5是本申请实施例提供的另一种模块开发装置的结构示意图,该装置20包括至少一个处理器501,至少一个存储器502、至少一个通信接口503。此外,该设备还可以包括天线等通用部件,在此不再详述。

处理器501可以是通用中央处理器(cpu),微处理器,特定应用集成电路(application-specificintegratedcircuit,asic),或一个或多个用于控制以上方案程序执行的集成电路。

通信接口503,用于与其他设备或通信网络通信,如以太网,无线接入网(ran),核心网,无线局域网(wirelesslocalareanetworks,wlan)等。

存储器502可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。

其中,所述存储器502用于存储执行以上方案的应用程序代码,并由处理器501来控制执行。所述处理器501用于执行所述存储器502中存储的应用程序代码。

存储器502存储的代码可执行以上图2a或图3提供的模块开发方法,比如,当装置20为模块开发101时,可以确定第一模块工程对第二模块工程的编译模式,其中,所述第一模块工程包括第一模块的源代码,第二模块工程包括第二模块的源代码,且第一模块对第二模块具有依赖关系;若所述编译模式为联调模式,则从代码管理系统中获取所述第二模块对应的目标源代码;将所述目标源代码以子工程的形式,动态添加到所述第一模块工程中;在所述第一模块工程的代码编辑器中,对所述第二模块的目标源代码进行编辑;对所述第一模块的源代码以及所述第二模块编辑后的目标源代码进行编译,得到编译结果。

需要说明的是,本申请实施例中所描述的模块开发装置20中各功能单元的功能可参照图2a至图3所示的方法实施例的相应描述,此处不再赘述。

在本申请中,所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。

另外,在本申请各个实施例中的各功能组件可以集成在一个组件也可以是各个组件单独物理存在,也可以是两个或两个以上组件集成在一个组件中。上述集成的组件既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的组件如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个本申请实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。尽管在此结合各实施例对本申请进行了描述,然而,在实施例所要求保护的本申请过程中,本领域技术人员可理解并实现公开实施例的其他变化。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1