热门标签 | 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 包
  • 依赖子模块

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


推荐阅读
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
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社区 版权所有