热门标签 | 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的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文详细介绍了如何在现有的Android Studio项目中集成JNI(Java Native Interface),包括下载必要的NDK和构建工具,配置CMakeLists.txt文件,以及编写和调用JNI函数的具体步骤。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 在编写顺序控制程序(梯形图)时,一些复杂的功能如时间控制和旋转换刀等难以仅通过位运算实现。因此,功能指令应运而生,旨在简化这些复杂操作的编程过程。本文详细介绍了FANUC PMC中常用的功能指令及其应用场景。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
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社区 版权所有