项目用到的一些build.gradle配置

73 阅读1分钟

使用单独的一个配置来管理版本

在工程主目录下创建config.gradle文件

ext {
    compileSdkVersion = 30
    minSdkVersion = 21
    targetSdkVersion = 30

    junit = "4.13.2"

    activity = "1.2.0"
    appcompat = "1.2.0"
    fragment = "1.3.0"
    core_ktx = "1.3.2"
    multidex = "2.0.1"
    kotlin = "1.5.20"
    kotlin_coroutines = '1.3.7'
    lifecycle = "2.3.0"
    work_manager = "2.5.0"
    retrofit = "2.9.0"
    okhttp = "4.7.2"
    paging = "2.1.2"
    room = "2.3.0"
    stetho = "1.5.1"
    glide = "4.11.0"
    big_image_view_pager = "androidx-6.0.1"
    hilt = "2.4.0"
}

工程主目录下build.gradle中加载文件

buildscript {
    ...
    apply from: "config.gradle"
    ...
}

多渠道打包

使用productFlavors来配置

修改生成的安装包名字


android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            if (variant.buildType.name == 'develop' || variant.buildType.name == 'debug') {//测试环境测试版
                outputFileName = '包名字'
            }
            if (variant.buildType.name == 'release') {//发布版本
                outputFileName = '包名字'
            }
        }
    }

打开混淆

 minifyEnabled true

自动化打包

在app下面的build.gradle中添加下面配置就是自己生成签名的安装包

android {
    ...
    signingConfigs {
        config {
            storeFile file('')
            keyAlias ''
            keyPassword ''
            storePassword ''
        }
    }
    
     buildTypes {
        release {
            //签名工具
            signingConfig signingConfigs.config
            
        }

使用统一的变量来管理

compileSdk,minSdkVersion和targetSdkVersion版本使用统一的变量版本来管理,所有的库都使用这个变量,方便后面修改

android {
    compileSdk rootProject.ext.compileSdkVersion

    defaultConfig {
        applicationId ""
        minSdk rootProject.ext.minSdkVersion
        targetSdk rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

api和implementation的区别

api和implementation是在gradle 3.4+添加的

  • api 当其他模块依赖于此模块时,此模块使用api声明的依赖包是可以被其他模块使用
  • implementation 当其他模块依赖此模块时,此模块使用implementation声明的依赖包只限于模块内部使用,不允许其他模块使用。