ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Gradle 通用配置项

2022-01-22 16:59:22  阅读:272  来源: 互联网

标签:通用 implementation 配置 Gradle ext rootProject aar android


Gradle 是Android studio 标配的构建系统,所以必须对它有基本的认识才行。

共享变量的定义

Gradle开发中会遇到很多相同的配置,例如不同的module中都要配置compileSdkVersion、buildToolsVersion等变量的值,这些公共的配置称为共享变量。一般情况下,他们的取值都应该保持一致,那么就需要统一管理这些配置。

一般需要在项目的根目录定义一个common_config.gradle配置文件。

ext {
    
    //Android 编译版本相关
    android = [
            versionName      : "1.0.0",
            versionCode      : 1,
            compileSdkVersion: 30,
            buildToolsVersion: "30.0.3",
            minSdkVersion    : 16,
            targetSdkVersion : 30
    ]


    dependencies = [
            appcompat       : 'androidx.appcompat:appcompat:1.2.0',
            material        : 'com.google.android.material:material:1.2.0',
            constraintlayout: 'androidx.constraintlayout:constraintlayout:2.1.3',


            //kotlin
            stdlib          : "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version",
            ktx             : 'androidx.core:core-ktx:1.6.0'
    ]

    testDependencies = [
            //test
            androidTestJunit: 'androidx.test.ext:junit:1.1.3',
            testJunit       : 'junit:junit:4.+',
            testEspresso    : 'androidx.test.espresso:espresso-core:3.4.0',
            testng          : 'org.testng:testng:6.9.6'
    ]


    //混淆相关
    minifyEnable = true
    shrinkResEnable = minifyEnable

    //java相关
    javaVersion = 8
    javaMaxHeapSize = '4G'

    //JSK版本兼容
    sourceCompatibility = this.getJavaVersion()
    targetCompatibility = this.getJavaVersion()

    jvmTarget = '1.8'

}

def getJavaVersion() {
    switch (project.ext.javaVersion) {
        case 6:
            return JavaVersion.VERSION_1_6
        case 7:
            return JavaVersion.VERSION_1_7
        case 8:
            return JavaVersion.VERSION_1_8
        case 9:
            return JavaVersion.VERSION_1_9
        default:
            return JavaVersion.VERSION_1_8
    }
}

为了项目中所有的module都能引用到,最好是统一在项目根目录的配置文件中进行引用这个配置

apply from:"common_config.gradle"

下面是通用配置的应用

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdkVersion rootProject.android.compileSdkVersion
    buildToolsVersion rootProject.android.buildToolsVersion

    defaultConfig {
        applicationId "com.***.sdkdemoopt"
        minSdkVersion rootProject.android.minSdkVersion
        targetSdkVersion rootProject.android.targetSdkVersion
        versionCode rootProject.android.versionCode
        versionName rootProject.android.versionName

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    //构建配置
    buildTypes {
        release {
            //指定秘钥信息
            signingConfig signingConfigs.release
            //混淆开关
            minifyEnabled rootProject.minifyEnable
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility rootProject.sourceCompatibility
        targetCompatibility rootProject.targetCompatibility
    }

    //产品维度的配置
    productFlavors {
        _360 {}
        tencent {}
        baidu {}
        oppo {}
        vivo {}
        huawei {}
        xiaomi {}
        googleplay {}
    }

    //如果使用到了友盟需要使用这个配置,友盟中后台的信息就会有渠道的概念了
    productFlavors.all {
            //批量修改,类似一个循序遍历
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

    //签名相关配置
    signingConfigs{
        release{
            storeFile file("***.keystore")
            storePassword "***"
            keyAlias "***"
            keyPassword "***"
        }

        debug{
            storeFile file("***.keystore")
            storePassword "***"
            keyAlias "***"
            keyPassword "***"
        }
    }

    //自定义工程名称
    variant.outputs.all { output ->
        def buildName = "com.***"
        def type = variant.buildType.name
        if (type == "debug") {
            def apkName = 'app-debug'
            outputFileName = new File("../.././../../../build/outputs/apk/debug", apkName + '_' + type + '.apk')
        } else {
            def releaseApkName = buildName + '_' + variant.productFlavors.get(0).name + '_' + type + "_" + versionName + '_' + releaseTime() + '.apk'
            outputFileName = releaseApkName
        }
    }

    //加载aar包需要的配置,否则会出现找不到aar包的错误
    repositories {
        flatDir {
            dirs 'libs'
        }
        
        //加载一个model中引入的aar,,如果所有的module都需要使用这个module,可以配置在跟目录的build.gradle中
//        flatDir {
//            dirs project(':***Model').file('libs')
//        }
    }

    //如果需要生成aar包
    android.libraryVariants.all { variant ->
        variant.outputs.all {
            def fileName = "baseModel"+'_' + releaseTime()+".aar"
            outputFileName = fileName
        }
    }

    kotlinOptions {
        jvmTarget = rootProject.jvmTarget
    }
}


static def releaseTime() {
    return new Date().format("yyyy-MM-dd--HH-mm-ss", TimeZone.getTimeZone("GMT+8"))
}

dependencies {
    //自动引入libs下面的jar包
    implementation fileTree(includes: ['*.jar'],dir: 'libs')

    implementation rootProject.ext.dependencies.constraintlayout
    implementation rootProject.ext.dependencies.appcompat
    implementation rootProject.ext.dependencies.material

    //依赖一个model
    implementation project(":libBase")

    //引入一个aar
    implementation(name:'libEngine',ext:'aar')

    //kotlin
    implementation rootProject.ext.dependencies.stdlib
    implementation rootProject.ext.dependencies.ktx

    //test
    testImplementation rootProject.testDependencies.testJunit
    androidTestImplementation rootProject.testDependencies.androidTestJunit
    androidTestImplementation rootProject.testDependencies.testEspresso
}

我把常用的配置全部放在了里边,包含

  • 签名密钥

  • 混淆开关

  • 自定义apk安装包名称

  • 自定义生成aar包名称

  • 产品维度,以及包含友盟的配置

  • 依赖一个aar包

  • 依赖一个子model

    其他配置会持续更新,亲测可用……

标签:通用,implementation,配置,Gradle,ext,rootProject,aar,android
来源: https://blog.csdn.net/u014078003/article/details/122639915

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有