java 模块优化_多模块下Gradle优化(一)

在项目开发中,往往会用到很多个module,每个module都有自己的gradle,而这些gradle很大部分都是重复的,所以我们可以将重复的部分,抽取成一个公共的gradle,然后各个module都引用这个公共中的就可以了

一个项目中,gradle总共有三类,setting.gradle, build.gradle和各个module下的build.gradle ,而执行的顺序也是setting.gradle> 项目build.gradle>module中build.gradle,而我们要抽取一个公共的gradle,让项目的build.gradle依赖于公共的gradle

并且如果一个项目中,有很多个module,如果每次修改点东西,都整个项目编译一遍,很费时间,所以,最好哪个module改了,就直接运行哪个module,这样就可以省下很多时间,在测试的时候,各个module都可以单独运行,而在上线的时候,各个module都直接集成在项目中,不可单独运行,所以最好有个开关,根据这个开关来判断是集成还是分成各个module,下面上代码

先抽取公共的gradle , 取名app_config.gradle

955eacbfc7660bb617b95592482b5b2e.png

ext{ //闭包

/***

* true 表示是生产环境

* false 表示是测试环境

* 自己手动修改

* 不发布时,改成false ,各个模块可以单独运行

*/

isRelease = false

app_android = [

compileSdkVersion :25,

buildToolsVersion :"25.0.2",

applicationId: "com.example.a15101.plugindemo",

minSdkVersion: 21,

targetSdkVersion :25,

versionCode: 1,

versionName :"1.0",

testInstrumentationRunner :"android.support.test.runner.AndroidJUnitRunner"

]

//抽取公共的依赖部分

app_imp = [

appcompat: 'com.android.support:appcompat-v7:25.+',

constraint_layout : 'com.android.support.constraint:constraint-layout:1.1.3',

junit : 'junit:junit:4.12',

runner: 'com.android.support.test:runner:1.0.2',

espresso: 'com.android.support.test.espresso:espresso-core:3.0.2',

//动态权限

permissionsdispatcher:'com.github.hotchemi:permissionsdispatcher:3.1.0',

pinyin4j:"com.belerweb:pinyin4j:2.5.0"

]

/**

* 各个模块在单独运行的时候,需要的applicationId

*

*/

app_appId = [

"common" : "com.example.common",

"myself" : "com.example.module_myself"

]

}

然后在项目的gradle下,添加引入

c81908d0bceab801f32c853ae4352d4e.png

然后是module_myself中的gradle

if (isRelease){

apply plugin: 'com.android.library'

}else{

apply plugin: 'com.android.application'

}

android {

compileSdkVersion app_android.compileSdkVersion

buildToolsVersion app_android.buildToolsVersion

defaultConfig {

if (!isRelease){

applicationId app_appId.myself

}

minSdkVersion app_android.minSdkVersion

targetSdkVersion app_android.targetSdkVersion

versionCode app_android.versionCode

versionName app_android.versionName

testInstrumentationRunner app_android.testInstrumentationRunner

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])

// 循环引入第三方库

app_imp.each {

k, v ->

if (k != app_imp.permissionsdispatcher) { //可以判断,过滤掉不需要引入的公共库

implementation v

}

}

// implementation project(':common')

}

我们只需要更改isRelease就可以了,true表示上线,各个module都集成在项目中,不可单独运行,改成false,各个module可以独自运行

如果module间进行跳转,这时候就得用类加载来跳转了

try {

Class> aClass = Class.forName("com.example.module_myself.Myself_MainActivity");

Intent intent = new Intent(MainActivity.this, aClass);

startActivity(intent);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值