说明:本文参考自《Android群英传–神兵利器》

对于Android开发者来说Gradle是个绕不过去的技术点,只有能理解并熟练的使用Gradle才可以高效有序的开发。

Gradle是什么:

简单来说Gradle就是一个新兴的项目构建工具,他有着很高的灵活度,可以满足我们很多的项目需求。关于Gradle的介绍可以看这篇博文:

Gradle for Android 系列:为什么 Gradle 这么火

Android的Gradle:

Android中的一个project主要有四个Gradle文件:

  • 属于项目的build.gradle:
buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:2.1.2'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        jcenter()    }}

在这里边指定了使用的代码仓库,声明了使用的Android Gradle插件版本,在这里边主要是可以对整个项目进行配置,这些配置适用于该项目下的所有Module

  • 属于Module的build.gradle:
apply plugin: 'com.android.application'android {    compileSdkVersion 23    buildToolsVersion "23.0.3"    defaultConfig {        applicationId "com.wei.rxjavademo"        minSdkVersion 21        targetSdkVersion 23        versionCode 1        versionName "1.0"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.4.0'    compile 'io.reactivex:rxjava:1.0.14'    compile 'io.reactivex:rxandroid:1.0.1'}

在这里边主要是对于指定的Module进行具体的配置。主要分为三大块:apply plugin(声明了Gradle引入的插件),android(描述了该Android Module在构建过程中的配置参数等信息),dependencies(描述了构建过程中所有依赖的库)。我们绝大部分的配置都是在这里完成。

  • 本地配置local.properties:
## This file is automatically generated by Android Studio.# Do not modify this file -- YOUR CHANGES WILL BE ERASED!## This file must *NOT* be checked into Version Control Systems,# as it contains information specific to your local configuration.## Location of the SDK. This is only used by Gradle.# For customization when using a Version Control System, please read the# header note.#Mon Jun 06 16:24:18 CST 2016ndk.dir=E\:\\Android\\Android_SDK\\ndk-bundlesdk.dir=E\:\\Android\\Android_SDK

这个文件主要是指定使用的SDK和NDK的路径,一般情况不需要改动。

  • 设置settings.gradle:
include ':app'

这个里边主要是声明了整个项目所引用的Module,每当新建一个Module时就会自动的添加进来。

Gradle实践:

Gradle的配置项有很多,我们只需要知道一些常见的即可,更多更详细的Gradle配置项可以查看Android提供的Gradle参考文档:

Android Plugin DSL Reference

使用Gradle自定义项目目录结构:

可以在Module的build.gradle文件的android领域内进行项目结构的自定义:

 sourceSets{        main{            java.srcDirs=['src']            res.srcDirs=['src']            jniLibs.srcDirs=['libs']            jni.srcDirs=['jni']        }    }

可以根据需要配置相应的目录,达到修改文件目录的结果。

使用Gradle自定义代码目录结构:

sourceSets{        main{            res.srcDirs=[                    'src/main/src',                    'src/main/res/layout/activity',                    'src/main/res/lauout/fragment']        }    }

通过这样可以很好的对代码进行分类管理。

使用Gradle配置全局属性:

在project的gradle文件中可以通过ext来配置一些全局的属性,然后在Module文件中直接引用使用,这样可以保证版本的一致性和后期的可维护性。
在project的build.gradle中配置这些全局需要的变量

ext{    compileSdkVersion=23}

在需要用到的Module的build.gradle文件中引用:

android {    compileSdkVersion rootProject.ext.compileSdkVersion    buildToolsVersion "23.0.3"    defaultConfig {        applicationId "com.wei.rxjavademo"        minSdkVersion 21        targetSdkVersion 23        versionCode 1        versionName "1.0"    } }

使用Gradle对某一Module进行配置:

这些操作都是在Module的build.gradle文件中配置的。

配置默认的一些属性:

一些常见的参数都可以在这里配置,最小版本号,目标版本号等。

defaultConfig {        applicationId "com.wei.rxjavademo"        minSdkVersion 21        targetSdkVersion 23        versionCode 1        versionName "1.0"    }

配置buildTypes:

在这里可以针对不同的编译类型进行不同的配置,常见的有debug版本和release版本,也可以自定义编译类型,同时声明一些编译时的参数。

buildTypes {        debug{}        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            signingConfig signingConfigs.release        }        wqc{            applicationIdSuffix ".wqc"            minifyEnabled false        }    }

同时buildType也支持通过继承的方式来进行拓展,而不必须每次都重新写一个:

wqc.initWith(buildTypes.debug)wqc{    applicationIdSuffix ".wqc"}

配置signingConfigs:

在这里可以配置签名信息,当然也可以每次打包时通过AS提供的窗口进行打包。
Android中的Gradle_第1张图片

使用配置好的signingConfigs来进行签名:

//在我们之前自定义的编译版本中使用签名 wqc{            applicationIdSuffix ".wqc"            signingConfig signingConfigs.release }

配置ProGuard:
可以通过配置ProGuard来进行代码混淆,但是不仅仅只是用于代码混淆,它可以对apk文件进行一定的优化和精简。

 buildTypes {        debug{}        release {            //通过将minifyEnable 设置为true来开启代码混淆            //下边的文件一个是SDK提供的默认混淆文件,另一个是项目中的混淆规则文件,我们可以在里边进行混淆规则的定制。            minifyEnabled true            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            signingConfig signingConfigs.release        }        }

Gradle动态配置参数:

System.properties方式:

在项目的gradle.properties文件中定义需要设置的参数名和具体的值

systemProp.keyAlias=myusingkey

在需要使用该参数的地方通过System.properties[]来获取相对应的值

keyAlias System.properties['keyAlias']

通过key/value的方式:
在gradle.properties文件中定义需要的变量参数:

wqc.keyAlias=myusingkey

使用时可以通过project.property来获取

keyAlias project.property('wqc.keyAlias')

Gradle多渠道打包:

关于Gradle的多渠道打包可以看慕课网的这个讲解视频,很详细完善:

Android apk多渠道打包

Android中Gradle常用命令:

  • gradlew task : 查看项目中的所有Task

  • gradlew task –all:查看所有task的作用和相互之间的调用关系

  • gradlew assemble :可以编译出release包和debug包,可以使用gradlew assembleRelease或者gradlew assembleDebug来单独编译一种包

  • gradlew check:用于检测任务

  • gradlew clean:清理项目的中间数据

  • gradlew build:构建项目,相当于同时执行了check任务和assemble任务

总结

以上就是一些Gradle的基础的使用方式,对于入门的初学者已经足够的,更高级和详细的配置可以查看Android给出的文档:Android Plugin DSL Reference 或者是查看Gradle的官网: Gradle官网

更多相关文章

  1. Android应用程序包含的各个文件
  2. Android中String资源文件的String.format方法(java)
  3. Android中扫描多媒体文件操作详解
  4. Android名词解释之什么是APK文件
  5. Android 逆向apk的配置文件
  6. Android 根文件系统启动过程。
  7. android 下载网络pdf文件后并显示
  8. Android 上传头像(文件)到服务器
  9. Android代码混淆配置(Proguard文件解析)

随机推荐

  1. java常量的定义
  2. JAVA-全局变量与局部变量-继承-封装-(是三
  3. python 日志简单使用
  4. 关于反序列化时抛出java.io.EOFException
  5. 从RF、BB、AP、外设4个角度看手机的硬件
  6. 忽略转义字符时拆分字符串
  7. java中枚举enum的使用
  8. [刘阳Java]_了解BeanFactory_第4讲
  9. Java多线程六:线程优先级和yield()让步函
  10. JMeter-Java压力测试工具-02