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

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


推荐阅读
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文将详细介绍Fuel CMS如何基于CodeIgniter框架构建,包括其单入口模式的实现方式及关键配置文件的作用。通过分析本地环境中的index.php和.htaccess文件,我们将更好地理解Fuel CMS的核心架构。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
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社区 版权所有