美文网首页
Android_Gradle语法及配置记录

Android_Gradle语法及配置记录

作者: 刘小厨 | 来源:发表于2020-08-26 20:27 被阅读0次

    组件化的gradle配置,也包括基础的配置,多数都写了备注,仅做记录
    app.gradle

    apply plugin: 'com.android.application'
    
    def androidId = rootProject.ext.androidId
    def appId = rootProject.ext.appId
    def supportDependencies = rootProject.ext.dependencies
    def baseUrl = rootProject.ext.baseUrl
    
    android {
        compileSdkVersion androidId.compileSdkVersion
        buildToolsVersion androidId.buildToolsVersion
    
        defaultConfig {
            applicationId appId.applicationId
            minSdkVersion androidId.minSdkVersion
            targetSdkVersion androidId.targetSdkVersion
            versionCode androidId.versionCode
            versionName androidId.versionName
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    
    
            // 开启分包
            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 (!isRelease) {
                        // 如果是组件化模式,需要单独运行时
                        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:/Users/tpson/.android/debug.keystore')
                storePassword "android"
                keyAlias "androiddebugkey"
                keyPassword "android"
            }
            release {
                // 签名证书文件
                storeFile file('D:/Frizzle/frizzle.jks')
                // 签名证书的类型
                storeType "frizzle"
                // 签名证书文件的密码
                storePassword "frizzle123"
                // 签名证书中密钥别名
                keyAlias "frizzle"
                // 签名证书中该密钥的密码
                keyPassword "frizzle123"
                // 是否开启V2打包
                v2SigningEnabled true
            }
        }
    
        buildTypes {
            debug {
                signingConfig signingConfigs.debug
                //编译之后在BuildConfig类中多生成一个字段
                buildConfigField("String", "BaseUrl", "\"${baseUrl.debug}\"")
            }
            release {
                signingConfig signingConfigs.release
                buildConfigField("String", "BaseUrl", "\"${baseUrl.release}\"")
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    
        // AdbOptions 可以对 adb 操作选项添加配置
        adbOptions {
            // 配置操作超时时间,单位毫秒
            timeOutInMs = 5 * 1000_0
    
            // adb install 命令的选项配置
            installOptions '-r', '-s'
        }
        // 对 dx 操作的配置,接受一个 DexOptions 类型的闭包,配置由 DexOptions 提供
        dexOptions {
            // 配置执行 dx 命令是为其分配的最大堆内存
            javaMaxHeapSize "4g"
            // 配置是否预执行 dex Libraries 工程,开启后会提高增量构建速度,不过会影响 clean 构建的速度,默认 true
            preDexLibraries = false
            // 配置是否开启 jumbo 模式,代码方法是超过 65535 需要强制开启才能构建成功
            jumboMode true
            // 配置 Gradle 运行 dx 命令时使用的线程数量
            threadCount 8
            // 配置multidex参数
            additionalParameters = [
                    '--multi-dex', // 多dex分包
                    '--set-max-idx-number=50000', // 每个包内方法数上限
                    // '--main-dex-list=' + '/multidex-config.txt', // 打包到主classes.dex的文件列表
                    '--minimal-main-dex'
            ]
        }
        // 执行 gradle lint 命令即可运行 lint 检查,默认生成的报告在 outputs/lint-results.html 中
        lintOptions {
            // 遇到 lint 检查错误会终止构建,一般设置为 false
            abortOnError false
            // 将警告当作错误来处理(老版本:warningAsErros)
            warningsAsErrors false
            // 检查新 API
            check 'NewApi'
        }
    }
    
    dependencies {
        implementation fileTree(dir: "libs", include: ["*.jar"])
    //    //标准写法
    //    implementation group:'androidx.appcompat',name:'appcompat',version:'1.2.0'
    //    //简写
    //    implementation 'androidx.appcompat:appcompat:1.2.0'
    
        //依赖库library
        implementation project(":GradleConfigLibrary")
        //相当于将三方库都加入到了一个Map里面 grdle中加字典
        //    HashMap<String,String> map = new HashMap<>();
        //    implementation map.get("appcompat");
    
        //可以按下面的方式写
    //    implementation supportDependencies.appcompat
    //    implementation supportDependencies.recyclerview
    //    implementation supportDependencies.constraint
        //最简洁的方式
        supportDependencies.each { k, v -> implementation v }
    }
    

    module.gradle

    apply plugin: 'com.android.library'
    
    def androidId = rootProject.ext.androidId
    def supportDependencies = rootProject.ext.dependencies
    
    android {
        compileSdkVersion androidId.compileSdkVersion
        buildToolsVersion androidId.buildToolsVersion
    
        defaultConfig {
            minSdkVersion androidId.minSdkVersion
            minSdkVersion androidId.minSdkVersion
            versionCode androidId.versionCode
            versionName androidId.versionName
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
            consumerProguardFiles "consumer-rules.pro"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: "libs", include: ["*.jar"])
        supportDependencies.each { k, v -> implementation v }
    }
    

    project.gradle

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    apply from:"config.gradle"
    buildscript {
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath "com.android.tools.build:gradle:3.2.1"
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    build.config

    ext {
        isRelease = true;
        androidId = [
                compileSdkVersion: 30,
                buildToolsVersion: "30.0.1",
                minSdkVersion    : 21,
                targetSdkVersion : 30,
                versionCode      : 1,
                versionName      : "1.0"
        ]
        appId = [
                applicationId    : "com.frizzle.gradleconfig",
                library    : "com.frizzle.library"
        ]
    
        //开发测试环境
        baseUrl = [
                "debug" : "http://10.0.0.1:8080/debug",
                "release" : "http://10.0.0.1:8080/release"
        ]
    
        //三方库
        supportLibrary = "1.2.0"
        dependencies =[
                //这里的key尽量不要加-v7之类的,比如appcompat-v7
                "appcompat" : "androidx.appcompat:appcompat:${supportLibrary}",
                "recyclerview" : "androidx.recyclerview:recyclerview:1.1.0",
                "constraint" : "com.android.support.constraint:constraint-layout:1.1.3"
        ]
    }
    

    相关文章

      网友评论

          本文标题:Android_Gradle语法及配置记录

          本文链接:https://www.haomeiwen.com/subject/jvifsktx.html