一文了解build.gradle配置

news/2024/5/20 1:15:45 标签: android, gradle, android studio

Gradle

参考官方文档:https://developer.android.com/studio/build?hl=zh-cn#groovy


gradle_6">settings.gradle

存放于项目根目录下,此设置文件会定义项目级代码库设置,并告知 Gradle 在构建应用时应将哪些模块包含在内

接下来将以一个简单的 settings.gradle 文件,详细讲述对应常见配置项及其作用

// 依赖管理
// 定义远程或者本地仓库位置,gradle将会从这些仓库搜索并下载对应依赖以及相关内容
pluginManagement {

    // 定义仓库
    repositories {
        gradlePluginPortal()
        google()                // google官方仓库
        mavenCentral()          // maven中心仓库,替代老版本的JCenter
    }

    // 定义解决方案,即对所下载的依赖做出的处理
    resolutionStrategy{
        eachPlugin{
            if (requested.id.id == 'dagger.hilt.android.plugin'){
                useModule("com.google.dagger:hilt-android-gradle-plugin:2.38.1")
            }
        }
    }
}

// 定义所有模块的仓库位置
// 这是一项全局配置,对于单个模块仍然需要定义自己的build.gradle来设置!
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

// 根工程名称(即你创建该android项目时的名字)
rootProject.name = "Character"
// 定义模块目录所在位置
include ':app'

gradleprojectapp_52">build.gradle(project:app)

文件存在于于根目录下,是整个项目的顶层 build.gradle

gradle 一般用来定义全局变量、依赖地址以及相关的清理操作

// 构建脚本
buildscript {

    // 定义全局变量,常用于版本管理
    // 变量在子模块的build.gradle中直接以: $NAME 的形式调用
    ext {
        compose_version = '1.0.1'
        lifecycleVersion = '2.3.1'
        kotlinVersion = '1.5.21'
        ktlintVersion = '0.41.0'
        coroutines = '1.5.0'
        moshi_version = '1.12.0'
    }
}

// 依赖URL
// 之前于settings.gradle定义的是整体的仓库位置,而这里可以视为定义具体的依赖位置
// plugins定义项目中所有模块共用的 Gradle 依赖项
// apply false 不可以用于子模块的build.gradle
plugins {
    id 'com.android.application' version '7.1.0-rc01' apply false
    id 'com.android.library' version '7.1.0-rc01' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.21' apply false
}

// 定义清理build目录的对应方法
task clean(type: Delete) {
    delete rootProject.buildDir
}

gradlemoduleapp_92">build.gradle(module:app)

存在于 app 文件夹下(即模块专属 gradle

这里选用了油管上一个 MVVM 练手项目的 build.gradle 文件,可以前往github查看该项目

// 子模块的plugins
// 请注意!这里就不可以定义apply false了
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'dagger.hilt.android.plugin'
}

// 应用插件 Kapt
// 这是一款kotlin专用的依赖管理插件,推荐每个项目都添加!
apply plugin: 'kotlin-kapt'

// android
// 定义所有模块构建设置
android {

    // 定义编译SDK
    // 表示你的项目可以使用低于(或等于)该版本的所有API
    compileSdk 32

    // 定义默认配置
    defaultConfig {
        // 工件ID
        applicationId "com.example.character"
        // 最低可接受SDK版本
        minSdk 21
        // 最高可接受SDK版本
        targetSdk 32
        // 给开发者看的项目版本
        versionCode 1
        // 给客户看的项目版本
        versionName "1.0"


        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary true
        }
    }

    // 定义构建类型
    // 默认的构建类型有两种:debug(构建时会默认打上debug签名) release(构建时默认不打任何签名)
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    // 如果你用的是JDK8,那么请添加这个两个配置以提供支持
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    // 构建特性
    buildFeatures {
        compose true
    }
    // compose设置
    composeOptions {
        kotlinCompilerExtensionVersion compose_version
    }
    // 资源文件配置
    packagingOptions {
        resources {
            excludes += '/META-INF/{AL2.0,LGPL2.1}'
        }
    }
}

// 在这里直接把你需要添加的依赖贴进去就好了
// 贴完后点sync即可
dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation "androidx.compose.ui:ui:$compose_version"
    implementation "androidx.compose.material:material:$compose_version"
    implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
    implementation 'androidx.activity:activity-compose:1.3.1'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
    debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
    // dagger -hilt
    implementation "com.google.dagger:hilt-android:2.38.1"
    kapt "com.google.dagger:hilt-android-compiler:2.38.1"
    kapt "androidx.hilt:hilt-compiler:1.0.0"

    // Lifecycle components
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.4.0"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"

    // Kotlin components
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"

    // networking
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
    implementation("com.squareup.okhttp3:okhttp:4.9.0")
    implementation("com.squareup.okhttp3:logging-interceptor:4.9.0")
    implementation "com.squareup.moshi:moshi-kotlin:$moshi_version"
    kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
    // coil
    implementation("io.coil-kt:coil-compose:1.4.0")
}

三大主要文件全部讲完了,后续将提供打包过程以及对应签名等内容



http://www.niftyadmin.cn/n/78656.html

相关文章

Django框架之模型视图--HttpResponse对象

HttpResponse对象 视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。 1 HttpResponse 可以使用django.http.HttpResponse来构造响应对象。 HttpResponse(content响应体, con…

默认生成的接口实现方法体的问题

随着集成开发环境越来越强大,编程开发工作也变得越来越高效,很多的代码都不需要逐字输入,可以利用代码生成和自动补全来辅助开发。但是这样的便利也可能引起一些疏忽,本文就Java开发中默认生成的接口实现方法来谈谈以前遇到的问题…

程序员和他的女朋友一起创建了价值 150,000,000 美元的网站

本篇文章讲述了Otis和Elizabeth Chandler创办Goodreads.com的故事。他们从小就爱读书,创办网站前他们的困惑是没有很多人在线分享书评。Otis和Elizabeth觉得如果有一个地方把所有人的评论和评价收集起来,那将会很有价值。奥蒂斯和伊丽莎白从小就喜欢读书…

3. 投票 案例项目(合集)

3.投票-1创建项目和子应用 创建项目 命令$ python django-admin startproject mysite 目录结构mysite/ # 项目容器、可任意命名manage.py # 命令行工具mysite/ # 纯 Python 包 # 你引用任何东西都要用到它__init__.py # 空文件 告诉Python这…

DDR4介绍01

DDR4(第四代双倍数据率同步动态随机存储器SDRAM) 关于内存方面知识,大部分人、包括我自己也不是很懂,希望此篇文章能起到点作用,做硬件的就得把相关专业知识学牢了,尤其是专业术语。 下面是DDR4知识做一次…

全栈之路-前端篇 | 第二讲.基础前置知识【应用服务端与编程语言】学习笔记...

欢迎关注「全栈工程师修炼指南」公众号点击 👇 下方卡片 即可关注我哟!设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习!涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识“ 花开堪折直须折,莫待无花空折…

【信息化知识】

信息化知识 信息化 政务内网需要副省级以上 数据是信息的载体,信息的载体不仅仅只是数据 控制论创始人维纳及信息论的奠基者香农对信息的定义:信息是事物运动状态和状态变化的自我表述 信息化的主体是全体社会成员 信息的质量属性:可验证…

【Python语言基础】——Python NumPy 数组迭代

Python语言基础——Python NumPy 数组迭代 文章目录 Python语言基础——Python NumPy 数组迭代一、Python NumPy 数组迭代一、Python NumPy 数组迭代 数组迭代 迭代意味着逐一遍历元素。 当我们在 numpy 中处理多维数组时,可以使用 python 的基本 for 循环来完成此操作。 如果…