CN107908403A - 一种移动端业务模块组件化的配置方法及系统 - Google Patents

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

Info

Publication number
CN107908403A
CN107908403A CN201711103838.3A CN201711103838A CN107908403A CN 107908403 A CN107908403 A CN 107908403A CN 201711103838 A CN201711103838 A CN 201711103838A CN 107908403 A CN107908403 A CN 107908403A
Authority
CN
China
Prior art keywords
module
code
demo
gradle
main works
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
CN201711103838.3A
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.)
Beijing Sohu New Media Information Technology Co Ltd
Original Assignee
Beijing Sohu New Media Information Technology 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 Beijing Sohu New Media Information Technology Co Ltd filed Critical Beijing Sohu New Media Information Technology Co Ltd
Priority to CN201711103838.3A priority Critical patent/CN107908403A/zh
Publication of CN107908403A publication Critical patent/CN107908403A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • 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/70Software maintenance or management
    • G06F8/73Program documentation

Landscapes

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

Abstract

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

Description

一种移动端业务模块组件化的配置方法及系统
技术领域
本发明涉及移动端技术领域,尤其涉及一种移动端业务模块组件化的配置方法及系统。
背景技术
最近几年随着移动互联网的兴起和繁荣,许多公司都将自己在传统平台上的业务移植到了移动端,随着移动客户端的更新迭代,APP上的功能和业务也越来越多,越来越多的代码开始往小小的客户端涌入,尤其是一些航母级应用,各种业务模块都需要在其上面进行推广。而无论是iOS系统还是Android系统,各种客户端的体积也变得臃肿庞大。为了降低大型移动客户端软件开发的复杂性和耦合度,同时也为了适应模块重用、多团队并行开发测试等等需求,迫切需要一种技术能把客户端化整为零,这些模块可以自由组合,并且当部分功能变更时只需要更新对应模块,因此模块的组件化配置在Android平台上应运而生。
通常大型的移动客户端均有一个主工程和一些子模块构成,主工程就是客户端的核心业务代码,子模块有网络库,图片库等通用依赖库和登录,分享,游戏等业务模块库,这就是软件开发中的“模块化”。其中通用依赖库一般是一些第三方开源库或者是公司内部统一的基础服务,一般来说改动频率很低。而业务模块库是随着公司业务发展的过程不断更新和迭代的,很有可能是独立于主工程由另一个团队完成的。传统的做法是该模块会以SDK(Software Development Kit,软件开发工具包)或者源码的方式直接集成到主工程中来,然后跟随着主工程的开发和测试流程走。
综上所述,现有技术的缺点主要有: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中加入minifyEnabled true,然后在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中加入minifyEnabled true,然后在proguard文件中排除掉想要暴露给主工程的类,方法等。而通过resourcePrefix"game_plugin"通过给模块设置不同的资源前缀,可以避免重复命名,主工程也不会误引用模块中的资源。模块间的Activity或者Fragment的跳转可以通过类名获取到该类,模块需要一个类来存放所以有界面类的类名。其中Activity还可以通过设置intent-filter隐式启动实现。
S506、将生成的AAR文件发布到远程仓库。
并且进一步对版本进行优化控制。对于版本控制,会将生成的AAR文件发布到远程仓库,这样更方便主工程对该模块的集成和版本控制。使用jfrog bintray的软件分发服务,首先需要在模块的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/clean build bintrayUpload就可以上传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中加入minifyEnabled true,然后在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中加入minifyEnabled true,然后在proguard文件中排除掉想要暴露给主工程的类,方法等。而通过resourcePrefix"game_plugin"通过给模块设置不同的资源前缀,可以避免重复命名,主工程也不会误引用模块中的资源。模块间的Activity或者Fragment的跳转可以通过类名获取到该类,模块需要一个类来存放所以有界面类的类名。其中Activity还可以通过设置intent-filter隐式启动实现。
发布单元1006,用于将生成的AAR文件发布到远程仓库。
并且进一步对版本进行优化控制。对于版本控制,会将生成的AAR文件发布到远程仓库,这样更方便主工程对该模块的集成和版本控制。使用jfrog bintray的软件分发服务,首先需要在模块的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/clean build bintrayUpload就可以上传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、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种移动端业务模块组件化的配置方法,其特征在于,所述方法包括:
将模块源码从项目中独立;
配置使模块独立编译、调试和运行的gradle脚本;
对代码进行隔离处理;
对版本进行优化控制。
2.根据权利要求1所述的方法,其特征在于,所述将模块源码从项目中独立包括:
新建依赖库模块、本模块和一个空的Demo主工程,所述Demo主工程作为程序入口跳转到所述本模块。
3.根据权利要求2所述的方法,其特征在于,所述配置使模块独立编译、调试和运行的gradle脚本包括:
在gradle的属性文件中配置标识模块是否可以独立运行的变量IsBuildModule;
新建清单文件,在所述清单文件中指定程序入口的activity;
在Demo主工程中基于所述变量IsBuildModule判断是否编译模块库。
4.根据权利要求3所述的方法,其特征在于,所述对代码进行隔离处理包括:
通过在资源名前添加前缀进行解耦模块间的跳转。
5.根据权利要求4所述的方法,其特征在于,所述对版本进行优化控制包括:
将生成的AAR文件发布到远程仓库。
6.一种移动端业务模块组件化的配置系统,其特征在于,包括:
独立模块,用于将模块源码从项目中独立;
配置模块,用于配置使模块独立编译、调试和运行的gradle脚本;
隔离处理模块,用于对代码进行隔离处理;
优化控制模块,用于对版本进行优化控制。
7.根据权利要求6所述的系统,其特征在于,所述独立模块包括:
新建单元,用于新建依赖库模块、本模块和一个空的Demo主工程,所述Demo主工程作为程序入口跳转到所述本模块。
8.根据权利要求7所述的系统,其特征在于,所述配置模块,包括:
标识配置单元,用于在gradle的属性文件中配置标识模块是否可以独立运行的变量IsBuildModule;
指定单元,用于新建清单文件,在所述清单文件中指定程序入口的activity;
判断单元,用于在Demo主工程中基于所述变量IsBuildModule判断是否编译模块库。
9.根据权利要求8所述的系统,其特征在于,所述隔离处理模块包括:
添加单元,用于在资源名前添加前缀进行解耦模块间的跳转。
10.根据权利要求9所述的系统,其特征在于,所述优化控制模块包括:
发布单元,用于将生成的AAR文件发布到远程仓库。
CN201711103838.3A 2017-11-10 2017-11-10 一种移动端业务模块组件化的配置方法及系统 Pending CN107908403A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711103838.3A CN107908403A (zh) 2017-11-10 2017-11-10 一种移动端业务模块组件化的配置方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711103838.3A CN107908403A (zh) 2017-11-10 2017-11-10 一种移动端业务模块组件化的配置方法及系统

Publications (1)

Publication Number Publication Date
CN107908403A true CN107908403A (zh) 2018-04-13

Family

ID=61844642

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711103838.3A Pending CN107908403A (zh) 2017-11-10 2017-11-10 一种移动端业务模块组件化的配置方法及系统

Country Status (1)

Country Link
CN (1) CN107908403A (zh)

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108733376A (zh) * 2018-04-27 2018-11-02 链家网(北京)科技有限公司 组件化下利用一套源码编译多个Android APP的方法及装置
CN108984161A (zh) * 2018-06-21 2018-12-11 广州视源电子科技股份有限公司 一种统一且可分类拓展的软件安装包构建方法和装置
CN109614081A (zh) * 2018-11-26 2019-04-12 Oppo广东移动通信有限公司 浏览器实现方法、装置及移动终端
CN109656536A (zh) * 2018-12-25 2019-04-19 武汉斗鱼网络科技有限公司 一种推送模块组件化的方法及客户端
CN109656616A (zh) * 2018-11-26 2019-04-19 平安科技(深圳)有限公司 一种基于事务处理过程优化的打包方法、系统及电子设备
CN109857405A (zh) * 2019-02-02 2019-06-07 Oppo广东移动通信有限公司 应用程序安装包的编译方法、装置、存储介质及终端
CN110187902A (zh) * 2019-04-15 2019-08-30 中国平安人寿保险股份有限公司 基于spring boot的项目改造方法、装置、设备及存储介质
CN110321131A (zh) * 2019-07-05 2019-10-11 北京百佑科技有限公司 业务组件打包方法、系统及服务器
CN110366118A (zh) * 2019-07-05 2019-10-22 广州市百果园信息技术有限公司 一种电台、应用程序及实现电台功能的方法
CN110377367A (zh) * 2019-07-24 2019-10-25 广州虎牙科技有限公司 组件配置方法、装置、电子终端及计算机可读存储介质
CN110795102A (zh) * 2019-09-27 2020-02-14 上海掌门科技有限公司 模块编译方法、装置、电子设备和计算机可读介质
CN111008009A (zh) * 2019-11-05 2020-04-14 贝壳技术有限公司 基于Flutter的业务组件化方法及系统
CN111273940A (zh) * 2018-12-05 2020-06-12 北京奇虎科技有限公司 将程序文件上传至代码仓库的方法及装置
CN111324333A (zh) * 2018-12-17 2020-06-23 中移(杭州)信息技术有限公司 一种基于组件化的软件开发方法及装置
CN111367510A (zh) * 2020-02-24 2020-07-03 腾讯音乐娱乐科技(深圳)有限公司 一种安卓功能模块开发的方法及装置
CN111399840A (zh) * 2020-03-04 2020-07-10 腾讯音乐娱乐科技(深圳)有限公司 一种模块开发方法及装置
CN111796817A (zh) * 2020-07-22 2020-10-20 睿智合创(北京)科技有限公司 针对iOS高内聚低耦合处理方法、系统及电子设备
CN112256322A (zh) * 2020-12-22 2021-01-22 畅捷通信息技术股份有限公司 一种应用程序版本动态区隔方法、装置、介质
CN112860232A (zh) * 2019-11-28 2021-05-28 杭州萤石软件有限公司 组件实施方法及装置
CN112965720A (zh) * 2021-02-19 2021-06-15 上海微盟企业发展有限公司 一种组件编译方法、装置、设备及计算机可读存储介质
CN113127000A (zh) * 2021-04-23 2021-07-16 北京字节跳动网络技术有限公司 应用程序组件的编译方法、装置、设备及存储介质
CN113326199A (zh) * 2021-06-18 2021-08-31 杭州萤石软件有限公司 用于移动操作系统的应用程序的调试方法、调试平台设备
CN113434192A (zh) * 2021-08-26 2021-09-24 广州易方信息科技股份有限公司 基于sdk平台的打包方法、装置以及计算机设备
CN113626105A (zh) * 2021-08-18 2021-11-09 赞同科技股份有限公司 移动端混合模式的sdk系统与移动设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101134116B1 (ko) * 2010-08-19 2012-04-09 주식회사 잉카인터넷 응용프로그램과 부가응용프로그램의 결합 방법 및 실행 방법
CN103645919A (zh) * 2013-12-18 2014-03-19 用友软件股份有限公司 一种通过插件扩展管理信息系统功能的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101134116B1 (ko) * 2010-08-19 2012-04-09 주식회사 잉카인터넷 응용프로그램과 부가응용프로그램의 결합 방법 및 실행 방법
CN103645919A (zh) * 2013-12-18 2014-03-19 用友软件股份有限公司 一种通过插件扩展管理信息系统功能的方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
GUIYING712: "Android组件化之终极方案", 《CSDN:HTTPS://BLOG.CSDN.NET/GUIYING712/ARTICLE/DETAILS/78057120》 *
GUIYING712: "Android组件化方案", 《CSDN:HTTPS://BLOG.CSDN.NET/GUIYING712/ARTICLE/DETAILS/55213884》 *
HUANGYONG_CSDN: "安卓组件化架构实践", 《CSDN:HTTPS://BLOG.CSDN.NET/HUANG_YONG_/ARTICLE/DETAILS/70141210》 *

Cited By (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108733376A (zh) * 2018-04-27 2018-11-02 链家网(北京)科技有限公司 组件化下利用一套源码编译多个Android APP的方法及装置
CN108984161A (zh) * 2018-06-21 2018-12-11 广州视源电子科技股份有限公司 一种统一且可分类拓展的软件安装包构建方法和装置
CN108984161B (zh) * 2018-06-21 2022-04-08 广州视源电子科技股份有限公司 一种统一且可分类拓展的软件安装包构建方法和装置
CN109614081A (zh) * 2018-11-26 2019-04-12 Oppo广东移动通信有限公司 浏览器实现方法、装置及移动终端
CN109656616A (zh) * 2018-11-26 2019-04-19 平安科技(深圳)有限公司 一种基于事务处理过程优化的打包方法、系统及电子设备
CN109614081B (zh) * 2018-11-26 2022-03-29 Oppo广东移动通信有限公司 浏览器实现方法、装置及移动终端
CN111273940A (zh) * 2018-12-05 2020-06-12 北京奇虎科技有限公司 将程序文件上传至代码仓库的方法及装置
CN111273940B (zh) * 2018-12-05 2024-04-05 三六零科技集团有限公司 将程序文件上传至代码仓库的方法及装置
CN111324333A (zh) * 2018-12-17 2020-06-23 中移(杭州)信息技术有限公司 一种基于组件化的软件开发方法及装置
CN111324333B (zh) * 2018-12-17 2022-08-30 中移(杭州)信息技术有限公司 一种基于组件化的软件开发方法及装置
CN109656536A (zh) * 2018-12-25 2019-04-19 武汉斗鱼网络科技有限公司 一种推送模块组件化的方法及客户端
CN109857405A (zh) * 2019-02-02 2019-06-07 Oppo广东移动通信有限公司 应用程序安装包的编译方法、装置、存储介质及终端
CN110187902A (zh) * 2019-04-15 2019-08-30 中国平安人寿保险股份有限公司 基于spring boot的项目改造方法、装置、设备及存储介质
CN110321131A (zh) * 2019-07-05 2019-10-11 北京百佑科技有限公司 业务组件打包方法、系统及服务器
CN110366118A (zh) * 2019-07-05 2019-10-22 广州市百果园信息技术有限公司 一种电台、应用程序及实现电台功能的方法
CN110321131B (zh) * 2019-07-05 2022-11-08 北京百佑科技有限公司 业务组件打包方法、系统及服务器
CN110377367A (zh) * 2019-07-24 2019-10-25 广州虎牙科技有限公司 组件配置方法、装置、电子终端及计算机可读存储介质
CN110377367B (zh) * 2019-07-24 2022-05-03 广州虎牙科技有限公司 组件配置方法、装置、电子终端及计算机可读存储介质
CN110795102A (zh) * 2019-09-27 2020-02-14 上海掌门科技有限公司 模块编译方法、装置、电子设备和计算机可读介质
CN110795102B (zh) * 2019-09-27 2023-08-29 上海掌门科技有限公司 模块编译方法、装置、电子设备和计算机可读介质
CN111008009B (zh) * 2019-11-05 2023-02-24 贝壳技术有限公司 基于Flutter的业务组件化方法及系统
CN111008009A (zh) * 2019-11-05 2020-04-14 贝壳技术有限公司 基于Flutter的业务组件化方法及系统
CN112860232A (zh) * 2019-11-28 2021-05-28 杭州萤石软件有限公司 组件实施方法及装置
CN111367510B (zh) * 2020-02-24 2024-03-19 腾讯音乐娱乐科技(深圳)有限公司 一种安卓功能模块开发的方法及装置
CN111367510A (zh) * 2020-02-24 2020-07-03 腾讯音乐娱乐科技(深圳)有限公司 一种安卓功能模块开发的方法及装置
CN111399840A (zh) * 2020-03-04 2020-07-10 腾讯音乐娱乐科技(深圳)有限公司 一种模块开发方法及装置
CN111399840B (zh) * 2020-03-04 2024-03-19 腾讯音乐娱乐科技(深圳)有限公司 一种模块开发方法及装置
CN111796817A (zh) * 2020-07-22 2020-10-20 睿智合创(北京)科技有限公司 针对iOS高内聚低耦合处理方法、系统及电子设备
CN112256322A (zh) * 2020-12-22 2021-01-22 畅捷通信息技术股份有限公司 一种应用程序版本动态区隔方法、装置、介质
CN112256322B (zh) * 2020-12-22 2021-03-19 畅捷通信息技术股份有限公司 一种应用程序版本动态区隔方法、装置、介质
CN112965720A (zh) * 2021-02-19 2021-06-15 上海微盟企业发展有限公司 一种组件编译方法、装置、设备及计算机可读存储介质
CN113127000A (zh) * 2021-04-23 2021-07-16 北京字节跳动网络技术有限公司 应用程序组件的编译方法、装置、设备及存储介质
CN113326199A (zh) * 2021-06-18 2021-08-31 杭州萤石软件有限公司 用于移动操作系统的应用程序的调试方法、调试平台设备
CN113626105A (zh) * 2021-08-18 2021-11-09 赞同科技股份有限公司 移动端混合模式的sdk系统与移动设备
CN113626105B (zh) * 2021-08-18 2023-10-27 赞同科技股份有限公司 移动端混合模式的sdk系统与移动设备
CN113434192B (zh) * 2021-08-26 2021-12-07 广州易方信息科技股份有限公司 基于sdk平台的打包方法、装置以及计算机设备
CN113434192A (zh) * 2021-08-26 2021-09-24 广州易方信息科技股份有限公司 基于sdk平台的打包方法、装置以及计算机设备

Similar Documents

Publication Publication Date Title
CN107908403A (zh) 一种移动端业务模块组件化的配置方法及系统
CN102520972B (zh) 电子游戏开发系统及其方法
CN108830720A (zh) 智能合约运行方法、装置、系统和计算机可读存储介质
US10901804B2 (en) Apparatus and method to select services for executing a user program based on a code pattern included therein
CN105718251A (zh) 多语言sdk自动化实现方法及系统
CN106371825A (zh) 一种移动端应用界面表单动态生成方法及装置
CN108345532A (zh) 一种自动化测试用例生成方法和装置
CN105335412A (zh) 用于数据转换、数据迁移的方法和装置
CN104111855A (zh) 一种基于Lua的iOS客户端功能动态更新的方法
CN109144533A (zh) 一种应用程序的更新及加载的方法、系统及计算机装置
CN103455381A (zh) 用于将源软件组件的源对象的表示解序列化为目标软件组件的方法和系统
CN104765603A (zh) 应用程序构建方法及装置
CN106055375A (zh) 应用程序安装方法及装置
CN112906206B (zh) 数字孪生模型构建方法和装置
CN103440285A (zh) 大型手机游戏系统及其数据库更新方法
CN106201625A (zh) 一种软件版本更新方法、更新装置及其电子设备
CN107678741A (zh) 列表视图的实现方法、装置、可读存储介质及设备
CN104748757A (zh) 一种导航电子地图数据更新方法及装置
CN103455337A (zh) 在安卓开发环境下使用动态库的方法
CN108694049A (zh) 一种更新软件的方法和设备
CN109191078A (zh) 一种流程业务建模方法、装置及设备
CN112818176A (zh) 一种数据处理方法、装置、设备及存储介质
CN103377076A (zh) 一种运行时调整任务执行计划的方法和系统
CN104123160A (zh) 一种导航设备的要素级更新方法
CN108536447B (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20180413

RJ01 Rejection of invention patent application after publication