5.gradle配置和project

我们再第一篇文章简单介绍了一些gradle的配置,本文将会详细介绍一些build.gradle中gradle或AGP提供的一些常用配置。

一、常见gradle配置

一、项目级 build.gradle 配置

位于项目根目录下的build.gradle文件通常负责全局的构建设置,包括:

  1. 构建脚本仓库声明

    // 设置全局仓库地址
    allprojects {
        repositories {
            google() // Google Maven库
            mavenCentral() // 中央Maven仓库
            jcenter() // 已停用
            maven { url 'https://jitpack.io' } // 或其他自定义仓库
            maven {
                url uri('repo') //指定仓库为项目根目录的repo文件夹,也可以是本地任意目录
            }
            mavenLocal()//即 ~/.m2/repository
        }
    }
    

    这些仓库是Gradle寻找依赖包的地方,确保构建时能够获取到项目所需的aar或jar文件。

  2. 项目级别的插件管理

    Groovy

    buildscript {
        repositories { //同上repositories闭包  插件仓库
            google()
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:7.x.y' // 安卓Gradle插件(AGP)版本
        }
    }
    

    在这里,我们指定Gradle构建脚本自身使用的插件版本,例如安卓Gradle插件,它负责处理安卓项目的编译、打包、签名等一系列构建任务。

二、模块级 build.gradle 配置

在每个应用模块(如app)目录下的build.gradle文件更加具体地针对该模块进行构建配置:

  1. 应用模块基本信息

    Groovy

    apply plugin: 'com.android.application' // 应用模块插件
    
    android {
        compileSdkVersion 33 // 编译目标API版本
        buildToolsVersion "30.0.3" // 构建工具版本
    
        defaultConfig {
            applicationId "com.example.myapp" // 应用包名
            minSdkVersion 21 // 最低支持的Android API版本
            targetSdkVersion 33 // 目标兼容的Android API版本
            versionCode 1 // 版本号(整数)
            versionName "1.0" // 版本名称(字符串)
        }
    
        buildTypes {
            release {
                minifyEnabled false // 是否启用代码混淆
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 混淆规则文件
            }
        }
    
        signingConfigs {} // 签名配置,用于发布版本
    }
    
  2. 依赖管理

    Groovy

    dependencies {
        implementation 'com.google.android.material:material:1.x.y' // 第三方库依赖
        implementation 'androidx.appcompat:appcompat:1.x.y'
        testImplementation 'junit:junit:4.13.2' // 测试框架依赖
        androidTestImplementation 'androidx.test.ext:junit:1.1.3'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' // UI测试框架依赖
    }
    

    此处列举了不同类型的依赖,如运行时依赖(implementation)、测试依赖等,用于引入项目所需的库。

三、其他配置与优化

在Android项目中,Gradle提供了一系列高级配置选项,用于满足特定的构建需求和性能优化:

  1. 多Flavor构建:Android Gradle插件允许通过构建变种(Build Variants)对编译、打包过程进行更精细化的控制。例如,可以根据Flavor和Build Type的不同组合生成不同的APK。

    productFlavors {
        playStore {
            applicationIdSuffix ".playstore"
            versionNameSuffix "-play"
        }
        xiaomi {
            applicationIdSuffix ".xiaomi"
            versionNameSuffix "-mi"
        }
    }
    
    // 对不同渠道配置不同的构建资源
    sourceSets {
        playStore {
            res.srcDirs = ['src/playStore/res']
        }
        xiaomi {
            res.srcDirs = ['src/xiaomi/res']
        }
    }
    

    Flavor可以用来创建项目的多个变种,比如开发版、测试版和正式版等,每个变种可以有不同的包名、资源文件、依赖库等。

  2. 动态版本依赖

    dependencies {
        implementation 'com.squareup.retrofit2:retrofit:2.+'
    }
    

    使用+x.y.z+可以定义动态版本依赖,这样每次构建时都会获取最新兼容的子版本,避免了频繁手动更新版本号3

  3. 注解处理器(Annotation Processor)

    dependencies {
        annotationProcessor 'com.squareup.leakcanary:leakcanary-android-annotations:2.x.y' // 示例:LeakCanary注解处理器,kotlin使用kapt
    }
    

    以上仅为部分常用配置,实际项目中的build.gradle 文件根据项目的具体需求可能会包含更多复杂的构建脚本。随着Android Gradle插件和工具链的更新,开发者应当关注并使用最新的最佳实践。

以上这些高级配置选项能够帮助开发者根据实际场景灵活定制构建流程,提升项目构建效率,并有效优化最终生成的APK。

二、gradle中的Project

一、Project:构建的基本组织单位

Gradle中的Project是对一个独立构建单位的抽象表示,它可以是一个完整的应用程序,也可以是一个库模块,甚至是其他任何需要构建的对象。每个Project都包含了一系列任务(Tasks)、依赖项(Dependencies)以及其他项目属性,并且每个Project都有一个唯一的名称和一套自定义的构建脚本——build.gradlesettings.gradle

// settings.gradle
rootProject.name = 'MyAwesomeProject'
include 'app', 'lib', 'utils'

上述代码展示了settings.gradle文件如何定义一个包含三个子项目的根项目。每个子项目都是一个单独的Project,有自己的构建脚本。

二、Project的基本属性与方法

动态项目属性

Gradle通过Project实例执行构建文件来配置项目。脚本中使用的任何属性或方法都会委托给关联的Project对象。这意味着您可以直接在脚本中使用Project接口上的任何方法和属性。

defaultTasks('some-task')  // Delegates to Project.defaultTasks()
reportsDir = file('reports') // Delegates to Project.file() and the Java Plugin
  1. 名称(name):每个Project都有一个名称,可以通过project.name访问。在settings.gradle中也可以直接设置。
  2. 路径(path)Project的路径是由它的层级关系确定的。
  3. 构建脚本(build.gradle):每个Project都可以拥有自己的构建脚本,用于定义依赖管理、任务执行顺序、插件应用等构建逻辑。
  4. 任务(Tasks)Project可以包含多个构建任务,Project本质上是Task对象的集合,这些任务按照特定顺序执行以完成构建目标。开发者可以通过task关键字创建新任务,
  5. 依赖管理(Dependencies):每个Project都支持声明并解析依赖。在Java或Android项目中,通常会通过dependencies块添加编译时或运行时依赖。
  6. 插件(Plugins):插件可以用于模块化和重用项目配置。可以使用PluginAware.apply(java.util.Map)方法(apply plugin:)或使用PluginDependenciesSpec插件脚本块(plugins{})来应用插件,比如,对于Android项目,我们会用com.android.applicationcom.android.library插件。
  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值