热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Gradle配置详解与实践

Gradle是AndroidStudio中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在Gradle中定义和使用共享变量,以确保项目的一致性和可维护性。

Gradle 是 Android Studio 中默认的构建工具,掌握其基本配置对于提高开发效率和项目管理至关重要。

共享变量的定义与使用

在 Gradle 开发过程中,经常会遇到多个模块需要使用相同的配置,如 compileSdkVersionbuildToolsVersion 等。这些公共配置被称为共享变量,通常需要统一管理以确保一致性。

为了方便管理和引用这些共享变量,可以在项目的根目录下创建一个名为 common_config.gradle 的配置文件:

ext { android = [ versionName: "1.0.0", versionCode: 1, compileSdkVersion: 30, buildToolsVersion: "30.0.3", minSdkVersion: 16, targetSdkVersion: 30 ] dependencies = [ appcompat: 'androidx.appcompat:appcompat:1.2.0', material: 'com.google.android.material:material:1.2.0', constraintlayout: 'androidx.constraintlayout:constraintlayout:2.1.3', stdlib: "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version", ktx: 'androidx.core:core-ktx:1.6.0' ] testDependencies = [ androidTestJunit: 'androidx.test.ext:junit:1.1.3', testJunit: 'junit:junit:4.+', testEspresso: 'androidx.test.espresso:espresso-core:3.4.0', testng: 'org.testng:testng:6.9.6' ] minifyEnable = true shrinkResEnable = minifyEnable javaVersion = 8 javaMaxHeapSize = '4G' sourceCompatibility = this.getJavaVersion() targetCompatibility = this.getJavaVersion() jvmTarget = '1.8' } def getJavaVersion() { switch (project.ext.javaVersion) { case 6: return JavaVersion.VERSION_1_6 case 7: return JavaVersion.VERSION_1_7 case 8: return JavaVersion.VERSION_1_8 case 9: return JavaVersion.VERSION_1_9 default: return JavaVersion.VERSION_1_8 } }

为了使项目中的所有模块都能引用这些共享变量,可以在每个模块的 build.gradle 文件中应用这个配置文件:

apply from: "common_config.gradle"

以下是应用这些共享变量的具体示例:

plugins { id 'com.android.application' id 'kotlin-android' } android { compileSdkVersion rootProject.android.compileSdkVersion buildToolsVersion rootProject.android.buildToolsVersion defaultConfig { applicationId "com.***.sdkdemoopt" minSdkVersion rootProject.android.minSdkVersion targetSdkVersion rootProject.android.targetSdkVersion versionCode rootProject.android.versionCode versionName rootProject.android.versionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { signingConfig signingConfigs.release minifyEnabled rootProject.minifyEnable proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility rootProject.sourceCompatibility targetCompatibility rootProject.targetCompatibility } productFlavors { _360 {} tencent {} baidu {} oppo {} vivo {} huawei {} xiaomi {} googleplay {} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } signingConfigs { release { storeFile file("***.keystore") storePassword "***" keyAlias "***" keyPassword "***" } debug { storeFile file("***.keystore") storePassword "***" keyAlias "***" keyPassword "***" } } variant.outputs.all { output -> def buildName = "com.***" def type = variant.buildType.name if (type == "debug") { def apkName = 'app-debug' outputFileName = new File("../.././../../../build/outputs/apk/debug", apkName + '_' + type + '.apk') } else { def releaseApkName = buildName + '_' + variant.productFlavors.get(0).name + '_' + type + '_' + versionName + '_' + releaseTime() + '.apk' outputFileName = releaseApkName } } repositories { flatDir { dirs 'libs' } } android.libraryVariants.all { variant -> variant.outputs.all { def fileName = "baseModel" + '_' + releaseTime() + ".aar" outputFileName = fileName } } kotlinOptions { jvmTarget = rootProject.jvmTarget } } static def releaseTime() { return new Date().format("yyyy-MM-dd--HH-mm-ss", TimeZone.getTimeZone("GMT+8")) } dependencies { implementation fileTree(includes: ['*.jar'], dir: 'libs') implementation rootProject.ext.dependencies.constraintlayout implementation rootProject.ext.dependencies.appcompat implementation rootProject.ext.dependencies.material implementation project(":libBase") implementation(name: 'libEngine', ext: 'aar') implementation rootProject.ext.dependencies.stdlib implementation rootProject.ext.dependencies.ktx testImplementation rootProject.testDependencies.testJunit androidTestImplementation rootProject.testDependencies.androidTestJunit androidTestImplementation rootProject.testDependencies.testEspresso }

上述配置涵盖了常见的 Gradle 设置,包括但不限于:

  • 签名密钥配置
  • 混淆开关设置
  • 自定义 APK 安装包名称
  • 自定义生成 AAR 包名称
  • 产品维度配置及友盟支持
  • 依赖 AAR 包
  • 依赖子模块

这些配置经过实际测试,确保在项目中稳定运行。


推荐阅读
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 使用lambda表达式排序Collections.sort(temp,(Stringa,Stringb)-{returnb.compareTo(a);});Collections ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 基于JQuery实现的评分插件
    本文介绍了一个使用JQuery创建的交互式评分控件。当用户将鼠标悬停在星星上时,左侧的星星会变为实心,右侧保持空心,并显示对应的评分等级;移开鼠标后,所有星星恢复为空心状态。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 本文详细探讨了 org.apache.hadoop.ha.HAServiceTarget 类中的 checkFencingConfigured 方法,包括其功能、应用场景及代码示例。通过实际代码片段,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
author-avatar
手机用户2602917083
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有