gradle基本用法

一、在项目根目录下新建config.gradle文件,将所有gradle的相同配置放入到此文件中
在这里插入图片描述

ext {
    // 定义一个项目全局变量isRelease,用于动态切换:组件化模式 / 集成化模式
    // false: 组件化模式(子模块可以独立运行),true :集成化模式(打包整个项目apk,子模块不可独立运行)
    isRelease = true
    //参数配置
    appConfig = [
            compileSdkVersion: 29,
            buildToolsVersion: "29.0.2",
            minSdkVersion    : 21,
            targetSdkVersion : 29,
            versionCode      : 1,
            versionName      : "1.0"
    ]
    //网络环境配置
    url = [
            releaseUrl: "http://release/api",
            debugUrl  : "http://debug/api"
    ]
    //相关jar包
    supportLibrary = "28.0.0"
    dependencies = [
            // ${supportLibrary}表示引用一个变量
            "appcompat"   : "com.android.support:appcompat-v7:${supportLibrary}",
            "recyclerview": "com.android.support:recyclerview-v7:${supportLibrary}",
            "constraint"  : "com.android.support.constraint:constraint-layout:1.1.3",
            "okhttp3"     : "com.squareup.okhttp3:okhttp:3.10.0",
            "retrofit"    : "com.squareup.retrofit2:retrofit:2.5.0",
            "fastjson"    : "com.alibaba:fastjson:1.2.58",
    ]
}

二、在项目的build.gradle中导入配置文件
在这里插入图片描述

//设置导入 config.gradle 配置文件
apply from: "config.gradle"
buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
    }
}
allprojects {
    repositories {
        google()
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

三、在app的module中配置相关参数

apply plugin: 'com.android.application'
//导入config.gradle的设置数组
def appConfig = rootProject.ext.appConfig
def url = rootProject.ext.url
def support = rootProject.ext.dependencies

android {
    compileSdkVersion appConfig.compileSdkVersion
    buildToolsVersion appConfig.buildToolsVersion

    defaultConfig {
        applicationId "com.wkr.projectfb"
        minSdkVersion appConfig.minSdkVersion
        targetSdkVersion appConfig.targetSdkVersion
        versionCode appConfig.versionCode
        versionName appConfig.versionName

        //将参数设置到BuildConfig类中,这个方法接收三个非空的参数,第一个:确定值的类型,第二个:指定key的名字,第三个:传值(必须是String)
        // 切记:不能在android根节点,只能在defaultConfig或buildTypes节点下
        buildConfigField("boolean", "isRelease", String.valueOf(isRelease))
        buildConfigField("String", "url", isRelease ? "\"${url.releaseUrl}\"" : "\"${url.debugUrl}\"")
    }
//打包签名
    signingConfigs {
    	//写死不变的
        debug {
            storeFile file('C:/Users/Administrator/.android/debug.keystore')
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        release {
            //证书文件
            storeFile file("D:/keystore/生成Reelase版本.keystore")
            //证书类型
            storeType "netease"
            //签名证书文件的密码
            storePassword "android"
            //签名证书中密钥别名
            keyAlias "androiddebugkey"
            //签名证书中该密钥的密码
            keyPassword "android"
            //是否开启V2打包
            v2SigningEnabled true

        }
    }
    buildTypes {
        debug {
            //设置编译证书相关
            signingConfig signingConfigs.debug
        }
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    if (isRelease) {
        implementation project(path: ':trans')
        implementation project(path: ':order')
    }
    //循环引用第三方库
    support.each { K, v -> implementation v }
}

四、设置子模块gradle配置

//如果是发布版本时,各个模块都不能独立运行,需将application改成library,并去除applicationId
if (isRelease) {
    apply plugin: 'com.android.library'
} else {
    apply plugin: 'com.android.application'
}
def appConfig = rootProject.ext.appConfig
def support = rootProject.ext.dependencies
def url = rootProject.ext.url

android {
    compileSdkVersion appConfig.compileSdkVersion
    buildToolsVersion appConfig.buildToolsVersion
    defaultConfig {
        if (!isRelease) {
            applicationId "com.wkr.order"
        }
        minSdkVersion appConfig.minSdkVersion
        targetSdkVersion appConfig.targetSdkVersion
        versionCode appConfig.versionCode
        versionName appConfig.versionName
        //配置buildConfig相关
        buildConfigField("boolean", "isRealease", String.valueOf(isRelease))
        buildConfigField("String", "url", isRelease ? "\"${url.releaseUrl}\"" : "\"${url.debugUrl}\"")
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    // 配置资源路径,方便测试环境,打包不集成到正式环境
    sourceSets {
        main {
            if (!isRelease) {
                // 如果是组件化模式,需要单独运行时
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                // 集成化模式,整个项目打包apk
                manifest.srcFile 'src/main/AndroidManifest.xml'
                java {
                    // release 时 debug 目录下文件不需要合并到主工程
                    exclude '**/debug/**'
                }
            }
        }
    }
}
//如果是发布版本时,各个模块都不能独立运行,需将application改成library,并去除applicationId
if (isRelease) {
    apply plugin: 'com.android.library'
} else {
    apply plugin: 'com.android.application'
}
def appConfig = rootProject.ext.appConfig
def support = rootProject.ext.dependencies
def url = rootProject.ext.url

android {
    compileSdkVersion appConfig.compileSdkVersion
    buildToolsVersion appConfig.buildToolsVersion

    defaultConfig {
        if (!isRelease) {
            applicationId "com.wkr.trans"
        }
        minSdkVersion appConfig.minSdkVersion
        targetSdkVersion appConfig.targetSdkVersion
        versionCode appConfig.versionCode
        versionName appConfig.versionName
        //设置相关配置参数
        buildConfigField("boolean", "isRelease", String.valueOf(isRelease))
        buildConfigField("String", "url", isRelease ? "\"${url.releaseUrl}\"" : "\"${debugUrl}\"")
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //导入相关jar包
    support.each { k, v -> implementation v }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值