一种移动端业务模块组件化的配置方法及系统与流程

文档序号:14175006阅读:164来源:国知局
一种移动端业务模块组件化的配置方法及系统与流程

本发明涉及移动端技术领域,尤其涉及一种移动端业务模块组件化的配置方法及系统。



背景技术:

最近几年随着移动互联网的兴起和繁荣,许多公司都将自己在传统平台上的业务移植到了移动端,随着移动客户端的更新迭代,app上的功能和业务也越来越多,越来越多的代码开始往小小的客户端涌入,尤其是一些航母级应用,各种业务模块都需要在其上面进行推广。而无论是ios系统还是android系统,各种客户端的体积也变得臃肿庞大。为了降低大型移动客户端软件开发的复杂性和耦合度,同时也为了适应模块重用、多团队并行开发测试等等需求,迫切需要一种技术能把客户端化整为零,这些模块可以自由组合,并且当部分功能变更时只需要更新对应模块,因此模块的组件化配置在android平台上应运而生。

通常大型的移动客户端均有一个主工程和一些子模块构成,主工程就是客户端的核心业务代码,子模块有网络库,图片库等通用依赖库和登录,分享,游戏等业务模块库,这就是软件开发中的“模块化”。其中通用依赖库一般是一些第三方开源库或者是公司内部统一的基础服务,一般来说改动频率很低。而业务模块库是随着公司业务发展的过程不断更新和迭代的,很有可能是独立于主工程由另一个团队完成的。传统的做法是该模块会以sdk(softwaredevelopmentkit,软件开发工具包)或者源码的方式直接集成到主工程中来,然后跟随着主工程的开发和测试流程走。

综上所述,现有技术的缺点主要有:1、代码的解耦和隔离:由于模块开发初期一般是以源码方式和主工程一起开发,导致模块和主工程耦合较高,代码也没有隔离,主工程容易误引用到模块中的代码和资源,从而可能会导致一些不易发现的问题。2、模块无法单独运行和调试:由于模块在项目中是以库的形式存在,所以不能单独运行和调试该模块。3、项目编译和构建时间长:每次重新构建项目时每个模块都要重新构建和编译源码,导致多模块的大型项目构建时间很长,影响开发效率。



技术实现要素:

有鉴于此,本发明提供了一种移动端业务模块组件化的配置方法,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

本发明提供了一种移动端业务模块组件化的配置方法,所述方法包括:

将模块源码从项目中独立;

配置使模块独立编译、调试和运行的gradle脚本;

对代码进行隔离处理;

对版本进行优化控制。

优选地,所述将模块源码从项目中独立包括:

新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块。

优选地,所述配置使模块独立编译、调试和运行的gradle脚本包括:

在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;

新建清单文件,在所述清单文件中指定程序入口的activity;

在demo主工程中基于所述变量isbuildmodule判断是否编译模块库。

优选地,所述对代码进行隔离处理包括:

通过在资源名前添加前缀进行解耦模块间的跳转。

优选地,所述对版本进行优化控制包括:

将生成的aar文件发布到远程仓库。

一种移动端业务模块组件化的配置系统,包括:

独立模块,用于将模块源码从项目中独立;

配置模块,用于配置使模块独立编译、调试和运行的gradle脚本;

隔离处理模块,用于对代码进行隔离处理;

优化控制模块,用于对版本进行优化控制。

优选地,所述独立模块包括:

新建单元,用于新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块。

优选地,所述配置模块,包括:

标识配置单元,用于在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;

指定单元,用于新建清单文件,在所述清单文件中指定程序入口的activity;

判断单元,用于在demo主工程中基于所述变量isbuildmodule判断是否编译模块库。

优选地,所述隔离处理模块包括:

添加单元,用于在资源名前添加前缀进行解耦模块间的跳转。

优选地,所述优化控制模块包括:

发布单元,用于将生成的aar文件发布到远程仓库。

从上述技术方案可以看出,本发明提供了一种移动端业务模块组件化的配置方法,首先将模块源码从项目中独立,然后配置使模块独立编译、调试和运行的gradle脚本,对代码进行隔离处理以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明公开的一种移动端业务模块组件化的配置方法实施例1的方法流程图;

图2为本发明公开的一种移动端业务模块组件化的配置方法实施例2的方法流程图;

图3为本发明公开的一种移动端业务模块组件化的配置方法实施例3的方法流程图;

图4为本发明公开的一种移动端业务模块组件化的配置方法实施例4的方法流程图;

图5为本发明公开的一种移动端业务模块组件化的配置方法实施例5的方法流程图;

图6为本发明公开的一种移动端业务模块组件化的配置系统实施例1的结构示意图;

图7为本发明公开的一种移动端业务模块组件化的配置系统实施例2的结构示意图;

图8为本发明公开的一种移动端业务模块组件化的配置系统实施例3的结构示意图;

图9为本发明公开的一种移动端业务模块组件化的配置系统实施例4的结构示意图;

图10为本发明公开的一种移动端业务模块组件化的配置系统实施例5的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,为本发明公开的一种移动端业务模块组件化的配置方法的实施例1的流程图,所述方法可以包括以下步骤:

s101、将模块源码从项目中独立;

当需要对移动端业务模块组件化进行配置时,首先新建模块工程,将模块源码从项目中独立出来。

s102、配置使模块独立编译、调试和运行的gradle脚本;

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

s103、对代码进行隔离处理;

然后进一步对一些代码进行隔离,对于代码隔离,主要工作即代码混淆

s104、对版本进行优化控制。

并且进一步对版本进行优化控制。

综上所述,在上述实施例中,首先将模块源码从项目中独立,然后配置使模块独立编译、调试和运行的gradle脚本,对代码进行隔离处理以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图2所示,为本发明公开的一种移动端业务模块组件化的配置方法的实施例2的流程图,所述方法可以包括以下步骤:

s201、新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块;

在将模块源码从项目中独立出来时,通过新建模块工程,其中包括:底层依赖库模块,本模块,和一个空的demo主工程。其中主工程只是作为程序入口跳转到本模块。

s202、配置使模块独立编译、调试和运行的gradle脚本;

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

s203、对代码进行隔离处理;

然后进一步对一些代码进行隔离,对于代码隔离,主要工作即代码混淆

s204、对版本进行优化控制。

并且进一步对版本进行优化控制。

综上所述,在上述实施例中,首先新建依赖库模块、本模块和一个空的demo主工程,然后配置使模块独立编译、调试和运行的gradle脚本,对代码进行隔离处理以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图3所示,为本发明公开的一种移动端业务模块组件化的配置方法的实施例3的流程图,所述方法可以包括以下步骤:

s301、新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块;

在将模块源码从项目中独立出来时,通过新建模块工程,其中包括:底层依赖库模块,本模块,和一个空的demo主工程。其中主工程只是作为程序入口跳转到本模块。

s302、在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;

s303、新建清单文件,在所述清单文件中指定程序入口的activity;

s304、在demo主工程中基于所述变量isbuildmodule判断是否编译模块库;

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

首先需要一个标识来标识模块是否可以独立运行,通过在gradle的属性文件中配置一个变量isbuildmodule设为true或者false来标识模块是否可以独立运行,这时模块的构建脚本就可以根据该变量应用com.android.library插件或者com.android.application插件,实现模块可以独立运行的目的。

其次模块还需要指定程序入口,所以需要新建一个清单文件,在里面指定入口的activity,根据isbuildmodule来决定android.sourcesets.main中的清单文件manifest.srcfile使用哪个。

最后在demo的主工程中根据isbuildmodule判断是否编译模块库,这样就实现了模块的独立运行和调试。通过gradle构建后便可以生成模块的aar文件,主工程便可以引用该aar文件而不是之前的源代码,使得项目的结构更为清晰。

s305、对代码进行隔离处理;

然后进一步对一些代码进行隔离,对于代码隔离,主要工作即代码混淆

s306、对版本进行优化控制。

并且进一步对版本进行优化控制。

综上所述,在上述实施例中,首先新建依赖库模块、本模块和一个空的demo主工程,然后在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;新建清单文件,在所清单文件中指定程序入口的activity;在demo主工程中基于所述变量isbuildmodule判断是否编译模块库,对代码进行隔离处理以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图4所示,为本发明公开的一种移动端业务模块组件化的配置方法的实施例4的流程图,所述方法可以包括以下步骤:

s401、新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块;

在将模块源码从项目中独立出来时,通过新建模块工程,其中包括:底层依赖库模块,本模块,和一个空的demo主工程。其中主工程只是作为程序入口跳转到本模块。

s402、在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;

s403、新建清单文件,在所述清单文件中指定程序入口的activity;

s404、在demo主工程中基于所述变量isbuildmodule判断是否编译模块库

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

首先需要一个标识来标识模块是否可以独立运行,通过在gradle的属性文件中配置一个变量isbuildmodule设为true或者false来标识模块是否可以独立运行,这时模块的构建脚本就可以根据该变量应用com.android.library插件或者com.android.application插件,实现模块可以独立运行的目的。

其次模块还需要指定程序入口,所以需要新建一个清单文件,在里面指定入口的activity,根据isbuildmodule来决定android.sourcesets.main中的清单文件manifest.srcfile使用哪个。

最后在demo的主工程中根据isbuildmodule判断是否编译模块库,这样就实现了模块的独立运行和调试。通过gradle构建后便可以生成模块的aar文件,主工程便可以引用该aar文件而不是之前的源代码,使得项目的结构更为清晰。

s405、通过在资源名前添加前缀进行解耦模块间的跳转;

对于代码隔离,主要是代码混淆,资源名加前缀和解耦模块间跳转。代码混淆可以在gralde中加入minifyenabledtrue,然后在proguard文件中排除掉想要暴露给主工程的类,方法等。而通过resourceprefix"game_plugin"通过给模块设置不同的资源前缀,可以避免重复命名,主工程也不会误引用模块中的资源。模块间的activity或者fragment的跳转可以通过类名获取到该类,模块需要一个类来存放所以有界面类的类名。其中activity还可以通过设置intent-filter隐式启动实现。

s406、对版本进行优化控制。

并且进一步对版本进行优化控制。

综上所述,在上述实施例中,首先新建依赖库模块、本模块和一个空的demo主工程,然后在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;新建清单文件,在所清单文件中指定程序入口的activity;在demo主工程中基于所述变量isbuildmodule判断是否编译模块库,通过在资源名前添加前缀进行解耦模块间的跳转以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图5所示,为本发明公开的一种移动端业务模块组件化的配置方法的实施例5的流程图,所述方法可以包括以下步骤:

s501、新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块;

在将模块源码从项目中独立出来时,通过新建模块工程,其中包括:底层依赖库模块,本模块,和一个空的demo主工程。其中主工程只是作为程序入口跳转到本模块。

s502、在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;

s503、新建清单文件,在所述清单文件中指定程序入口的activity;

s504、在demo主工程中基于所述变量isbuildmodule判断是否编译模块库

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

首先需要一个标识来标识模块是否可以独立运行,通过在gradle的属性文件中配置一个变量isbuildmodule设为true或者false来标识模块是否可以独立运行,这时模块的构建脚本就可以根据该变量应用com.android.library插件或者com.android.application插件,实现模块可以独立运行的目的。

其次模块还需要指定程序入口,所以需要新建一个清单文件,在里面指定入口的activity,根据isbuildmodule来决定android.sourcesets.main中的清单文件manifest.srcfile使用哪个。

最后在demo的主工程中根据isbuildmodule判断是否编译模块库,这样就实现了模块的独立运行和调试。通过gradle构建后便可以生成模块的aar文件,主工程便可以引用该aar文件而不是之前的源代码,使得项目的结构更为清晰。

s505、通过在资源名前添加前缀进行解耦模块间的跳转;

对于代码隔离,主要是代码混淆,资源名加前缀和解耦模块间跳转。代码混淆可以在gralde中加入minifyenabledtrue,然后在proguard文件中排除掉想要暴露给主工程的类,方法等。而通过resourceprefix"game_plugin"通过给模块设置不同的资源前缀,可以避免重复命名,主工程也不会误引用模块中的资源。模块间的activity或者fragment的跳转可以通过类名获取到该类,模块需要一个类来存放所以有界面类的类名。其中activity还可以通过设置intent-filter隐式启动实现。

s506、将生成的aar文件发布到远程仓库。

并且进一步对版本进行优化控制。对于版本控制,会将生成的aar文件发布到远程仓库,这样更方便主工程对该模块的集成和版本控制。使用jfrogbintray的软件分发服务,首先需要在模块的gradle中配置应用com.github.dcendents.android-maven和com.jfrog.bintray插件,然后设置version=“1.0.0”定义发布aar的版本号,定义siteurl和giturl分别为该模块项目主页和项目的git地址。接下来还需要打包sourcesjar、javadoc和javadocjar,定义pom并打包aar,最后配置bintray参数和上传配置,执行./gradlew-pgame-plugin/cleanbuildbintrayupload就可以上传1.0.0版本的模块aar到远程仓库。接下来主工程修改依赖为compile("com.sohu.sohuvideo:game-plugin:1.0.0")即可。

综上所述,在上述实施例中,首先新建依赖库模块、本模块和一个空的demo主工程,然后在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;新建清单文件,在所清单文件中指定程序入口的activity;在demo主工程中基于所述变量isbuildmodule判断是否编译模块库,通过在资源名前添加前缀进行解耦模块间的跳转,以及将生成的aar文件发布到远程仓库对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图6所示,为本发明公开的一种移动端业务模块组件化的配置系统的实施例1的结构示意图,所述系统可以包括:

独立模块601,用于将模块源码从项目中独立;

当需要对移动端业务模块组件化进行配置时,首先新建模块工程,将模块源码从项目中独立出来。

配置模块602,用于配置使模块独立编译、调试和运行的gradle脚本;

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

隔离处理模块603,用于对代码进行隔离处理;

然后进一步对一些代码进行隔离,对于代码隔离,主要工作即代码混淆

优化控制模块604,用于对版本进行优化控制。

并且进一步对版本进行优化控制。

综上所述,在上述实施例中,首先将模块源码从项目中独立,然后配置使模块独立编译、调试和运行的gradle脚本,对代码进行隔离处理以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图7所示,为本发明公开的一种移动端业务模块组件化的配置系统的实施例2的结构示意图,所述系统可以包括:

新建单元701,用于新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块;

在将模块源码从项目中独立出来时,通过新建模块工程,其中包括:底层依赖库模块,本模块,和一个空的demo主工程。其中主工程只是作为程序入口跳转到本模块。

配置模块702,用于配置使模块独立编译、调试和运行的gradle脚本;

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

隔离处理模块703,用于对代码进行隔离处理;

然后进一步对一些代码进行隔离,对于代码隔离,主要工作即代码混淆

优化控制模块704,用于对版本进行优化控制。

并且进一步对版本进行优化控制。

综上所述,在上述实施例中,首先新建依赖库模块、本模块和一个空的demo主工程,然后配置使模块独立编译、调试和运行的gradle脚本,对代码进行隔离处理以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图8所示,为本发明公开的一种移动端业务模块组件化的配置系统的实施例3的结构示意图,所述系统可以包括:

新建单元801,用于新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块;

在将模块源码从项目中独立出来时,通过新建模块工程,其中包括:底层依赖库模块,本模块,和一个空的demo主工程。其中主工程只是作为程序入口跳转到本模块。

标识配置单元802,用于在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;

指定单元803,用于新建清单文件,在所述清单文件中指定程序入口的activity;

判断单元804,用于在demo主工程中基于所述变量isbuildmodule判断是否编译模块库

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

首先需要一个标识来标识模块是否可以独立运行,通过在gradle的属性文件中配置一个变量isbuildmodule设为true或者false来标识模块是否可以独立运行,这时模块的构建脚本就可以根据该变量应用com.android.library插件或者com.android.application插件,实现模块可以独立运行的目的。

其次模块还需要指定程序入口,所以需要新建一个清单文件,在里面指定入口的activity,根据isbuildmodule来决定android.sourcesets.main中的清单文件manifest.srcfile使用哪个。

最后在demo的主工程中根据isbuildmodule判断是否编译模块库,这样就实现了模块的独立运行和调试。通过gradle构建后便可以生成模块的aar文件,主工程便可以引用该aar文件而不是之前的源代码,使得项目的结构更为清晰。

隔离处理模块805,用于对代码进行隔离处理;

然后进一步对一些代码进行隔离,对于代码隔离,主要工作即代码混淆

优化控制模块806,用于对版本进行优化控制。

并且进一步对版本进行优化控制。

综上所述,在上述实施例中,首先新建依赖库模块、本模块和一个空的demo主工程,然后在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;新建清单文件,在所清单文件中指定程序入口的activity;在demo主工程中基于所述变量isbuildmodule判断是否编译模块库,对代码进行隔离处理以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图9所示,为本发明公开的一种移动端业务模块组件化的配置系统的实施例4的结构示意图,所述系统可以包括:

新建单元901,用于新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块;

在将模块源码从项目中独立出来时,通过新建模块工程,其中包括:底层依赖库模块,本模块,和一个空的demo主工程。其中主工程只是作为程序入口跳转到本模块。

标识配置单元902,用于在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;

指定单元903,用于新建清单文件,在所述清单文件中指定程序入口的activity;

判断单元904,用于在demo主工程中基于所述变量isbuildmodule判断是否编译模块库

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

首先需要一个标识来标识模块是否可以独立运行,通过在gradle的属性文件中配置一个变量isbuildmodule设为true或者false来标识模块是否可以独立运行,这时模块的构建脚本就可以根据该变量应用com.android.library插件或者com.android.application插件,实现模块可以独立运行的目的。

其次模块还需要指定程序入口,所以需要新建一个清单文件,在里面指定入口的activity,根据isbuildmodule来决定android.sourcesets.main中的清单文件manifest.srcfile使用哪个。

最后在demo的主工程中根据isbuildmodule判断是否编译模块库,这样就实现了模块的独立运行和调试。通过gradle构建后便可以生成模块的aar文件,主工程便可以引用该aar文件而不是之前的源代码,使得项目的结构更为清晰。

添加单元905,用于通过在资源名前添加前缀进行解耦模块间的跳转;

对于代码隔离,主要是代码混淆,资源名加前缀和解耦模块间跳转。代码混淆可以在gralde中加入minifyenabledtrue,然后在proguard文件中排除掉想要暴露给主工程的类,方法等。而通过resourceprefix"game_plugin"通过给模块设置不同的资源前缀,可以避免重复命名,主工程也不会误引用模块中的资源。模块间的activity或者fragment的跳转可以通过类名获取到该类,模块需要一个类来存放所以有界面类的类名。其中activity还可以通过设置intent-filter隐式启动实现。

优化控制模块906,用于对版本进行优化控制。

并且进一步对版本进行优化控制。

综上所述,在上述实施例中,首先新建依赖库模块、本模块和一个空的demo主工程,然后在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;新建清单文件,在所清单文件中指定程序入口的activity;在demo主工程中基于所述变量isbuildmodule判断是否编译模块库,通过在资源名前添加前缀进行解耦模块间的跳转以及对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

如图10所示,为本发明公开的一种移动端业务模块组件化的配置系统的实施例5的结构示意图,所述系统可以包括:

新建单元1001,用于新建依赖库模块、本模块和一个空的demo主工程,所述demo主工程作为程序入口跳转到所述本模块;

在将模块源码从项目中独立出来时,通过新建模块工程,其中包括:底层依赖库模块,本模块,和一个空的demo主工程。其中主工程只是作为程序入口跳转到本模块。

标识配置单元1002,用于在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;

指定单元1003,用于新建清单文件,在所述清单文件中指定程序入口的activity;

判断单元1004,用于在demo主工程中基于所述变量isbuildmodule判断是否编译模块库

当将模块源码从项目中独立出来后,进一步配置脚本gradle使模块组件化,达到独立编译、调试和运行。

首先需要一个标识来标识模块是否可以独立运行,通过在gradle的属性文件中配置一个变量isbuildmodule设为true或者false来标识模块是否可以独立运行,这时模块的构建脚本就可以根据该变量应用com.android.library插件或者com.android.application插件,实现模块可以独立运行的目的。

其次模块还需要指定程序入口,所以需要新建一个清单文件,在里面指定入口的activity,根据isbuildmodule来决定android.sourcesets.main中的清单文件manifest.srcfile使用哪个。

最后在demo的主工程中根据isbuildmodule判断是否编译模块库,这样就实现了模块的独立运行和调试。通过gradle构建后便可以生成模块的aar文件,主工程便可以引用该aar文件而不是之前的源代码,使得项目的结构更为清晰。

添加单元1005,用于通过在资源名前添加前缀进行解耦模块间的跳转;

对于代码隔离,主要是代码混淆,资源名加前缀和解耦模块间跳转。代码混淆可以在gralde中加入minifyenabledtrue,然后在proguard文件中排除掉想要暴露给主工程的类,方法等。而通过resourceprefix"game_plugin"通过给模块设置不同的资源前缀,可以避免重复命名,主工程也不会误引用模块中的资源。模块间的activity或者fragment的跳转可以通过类名获取到该类,模块需要一个类来存放所以有界面类的类名。其中activity还可以通过设置intent-filter隐式启动实现。

发布单元1006,用于将生成的aar文件发布到远程仓库。

并且进一步对版本进行优化控制。对于版本控制,会将生成的aar文件发布到远程仓库,这样更方便主工程对该模块的集成和版本控制。使用jfrogbintray的软件分发服务,首先需要在模块的gradle中配置应用com.github.dcendents.android-maven和com.jfrog.bintray插件,然后设置version=“1.0.0”定义发布aar的版本号,定义siteurl和giturl分别为该模块项目主页和项目的git地址。接下来还需要打包sourcesjar、javadoc和javadocjar,定义pom并打包aar,最后配置bintray参数和上传配置,执行./gradlew-pgame-plugin/cleanbuildbintrayupload就可以上传1.0.0版本的模块aar到远程仓库。接下来主工程修改依赖为compile("com.sohu.sohuvideo:game-plugin:1.0.0")即可。

综上所述,在上述实施例中,首先新建依赖库模块、本模块和一个空的demo主工程,然后在gradle的属性文件中配置标识模块是否可以独立运行的变量isbuildmodule;新建清单文件,在所清单文件中指定程序入口的activity;在demo主工程中基于所述变量isbuildmodule判断是否编译模块库,通过在资源名前添加前缀进行解耦模块间的跳转,以及将生成的aar文件发布到远程仓库对版本进行优化控制,能够有效降低代码模块的耦合度,使代码架构更加清晰,使得模块可以与主工程独立开发、运行和调试,同时模块化的编译可以有效减少编译时间。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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