多模块下Gradle优化(一)

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-11 21:32:30

    在项目开发中,往往会用到很多个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


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下,添加引入

然后是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();
       }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!