Android Studio Gradle配置详解

构建工具就是把元代码生成可执行应用程序的自动化程序。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了,
                            //因为维护它的作者表示不再维护。注解类工具可以使用annotationprocessor

def 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配置,当然可能不太全面,不过基本上项目中改用到的都已经写上了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值