# GradlePluginAsm **Repository Path**: zzuli/GradlePluginAsm ## Basic Information - **Project Name**: GradlePluginAsm - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-16 - **Last Updated**: 2021-02-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README > 此库是学习Gradle的,这是其中一篇文章,其他文章在doc里面 ## 1. 前言 Android开发,打包的时候可能会打内测包,外侧包,release包等,还有就是有时候还需要打不同渠道的包等.这时它们里面的包名,应用图标,应用名称,某些资源文件,某些java文件等可能不同,如果通过人工去手动改,改了之后再打包的话,那就太麻烦了.现在有了Gradle,它可以帮到我们. ps: 请先搞懂Android DSL的基本配置,比如compileSdkVersion是什么本文不会再介绍.有需要则查[官方文档](http://google.github.io/android-gradle-dsl/current/index.html),还有就是[写给Android开发的Gradle知识体系](https://mp.weixin.qq.com/s/YFMkJZXSqmc0OOuyAnc4mA)非常不错. ## 2. 统一配置 ### 2.1 以前的配置方式 今天我来带大家实现一种很方便的配置项目诸如compileSdkVersion,三方库引入等.最终的效果如下,可以直接通过Config点出来,并且还可以通过Ctrl+鼠标左键点过去. ![QQempF.png](https://s2.ax1x.com/2019/12/03/QQempF.png) 以前,很多很多项目会将一些基本的配置放到Project的build.gradle中,类似 ```gradle ext { compileSdkVersion = 30 buildToolsVersion = "30.0.1" targetSdkVersion = 30 minSdkVersion = 21 versionCode = 1 versionName = "1.0.0" } ``` 然后在各个module的build.gradle中进行使用这个配置 ```gradle android { compileSdkVersion rootProject.compileSdkVersion defaultConfig { versionCode rootProject.versionCode versionName rootProject.versionName minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion } } ``` 这种方式可以,但是不够优雅.我们写好rootProject,然后再输入"."的时候AS不会提示你有哪些可用的变量,不能智能提示.而且即使你一字不差的写好了,用Ctrl+鼠标左键也点不过去.在ext{}下的那些变量,你用快捷键搜索在哪些地方使用到了,AS也不知道....是不是觉得差点意思. ### 2.2 推荐的配置方式 > ps: 这种配置方式,最开始是看到[柯基大佬](https://github.com/Blankj)在使用,觉得太棒了,哈哈.这种配置方式,好像只能是3.5+版本的AS 我们来实现一种更优雅的方式,实现上面的功能.创建一个buildSrc这个名字的module,这个module的名称必须为buildSrc.因为我们创建的这个module是AS专门用来写插件的,会自动参与编译.创建好之后删除Android那一堆东西,什么java代码,res,清单文件等.只剩下build.gradle和.gitignore ![QQleEj.png](https://s2.ax1x.com/2019/12/03/QQleEj.png) 把build.gradle文件内容改成 ```gradle repositories { google() jcenter() } apply { plugin 'groovy' plugin 'java-gradle-plugin' } dependencies { implementation gradleApi() implementation localGroovy() implementation "commons-io:commons-io:2.6" } ``` 然后在main下面创建文件夹groovy,sync一下.没啥问题的话,应该能编译过.然后在groovy文件夹下面创建Config.groovy文件 ```groovy class Config { static applicationId = 'com.jiandan.gradledemo' static appName = 'GradleDemo' static compileSdkVersion = 30 static buildToolsVersion = '30.0.1' static minSdkVersion = 21 static targetSdkVersion = 30 static versionCode = 1 static versionName = '1.0.0' } ``` 可以看到,我们将常用配置全部填入这里.这个时候去module的build.gradle将这些参数全部替换掉. ```gradle android { compileSdkVersion Config.compileSdkVersion buildToolsVersion Config.buildToolsVersion defaultConfig { applicationId Config.applicationId minSdkVersion Config.minSdkVersion targetSdkVersion Config.targetSdkVersion versionCode Config.versionCode versionName Config.versionName } .... } ``` 完美.同理,将三方库也可以加进来 ```groovy class Config { static depConfig = [ support : [ appcompat_androidx : "androidx.appcompat:appcompat:$appcompat_androidx_version", recyclerview_androidx: "androidx.recyclerview:recyclerview:$recyclerview_androidx_version", design : "com.google.android.material:material:$design_version", multidex : "com.android.support:multidex:$multidex_version", constraint : "com.android.support.constraint:constraint-layout:$constraint_version", ], kotlin : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version", leakcanary : [ android : "com.squareup.leakcanary:leakcanary-android:$leakcanary_version", android_no_op : "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version", support_fragment: "com.squareup.leakcanary:leakcanary-support-fragment:$leakcanary_version", ], ] } ``` 在build.gradle中使用 ```gradle dependencies { implementation Config.depConfig.support.recyclerview_androidx .... } ```