千家信息网

Gradle的日常开发技巧有哪些

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本篇文章给大家分享的是有关Gradle的日常开发技巧有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Gradle是Android S
千家信息网最后更新 2025年11月11日Gradle的日常开发技巧有哪些

本篇文章给大家分享的是有关Gradle的日常开发技巧有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Gradle是Android Studio中默认的构建系统。Gradle 采用了 Groovy 语言作为主要的脚本语言。我们app项目的 build.gradle 和APP Moudle里的build.gradle文件,就是一个 Groovy 类。接下来让我就介绍下Gradle的基本功能和高级技巧。

基本用法

apply plugin: 'com.android.application'  android {     compileSdkVersion 26     buildToolsVersion "26.0.0"     defaultConfig {         applicationId "com.renny.gradletest"         minSdkVersion 17         targetSdkVersion 26         versionCode 1         versionName "1.0"         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"     }     buildTypes {         release {             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }     } }  dependencies {     compile fileTree(dir: 'libs', include: ['*.jar'])     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {         exclude group: 'com.android.support', module: 'support-annotations'     })     compile 'com.android.support:appcompat-v7:26.+'     compile 'com.android.support.constraint:constraint-layout:1.0.2'     testCompile 'junit:junit:4.12' }

上面的代码就是刚建好的Android工程时,studio为我们创建的默认Module里的build.gradle ,采用的Gradle版本是2.3.3。而Gradle大部分功能配置也是在个文件里实现的。

apply plugin::用来指定用的是哪个插件,开发中常见的值有

'com.android.application':Android APP插件(打包得到的是.apk文件)

'com.android.library':Android库插件(打包得到的是.aar文件)

'java':普通的java插件(打包得到的是.jar文件)

android{}用来指定Android打包插件的相关属性,其包含如下节点

compileSdkVersion(apiLevel):设置编译时用的Android版本

buildToolsVersion(buildToolsVersionName):设置编译时使用的构建工具的版本

defaultConfig:设置一些默认属性,其可用属性是buildTypes和productFlavors之和。(productFlavors默认文件里没有,会在后面介绍)

buildTypes:配置构建类型,可打出不同类型的包,常见的有debug和release两种,当然你还可以再增加N种

productFlavors:配置不同风格的APP,在buildTypes的基础上还可以让每一个类型的APP拥有不同的风格,所以最终可以打出的APK的数量就是buildTypes乘以productFlavors。构建的变量名称是productFlavors+buildTypes。

dependencies:配置依赖,这项可定是从eclipse换到studio后感觉最方便的一处了。各种外部依赖直接一行代码搞定,不用手动下依赖包了。

其中compile fileTree(dir: 'libs', include: ['*.jar'])的意思是依赖libs目录下全部的jar文件。

进阶用法

好了,上面的基本配置只是Gradle简单的用法,其实我们可以用Gradle玩出很多花样来。

manifest动态配置

很多第三方SDK需要在AndroidManifest.xml中配置你的一些key信息,以友盟推送为例:

但是你不同测试包和正式包的key是不同的,那么就可以这么修改:

然后在productFlavors中的各个版本中加上不同的信息,这样你打出的不同包采用的appkey也会不一样。

manifestPlaceholders = [UMENG_CHANNEL: "0",                UMENG_APPKEY : "123456789"]

不仅这些自定义元数据可以动态配置,android:icon,android:label这些标签也可以修改,这样打出的不同包就有不同的图标了,方便做区分

Moudle动态依赖

在组件化app里面,我们可能在测试包和正式包需要依赖不同组件。比如测试环境需要调试模块,但正式环境不需要。假如productFlavors如下,调试模块名字为module-test。

productFlavors {     ceshi{     }     publish{     } }

那么在dependencies里面就可以这么依赖test模块:

ceshiCompile project(':module-test')

同样buildTypes也是适用的,两者可以一起或单独使用:

debugCompile project(':module-test') ceshidebugCompile project(':module-test')

代码中读取变量

上面的这些功能都是gradle单独配置的,但我们往往针对不同的构建包有不同的需要在代码中体现的需求:日志打印,Toast等等。

虽然BuildConfig.DEBUG字段就可以判断,但我们可以用buildConfigField向代码中传递自定义的值,比如不同构建包需要不同Host开头的api地址,不同的https证书路径等,用法为:

buildConfigField 'type', 'name', '"vaule"'

比如:

defaultConfig {  buildConfigField 'String', 'author', '"renny"'  }

上面的是加在defaultConfig 中的,而加在buildTypes或productFlavors中就会在不同构建版本出现不同的值。如果再配置上不同的applicationId,那么就可以在同一个手机上同时安装不同构建版本的应用。

productFlavors {     ceshi{         applicationId "com.renny.test"        buildConfigField "String", "API_TEST", "http://test.renny.com/android"    }     publish{         applicationId "com.example.publish"       buildConfigField "String", "API_PUBLISH", "http://publish.renny.com/android"    } }

经过上面的介绍,你可能会发现buildTypes和productFlavors定义很相似,不过他们的差别在于改变 buildType 不会改变应用程序的代码,它们只是处理的东西不同,你可以通过 buildType 来获取更多的技术细节(例如:build optimization,log level 等等),但是app的内容不会改变,相反的,使用productFlavor 配置可以改变app的内容(ps:内容可以设想成 package 理解,buildType 没法改 applicationId)。

Gradle task

Gradle task适合用来完成一些既繁琐又容易出错的重复性手工作,比如批量修改,复制,重命名文件。

比如applicationVariants.all这个task可以针对每个构建版本设置各种属性,比如修改每个构建版本生成的apk名字:

applicationVariants.all { variant ->        variant.outputs.each { output ->            output.outputFile = new File(                    output.outputFile.parent,                    ("app-${variant.buildType.name}"+"-" + new Date().format('yyyyMMdd') + ".apk").toLowerCase())        }    }

gradle会默认匹配生成每种productFlavors*buildTypes的构建版本,如果你想跳过其中的几种就可以这么做:

variantFilter { variant ->     if (variant.buildType.name.equals('release')) {         variant.setIgnore(!variant.getFlavors().get(1).name.equals('ceshi'));     }     if (variant.buildType.name.equals('debug')) {         variant.setIgnore(variant.getFlavors().get(1).name.equals('ceshi'));     } }

以上就是Gradle的日常开发技巧有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

不同 配置 版本 文件 代码 插件 面的 就是 属性 技巧 开发 内容 功能 动态 更多 模块 类型 测试 信息 变量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 易陶无限网络技术有限公司 雅安网络技术质量 生成的数据库是文件夹还是文件 pi实时数据库价格 天津软件开发驻场报价 江苏电商软件开发要多少钱 西安商品管理系统软件开发公司 徐汇区数据软件开发质量保障 ssm框架与软件开发论文 有线网络技术和无线网络技术 手机网络安全个人自查 华为安全模式紧急数据库 怎么放个Html到服务器里 软件开发过程中的作业风险及评估 介绍数据库系统的分类 火绒安全软件服务器安全异常 全国网络安全小报模板 大连网络技术培训学校 软件开发外部接口协议 网络安全专业毕业干嘛 江苏电商软件开发要多少钱 测控软件技术数据库 市面上主流的云服务器比较 软件开发加上电气工程师 psp无法连接服务器通讯 规划调研及数据库构建 lol怎么弄服务器 魔域各种数据库爵位表 天象网络技术广州有限公司 哪个不是数据库系统
0