Android项目gradle配置解析

1、项目根目录的build.gradle

该文件用来配置整个项目所使用的依赖。

可以配置整个项目依赖的默认地址,在repositories闭包内进行定义。

一般来说buildscript闭包里和allprojects闭包里关于repositories的配置应该一致。

默认配置为google和mavenCentral。

2、Moudle内的build.gradle

// 用来导入该模块所需要的插件
// 1、当导入的id为com.android.application时,该module可以独立运行,可打包为APK
// 2、当导入的id为com.android.library时,该module不能独立运行,不能被打包为APK,供其他module依赖使用,生成aar文件
// 3、另一种方式为apply plugin: 'com.android.application' ,
// 或者apply plugin: ClassName 直接根据类名引入其他自定义插件,该插件需要实现Plugin接口
// 4、apply from: 'test.gradle' 从本地命名为test.gradle文件中导入,可以是一个task,也可以是一个类
plugins {
    id 'com.android.application'
    id 'kotlin-android'
}
// 用来配置安卓项目
android {
    // 配置签名信息
    signingConfigs {
        //你自己的keystore信息
        releaseConfig {
            storeFile file(rootProject.ext.store_file)
            storePassword rootProject.ext.store_password
            keyAlias rootProject.ext.key_alias
            keyPassword rootProject.ext.key_password
            v1SigningEnabled true
            v2SigningEnabled true
        }
    }
    // 设置编译Sdk版本
    compileSdkVersion rootProject.ext.compileSdkVersion
    // 设置构建工具版本
    buildToolsVersion rootProject.ext.buildToolsVersion
    // 安卓项目的默认配置
    defaultConfig {
        // 配置项目的applicationId,是唯一的
        applicationId rootProject.ext.applicationId
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName
        // 该配置可以在生成的BuildConfig.class文件中生成名为FLAVOR的字符串类型常量
        // 可以在AndroidManifest.xml文件中使用  如下:
        // <meta-data
        //     android:name="verNum"
        //     android:value="${verNum}" />
        flavorDimensions "verNum"
        // 当前项目的build.config文件里添加了一个boolean类型的变量
        // 该配置会在生成的BuildConfig.class中生成Boolean类型的常量
        buildConfigField("boolean", "isRelease", String.valueOf(rootProject.ext.isRelease))
    }
    // 设置构建类型,一般包含release和debug两个闭包
    buildTypes {
        // 发布包配置
        release {
            // 是否开启混淆
            minifyEnabled true
            // 是否启用未使用资源的收缩
            shrinkResources true
            // 指定混淆的规则文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // 设置签名信息
            signingConfig signingConfigs.releaseConfig
            // 是否对APK包执行ZIP对齐优化,减小zip体积
            zipAlignEnabled true
            // 指定RenderScript的编译优化等级,一般设置为3
            renderscriptOptimLevel 5
        }
        // 开发配置
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    // 配置Java SDK版本
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    // kotlin配置
    kotlinOptions {
        jvmTarget = '1.8'
    }
    // 配置资源文件路径,可指定不同版本资源文件
    sourceSets {
        // 通用资源文件
        main{
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java']
            res.srcDirs = ['src/main/res']
        }
        // 用各自对应的资源文件路径
//        channelA.res.srcDirs = ['src/main/res-a']
//        channelB.res.srcDirs = ['src/main/res-b']
    }
    // 配置多渠道Flavors,内部的一个闭包代表一个渠道
    productFlavors {
        // channelA渠道
        channelA{
//            flavorDimensions "verNum"
            flavorDimensions "channel"
            flavorDimensions "app_name"
            //
            applicationId project.android.defaultConfig.applicationId+'.client'
            // 在此处可以配置flavorDimensions的参数值
            manifestPlaceholders=[
                    channel:"huawei",
                    verNum:"10",
                    app_name:"客户端"
            ]
            buildConfigField("String", "test", "\"asdasd\"")
        }
        // channelB渠道
        channelB{
            flavorDimensions "verNum"
            flavorDimensions "channel"
            flavorDimensions "app_name"
            applicationId project.android.defaultConfig.applicationId+'.server'
            manifestPlaceholders=[
                    channel: "xiaomi",
                    verNum: "100",
                    app_name: "服务版"
            ]
        }
    }
    // 自定义导出APK文件的名称
    applicationVariants.all{
        // 获取是release还是debug版本
        def buildType = it.buildType.name
        def fileName
        // 下面的channel是获取渠道号,规则是${渠道名}-${applicationId}
        def channel = it.productFlavors[0].name.split("-")[0]
        // 获取当前时间
        def createTime = new Date().format("YYYY-MM-dd",TimeZone.getTimeZone("GMT+08:00"))
        it.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath+"/apks/${it.productFlavors[0].applicationId}/${createTime}")
        logger.quiet("文件夹路径:${project.rootDir.absolutePath+"/apks/${it.productFlavors[0].applicationId}/${createTime}"}")
        it.outputs.each{
            //我此处的命名规则是:渠道名_版本名_创建时间_构建类型.apk[大家也可以根据自己的需求命名]
            fileName = "${channel}_v${defaultConfig.versionName}_${createTime}-${buildType}.apk"
            //打印出apk文件名称,以便及时查看是否满足要求
            logger.quiet("文件名:${fileName}")
            //重新对apk命名。
            //Gradle4.0以下版本
            //it.outputFile = new File(it.outputFile.parent, fileName)
            //Gradle4.0(含)以上版本
            it.outputFileName = fileName
        }
    }
}
// 配置模块的依赖
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
    implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2'
    implementation 'com.trello.rxlifecycle4:rxlifecycle-components:4.0.2'
    implementation project(':mylibrary')
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值