Unity自动打包-Android Studio - Gradle全局公共配置

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。

为什么需要全局配置?

伴随项目模块化开发、组件化开发以及插件化开发等模式的出现,为方便在不同module中设置版本号等配置信息,可以通过配置全局变量来统一管理所有module的公共配置信息。

全局配置方式

1. 使用ext属性配置
//1.1 在项目build.gradle中使用ext属性
ext {
    androidToolsVersion: '28.0.3',
    buildToolsVersion  : '28.0.3',    //构建工具的版本,其中包括了打包工具aapt、dx等
    compileSdkVersion  : 28           //
    minSdkVersion      : 16           //
    targetSdkVersion   : 28           //
    versionCode        : 1
    versionName        : "1.0.0"
}
//1.2 在某个module的build.gradle中使用配置
android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName
    }
}
2. 使用config.gradle配置
//2.1 在项目的根目录下新建config.gradle文件
//2.2 将gradle中的公共信息写入config.gradle文件中
ext {
    android = [
            androidToolsVersion: '28.0.3',
            buildToolsVersion  : '28.0.3',     //构建工具的版本,其中包括了打包工具aapt、dx等
            compileSdkVersion  : 28,           //
            minSdkVersion      : 16,           //
            targetSdkVersion   : 28,           //
            versionCode        : 1,
            versionName        : "1.0.0",
    ]
}
//2.3 在主项目的build.gradle中申明一下
apply from: "config.gradle"
//2.4 在项目中引用公共配置
android {
    defaultConfig {
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
    }
}
//个人完整的config.gradle配置

//config.gradle用于统一配置项目中各常量和依赖库
//使用在项目根build.gradle上方添加 apply from: "config.gradle"
//然后使用"rootProject.ext"对象调用各属性,例如 rootProject.ext.android.compileSdkVersion、daggerLibs.api、daggerLibs.values()
ext {
    //项目包名集合
    packageMap = [
            "app": "app的包名"
    ]

    android = [
            androidToolsVersion: '28.0.3',
            buildToolsVersion  : '28.0.3',     //构建工具的版本,其中包括了打包工具aapt、dx等
            compileSdkVersion  : 28,           //
            minSdkVersion      : 16,           //
            targetSdkVersion   : 28,           //
            versionCode        : 1,
            versionName        : "1.0.0",
    ]

    libVersions = [
            junit                   : '4.12',

            supportLibraryVersion   : '27.1.1',
            supportVersion          : '28.0.3',
            constraintLibraryVersion: "1.1.2",
    ]

    androidSupport = "com.android.support"

    testLibs = [
            junit: "junit:junit:${libVersions.junit}",
    ]

    depLibs = [
            junit  : 'junit:junit:4.12',

            support: [
                    appcompatV4 : "${androidSupport}:support-v4:${libVersions.supportLibraryVersion}",
                    appcompatV7 : "${androidSupport}:appcompat-v7:${libVersions.supportLibraryVersion}",
                    cardview    : "${androidSupport}:cardview-v7:${libVersions.supportLibraryVersion}",
                    design      : "${androidSupport}:design:${libVersions.supportLibraryVersion}",
                    recyclerview: "${androidSupport}:recyclerview-v7:${libVersions.supportLibraryVersion}",

                    constraint  : "${androidSupport}.constraint:constraint-layout:${libVersions.constraintLibraryVersion}",

            ],
    ]
}

ext.common = [
        packageTime : "${new Date().format("yyyyMMdd.HHmm.ss.SSS", TimeZone.getTimeZone("GMT+08:00"))}",
        AARBackupDir: "${rootDir}/aarBackupDir/",
]

def config = rootProject.ext.android

//配置当前project和其subproject的所有project(module)
subprojects {

    beforeEvaluate {
        println '配置阶段开始前的监听回调'
    }

    afterEvaluate {
        println '配置阶段完成以后的回调'
    }

    gradle.buildStarted {
        println 'build开始的回调监听'
    }

    gradle.buildFinished {
        println 'build完毕后的回调监听'
    }

    gradle.beforeProject {
        println 'gradle执行前的回调监听'
    }

    gradle.afterProject {
        println 'gradle执行前的回调监听'
    }

    //在所有子build.gradle(module)文件中添加android 字段
    afterEvaluate { project ->//回调
        if (project.hasProperty('android')) {//存在android 字段
            android {
                compileSdkVersion config.compileSdkVersion
                buildToolsVersion config.buildToolsVersion

                defaultConfig {
                    minSdkVersion config.minSdkVersion
                    targetSdkVersion config.targetSdkVersion
                    versionCode config.versionCode
                    versionName config.versionName
                    multiDexEnabled true

                    ndk {
                        //设置支持的SO库架构
                        //'armeabi-v7a', 'x86','armeabi'','x86_64','arm64-v8a'''
                        // 注:放开'arm64-v8a'会找不到腾讯人脸识别的类库包,>=android7.0 手机会崩溃
                        abiFilters 'armeabi-v7a', 'x86', 'arm64-v8a'
                    }
                }

                defaultConfig {
                    javaCompileOptions {
                        annotationProcessorOptions {
                            arguments = [AROUTER_MODULE_NAME: project.getName()]
                        }
                    }
                }

                buildTypes {
                    release {
                        minifyEnabled false
                        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                    }
                }

                compileOptions {
                    sourceCompatibility app.sourceCompatibilityVersion
                    targetCompatibility app.targetCompatibilityVersion
                }

                //关闭Android Studio的PNG合法性检查的
                aaptOptions.cruncherEnabled = false
                aaptOptions.useNewCruncher = false

                //减少编译错误和忽略 lint 检查
                packagingOptions {
                    //Espresso excludes
                    exclude 'META-INF/DEPENDENCIES.txt'
                    exclude 'META-INF/LICENSE.txt'
                    exclude 'META-INF/NOTICE.txt'
                    exclude 'META-INF/NOTICE'
                    exclude 'META-INF/LICENSE'
                    exclude 'META-INF/DEPENDENCIES'
                    exclude 'META-INF/notice.txt'
                    exclude 'META-INF/license.txt'
                    exclude 'META-INF/dependencies.txt'
                    exclude 'META-INF/LGPL2.1'
                    exclude 'LICENSE.txt'

                    //Android studio默认会有so文件进行压缩优化,加入以下配置可以不压缩so
                    doNotStrip "*/armeabi/*.so"
                    doNotStrip "*/armeabi-v7a/*.so"
                    //doNotStrip "*/x86/*.so"
                }

                //程序在buid的时候,会执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉
                lintOptions {
                    disable 'InvalidPackage'
                    checkReleaseBuilds false
                    abortOnError false
                }

                // dex预处理和最多八线程
                dexOptions {
                    // incremental true
                    preDexLibraries true
                    maxProcessCount 8
                }

                //关闭不需要task
                tasks.whenTaskAdded { task ->
                    if (task.name.contains("lint")
                            || task.name.contains("Aidl")
                            || task.name.contains("mockableAndroidJar")
                            || task.name.contains("UnintTest")
                            || task.name.contains("AndroidTest")
                            || task.name.contains("Ndk")
                            || task.name.contains("Jni")
                    ) {
                        task.enabled = false
                    }
                }
            }
        }
    }
}

你可能感兴趣的:(Unity自动打包-Android Studio - Gradle全局公共配置)