当前位置: 首页 > news >正文

安卓Gradle总结

1. 简介

Gradle 是 Android 官方推荐的构建系统,基于 Groovy DSL,通过脚本化的方式管理项目依赖、任务执行和打包流程

一套标准的安卓项目应该如下:

projectRoot/
├── app/            # 主模块(可自定义命名)
│   ├── src/        # 源代码目录(按包名分类)
│   │   ├── main/      # Java/Kotlin + 资源文件(布局/图片/字符串等)
│   │   └── androidTest/ # 设备端测试代码
│   ├── build.gradle     # 模块级构建脚本(定义依赖、插件等)
├── build.gradle       # 顶层全局设置(如仓库地址、公共依赖)
└── settings.gradle    # 指定参与构建的模块列表

gradle编译的过程如下:

1). 解析settings.gradle

该文件是项目级别的gradle文件,用于确定参与构建的所有模块,加载环境变量和属性文件。

2). 配置阶段

执行各模块的 build.gradle,创建任务图并建立依赖关系模型。此时不会实际执行任何操作

3). 执行阶段

合并资源 → 编译Java→处理Manifest→打包APK→签名对齐

2. settings.gradle配置

settings.gradle最基础的作用是指定哪些目录被视为项目的子模块,如:

include("app", "library", "another-module") 

如果省略此句,默认只会将当前根目录作为唯一项目;对于多模块工程必须显式声明。
还可以设置跨项目的属性传递,向所有子项目暴露通用的配置参数

rootProject {extensions.add("myGlobalProp", "value") // 自定义扩展属性
}

然后在任意子模块的build.gradle中可以直接读取参数:

println project.property('myGlobalProp')  // => "value"

再一个就是配置插件的来源,增强安全性:

pluginManagement {repositories {maven { url = uri(" ") } //可以写一些镜像源gradlePluginPortal() // 官方仓库仍建议保留}
}

3. build.gradle配置

build.gradle在根目录下会有一个,是用于顶层全局配置,比如设置仓库地址,公共依赖等。每个模块下,还会有一个模块级的build.gradle,会牵扯到模块的业务逻辑,用于构建模块。

顶层build.gradle一般会配置如下:

//插件门户管理
pluginManagement {repositories {mavenCentral() // 确保能下载到最新插件版本google()       // Android官方插件源gradlePluginPortal() // Gradle社区认证的插件仓库}
}
//集中定义所有Maven/Ivy源以避免重复代码
allprojects {repositories {maven { url = uri("https://maven.aliyun.com/repository/public") } // 阿里云镜像加速国内访问mavenLocal() // 优先使用本地缓存的构件mavenCentral() // JCenter已废弃,改用中央库替代方案}
}

项目级build.gradle:

  • 域声明:必须以 apply plugin: ‘com.android.application’ 开头(应用)或 library(库),启用对应类型的编译逻辑。
  • 配置块:关键属性包括:
    defaultConfig { … } → 设置默认维度(如版本号、屏幕密度适配策略);
    dependencies { … } → 引入三方库(如 implementation ‘com.squareup.retrofit2:retrofit:2.9.0’);
    android { … } → 精细调控编译选项(混淆规则、NDK支持等)
  • 变量复用:利用 ext 或 extra 集中管理常量值,提升可维护性。
plugins {id 'com.android.application'
}android {...defaultConfig {applicationId "com.example.myapp"minSdkVersion 21     //minSdk targetSdk 这些类写法都已经弃用targetSdkVersion 30versionCode 1versionName "1.0.0"  // 修改此处的值即可改变APK的名称...}// 所有flavor相关资源都应该配置在模块级的src/目录下,用于表示不同版本的代码productFlavors{free{resValue "string", "app_name", "free"}paid{resValue "string", "app_name", "paid"}}//指定签名signingConfigs {// debug 和 release 分开写debug {storeFile file("${project.rootDir}/mykey.keystore")storePassword '123456'keyAlias 'mykey'keyPassword '123456'}}关于文件路径最好使用动态路径,灵活性更高不易冲突buildTypes {debug {buildConfigField "boolean", "ENABLE_LOGGING", "true"resValue "string", "app_name", "MyApp"//自定义输出目录   // 将debug构建的APK输出到模块的根目录下的debug目录outputFile = "${rootProject.projectDir}/outputs/debug/app-debug.apk"}release {buildConfigField "boolean", "ENABLE_LOGGING", "true"resValue "string", "app_name", "MyApp"  //用于替代AndroidMainfest.xml中的字段// 将release构建的APK输出到模块的根目录下的release目录outputFile = "${rootProject.projectDir}/outputs/release/app-release.apk"}}// 编译版本 显示指定编译的JDK版本  1_8对应java8 11 17 21 分别对应java11 java17 java21 compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}// 依赖库添加 包括本地和远程依赖dependencies {}

4. 实用工具

编译出问题的时候可以通过以下命令获取详细错误信息:

./gradlew assembleDebug --stacktrace --info./gradlew lint //用于代码检查,可以排除一些代码规范问题
http://www.dtcms.com/a/308115.html

相关文章:

  • 【机器学习篇】01day.python机器学习篇Scikit-learn入门
  • Java 安全框架(尤其是 Spring Security)中,Object principal(主体对象)详解
  • 计算机网络学习--------三次握手与四次挥手
  • JavaScript 框架语法特性对比-中文版
  • 前端方案设计:实现接口缓存
  • Tlias 案例-部门管理(前端)
  • 报文头 和fprint的说明 day45
  • 前端-移动Web-day2
  • 极客大挑战2020(部分wp)
  • 【1】数据可视化分析方法
  • 【go】 if条件控制语句
  • 渗透RCE
  • php在使用 composer 安装时报错集合
  • Jmeter 命令行压测、HTML 报告、Jenkins 配置目录
  • 材质:3D渲染的隐形支柱
  • 第二篇:Three.js核心三要素:场景、相机、渲染器
  • Linux网络-------3.应⽤层协议HTTP
  • 【运维基础】Linux 进程调度管理
  • 异步I/O和同步I/O
  • USRP捕获手机/路由器数据传输信号波形(下)
  • 金融专题|某跨境支付机构:以榫卯企业云平台 VPC 功能保障业务主体安全
  • 文档识别算法-文字识别接口-表格还原-图表文字识别API
  • HCIA-Datacom认证笔记:IP路由基础——核心概念与路由分类
  • Amazon Aurora MySQL 8.0 完整指南
  • 一些利用AIOps工具进行云原生技术持续创新的成功案例
  • Python 元编程实战:动态属性与数据结构转换技巧
  • Pycaita二次开发基础代码解析:曲面法线生成、零件加载与材料应用
  • 基于LSTM-GRU混合网络的动态解析:美联储维稳政策与黄金单日跌1.5%的非线性关联
  • AI陪伴的发展现状
  • STM32——HAL 库MDK工程创建