Android Studio Gradle配置详解

来源:互联网 发布:win10的80端口被占用 编辑:程序博客网 时间:2024/06/05 17:07

构建工具就是把元代码生成可执行应用程序的自动化程序。Android studio中的gradle就是这么一种构建工具,其实用于Android构建工具之前还有Ant和Maven,这个在eclipse中用的比较多。
Groovy语言是gradle的基础。Groovy是一种动态语言,基于Java,跟Java一样运行于Java虚拟机,因此呢它就是一门运行在Java平台上的语言特性比较灵活的动态语言。本文主要介绍gradle在Android studio中的配置,因此不对这门语言语法做讲解,而且说实话如果只是Android开发个人并不建议完整学习Groovy语言,毕竟gradle在Android中的应用只是那几百行代码,虽然这几百行代码非常重要,但也没必要深入学习,了解个大概差不多了,我也就是了解了基本语法。当然如果你说你精力旺盛,就有能力把Android学习好的同时,还可以学习多门其他的语言,那我也没话说,毕竟多多益善对有能力的人总是有好处的。
gradle主要有key配置,线上测试环境配置,版本号配置,apk输出路径等功能
1.下载依赖
2.源代码转化成二进制代码
3.打包生成二进制代码
4.单元测试
5.部署到生产系统
一个Android项目中至少有两个build.gradle文件,一个是整个项目目录中的,一个是主module目录中的。项目目录中还有setting.build文件,其中的代码比较简单:

include ':app', ':library', ':pulltorefreshlibrary'

这个文件是用来管理整个项目中有module的。创建一个module,在该setting.build文件中后面自动加上去。一般不需要做手工改动。当然如果需要把module从项目中删除,要先在这里把对应的module名删了,再去删module,否则module无法删除。
在看一个完整版项目目录中的build.gradle文件:

buildscript {       //设置脚本运行环境    repositories {        jcenter()//jcenter中央仓库。        mavenCentral()//maven仓库。    }    dependencies {//远程依赖        classpath 'com.android.tools.build:gradle:2.2.0'//这是gradle插件版本。跟gradle版本有区别。        //classpath         // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {//远程仓库。这里有两个远程仓库        jcenter()        mavenCentral()    }}

既然这属于项目目录,因此它所管理的范围也是整个项目,比如gradle插件版本和依赖的远程仓库。gradle插件版本一般需要跟gradle版本号保持对应关系,否则打开项目就会出错。依赖的远程仓库原来用maven仓库比较多,现在Android把它转到jcenter仓库了。好多我们依赖的包是在jcenter仓库中,当然也有没有的时候。没有的话gradle会去maven仓库中去找。
接下来是完整版主module的build.gradle文件:

apply plugin: 'com.android.application'//这句话说明这是一个应用的module。如果是library,则应该是‘com.android.library’apply plugin: 'android-apt'//不是必填,应用apt注解插件,现在一般不用apt了,                            //因为维护它的作者表示不再维护。注解类工具可以使用annotationprocessordef releaseTime() {    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"));}android {    compileSdkVersion 24//SDK版本号,    buildToolsVersion "24.0.3"//SDK版本号对应的构建工具版本号。    defaultConfig {        applicationId "com.cc.chendroid"//应用包名        minSdkVersion 16//最小支持的SDK版本号        targetSdkVersion 24//目标版本号        versionCode 1//软件版本号,自己设定,可以采用自增的方式        versionName "1.0"//软件版本名称,是给用户看的        multiDexEnabled true//支持多个dex文件的编译        ndk {            // 选择要添加的对应cpu类型的.so库            abiFilters "armeabi", "armeabi-v7a", 'armeabi-v8a', "x86"        }        manifestPlaceholders = [        ]    }    // 忽略 lint 错误    lintOptions {        abortOnError false    }    signingConfigs {//签名时会自动生成的签名配置        releaseConfig {            storeFile file("Chendroid.jks")            storePassword "cc"            keyAlias "chendroid"            keyPassword "cc123"        }    }    buildTypes {        release { // 正式版本配置            minifyEnabled false//不进行混淆            signingConfig signingConfigs.releaseConfig//签名时自动生成            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            buildConfigField("String", "API_HOST", "\"http://101.200.222.73/\"")//配置好一些参数,比如API的host部分。            //生成APK的存放路径            applicationVariants.all { variant ->                variant.outputs.each { output ->                    output.outputFile = new File(                            output.outputFile.parent,                            "${defaultConfig.applicationId}-${variant.buildType.name}-${defaultConfig.versionName}-${releaseTime()}.apk".toLowerCase())                }            }        }        debug { // 测试版本配置            debuggable true            minifyEnabled false            if (true) { // true 开发服,false 正式服,配置debug的服务器地址。注意,测试的时候应该有测试服和正式服的链接区别                buildConfigField("String", "API_HOST", "\"http://101.200.222.73/\"")            } else{                buildConfigField("String", "API_HOST", "\"http://101.200.222.74/\"")            }        }    }    sourceSets {//源码设置,一般指很多从Eclipse中迁移过来的代码,在来设置        main {            jniLibs.srcDirs = ['libs']        }    }    productFlavors {//多渠道打包            huawei {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]        }            qh360 {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]        }    }    packagingOptions {        exclude 'META-INF/NOTICE.txt'        exclude 'META-INF/NOTICE'    }    compileOptions {//依赖的Java环境,现在一般都是Java8了        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }}repositories {    flatDir {        dirs 'libs' // 存放aar的目录地址    }    jcenter()    mavenCentral()    maven { url "http://dl.bintray.com/piasy/maven" }}dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')//依赖libs目录中的jar包    compile project(':library')    compile project(':pulltorefreshlibaray')//刷新框架,是一个module,因此用compile project()    compile(name: 'alisdk-feedback-release', ext: 'aar')    compile 'com.squareup.retrofit2:retrofit:2.2.0'//网络加载框架    compile 'com.github.bumptech.glide:glide:3.7.0'//Glide,一款优秀的图片加载框架}

上面是module中的build.gradle配置,当然可能不太全面,不过基本上项目中改用到的都已经写上了。