2.2.1 组件化gradle语法

本节主要内容讲解Gradle语法和常用的基础配置。

 

在项目工程创建一个配置文件config.gradle:

2.2.1 组件化gradle语法_第1张图片

ext {
    username = "Android"

    isModule = false

    androidId = [
            compileSdkVersion: 29,
            buildToolsVersion: "29.0.2",
            minSdkVersion    : 22,
            targetSdkVersion : 29,
            versionCode      : 1,
            versionName      : "1.0"
    ]
    appId = [
            app       : "com.source.gradledemo",
            lib_gradle: "com.source.gradledemo.lib_gradle"
    ]

    url = [
            "debug"  : "http://www.baidu.com",
            "release": "http://www.jd.com",
    ]

    dependencies = [
            appcompat       : "androidx.appcompat:appcompat:1.1.0",
            constraintlayout: "androidx.constraintlayout:constraintlayout:1.1.3"
    ]
}

然后在模块gradle中依赖:

2.2.1 组件化gradle语法_第2张图片

apply from:"config.gradle"

最后使用,如在app的build.gradle中的完整配置:

2.2.1 组件化gradle语法_第3张图片

 

apply plugin: 'com.android.application'

println("hello gradle")
//println "${username}"
//println "${rootProject.ext.username}"

def androidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.dependencies

android {
    compileSdkVersion androidId.compileSdkVersion
    buildToolsVersion androidId.buildToolsVersion

    defaultConfig {
        applicationId appId.applicationId
        minSdkVersion androidId.minSdkVersion
        targetSdkVersion androidId.targetSdkVersion
        versionCode androidId.versionCode
        versionName androidId.versionName
        // 开启分包
        multiDexEnabled true
        // 设置分包配置
        // multiDexKeepFile file('multidex-config.txt')
        // 将svg图片生成 指定维度的png图片
        // vectorDrawables.generatedDensities('xhdpi','xxhdpi')
        // 使用support-v7兼容(5.0版本以上)
        vectorDrawables.useSupportLibrary = true
        // 只保留指定和默认资源
        resConfigs('zh-rCN')
        // 配置so库CPU架构(真机:arm,模拟器:x86)
        // x86  x86_64  mips  mips64
        ndk {
            //abiFilters('armeabi', 'armeabi-v7a')
            // 为了模拟器启动
            abiFilters('x86', 'x86_64')
        }

        // 源集 - 设置源集的属性,更改源集的 Java 目录或者自由目录等
        sourceSets {
            main {
                if (!isModule) {
                    // 如果是组件化模式,需要单独运行时
                    manifest.srcFile 'src/main/AndroidManifest.xml'
                    java.srcDirs = ['src/main/java']
                    res.srcDirs = ['src/main/res']
                    resources.srcDirs = ['src/main/resources']
                    aidl.srcDirs = ['src/main/aidl']
                    assets.srcDirs = ['src/main/assets']
                } else {
                    // 集成化模式,整个项目打包
                    manifest.srcFile 'src/main/AndroidManifest.xml'
                }
            }
        }
    }


    // 签名配置(隐形坑:必须写在buildTypes之前)
    signingConfigs {
        debug {
            // 天坑:填错了,编译不通过还找不到问题
            storeFile file('C:/Android/.android/debug.keystore')
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        release {
            // 签名证书文件
            storeFile file('C:/Users/Ivy/Desktop/gradledemo.jks')
            // 签名证书的类型
            //storeType "netease"
            // 签名证书文件的密码
            storePassword "123456"
            // 签名证书中密钥别名
            keyAlias "gradledemo"
            // 签名证书中该密钥的密码
            keyPassword "123456"
            // 是否开启V2打包
            v2SigningEnabled true
        }
    }

    buildTypes {
        debug {
            // 对构建类型设置签名信息
            signingConfig signingConfigs.debug
            buildConfigField("String", "BASE_URL", "\"${url.debug}\"")
        }

        release {
            // 对构建类型设置签名信息
            signingConfig signingConfigs.release
            buildConfigField("String", "BASE_URL", "\"${url.release}\"")
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    //打包命令:
    //gradlew assembleDebug  在build\Output中生成debug签名的apk
    //gradlew assembleRelease  在build\Output中生成Release签名的apk

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    //implementation 'androidx.appcompat:appcompat:1.1.0'
    //implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    implementation support.appcompat
    implementation support.constraintlayout
    //最简单的写法
    //support.each { k, v -> implementation v }
    implementation project(path: ':lib_gradle')
}

这个配置有几点的说明:

1. 签名配置(隐形坑:必须写在buildTypes之前)

2. 可以在gradle里面写BASE_URL变量用来标志使用加载的URL如:

2.2.1 组件化gradle语法_第4张图片

3.依赖的几种写法

//最简单的写法
    //support.each { k, v -> implementation v }

4. 打包命令

gradlew assembleDebug  在build\Output中生成debug签名的apk
gradlew assembleRelease  在build\Output中生成Release签名的apk

 

其他lib包的gradle配置也差不多这样:

apply plugin: 'com.android.library'

def androidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.dependencies

android {
    compileSdkVersion androidId.compileSdkVersion
    buildToolsVersion androidId.buildToolsVersion

    defaultConfig {
        minSdkVersion androidId.minSdkVersion
        targetSdkVersion androidId.targetSdkVersion
        versionCode androidId.versionCode
        versionName androidId.versionName
    }

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

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation support.appcompat
    implementation support.constraintlayout
}

END.

你可能感兴趣的:(Andoid架构,Android进阶)