Android中的Gradle

说明:本文参考自《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 2016
ndk.dir=E\:\\Android\\Android_SDK\\ndk-bundle
sdk.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领域内进行项目结构的自定义:

扫描二维码关注公众号,回复: 761565 查看本文章
 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提供的窗口进行打包。
图片

使用配置好的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官网

猜你喜欢

转载自blog.csdn.net/wqc_csdn/article/details/53572921