build.gradle

 
apply plugin: 'com.android.application'//module的类型,com.android.application是程序,com.android.library为库
android{//安卓构建过程需要配置的参数 
    compileSdkVersion 22//编译的版本
    buildToolsVersion "22.0.1"//编译的Tools版本
    defaultConfig{//默认配置,会同时应用到debug和release版本上
        applicationId "com.example.suwei.myapplication"//应用程序包名
        minSdkVersion 8//支持的最低版本
        targetSdkVersion 19//支持的目标版本
        versionCode 1//版本号
        versionName "1.0.1"//版本名
    }
    sourceSets{//目录指向配置
        main{
            manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件
            java.srcDirs = ['src']//指定source目录
            resources.srcDirs = ['src']//指定source目录
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']//指定资源目录
            assets.srcDirs = ['assets']//指定assets目录
            jniLibs.srcDirs = ['libs']//指定lib库目录
        }
        debug.setRoot('build-types/debug')//指定debug模式的路径
        release.setRoot('build-types/release')//指定release模式的路径
    }
    signingConfigs{//签名配置
        release{//发布版签名配置
            storeFile file('fk.keystore')//秘钥文件路径
            storePassword "123"//秘钥文件密码
            keyAlias "fk"//Key别名
            keyPassword "123"//key密码
        }
        debug{//debug版本配置
            storeFile file('fk.keystore')
            storePassword "123"
            keyAlias "fk"
            keyPassword "123"
        }
    }
    buildTypes{//build类型,这里面可以配置debug和release版本的一些参数,比如混淆、签名配置等
        release{//发布
            minifyEnabled true//混淆开启
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆规则文件
            signingConfig signingConfigs.release
        }
        debug{
            signingConfig signingConfigs.release
        }
    }
}
dependencies{//模块依赖
    compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: ['*.jar'])//编译lib目录下的.jar文件
    compile project(':EasyLink')//编译附加的项目
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'//编译来自Jcenter的第三方开源库
    compile 'com.android.support:appcompat-v7:21.0.3'//依赖appcompat库  
}

project下的build.gradle是基于整个project的配置,而module下的build.gradle是每个模块自己的配置。以下是project下的build.gradle

buildscript {
    repositories {//构建过程依赖的仓库
        jcenter()
    }
    dependencies {
        //下面声明的是gradle插件的版本
        classpath 'com.android.tools.build:gradle:2.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {//这里配置的是整个项目需要
    repositories {
        jcenter()
    }
}

为什么仓库repositories需要声明两次,这其实是由于它们作用不同,buildscript中的仓库是gradle脚本自身需要的资源,而allprojects下的仓库是项目所有模块需要的资源

 1.gradle.properties

配置文件,这里面可以定义一些常量供build.gradle使用,比如可以配置签名相关信息如keystore位置,密码,keyalias等。

2.settings.gradle

配置多模块, 例如多个模块  

include ':app', 'module-b'

3.gradle/wrapper/gradle-wrapper.properties 和 gradle-wrapper.jar

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

4.gradlew  gradlew.bat

这分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。这样就可以保证在不同的环境下构建时都是使用的统一版本的gradle,即使该环境没有安装gradle也可以,因为gradle wrapper会自动下载对应的gradle版本。
 
gradlew的用法跟gradle一模一样,比如执行构建gradle build命令,你可以用gradlew build。gradlew即gradle wrapper的缩写。
5.gradle仓库
gradle有三种仓库,maven仓库,ivy仓库以及flat本地仓库:
maven{  
      url "..."  
}  
ivy{  
      url "..."  
}  
flatDir{  
      dirs 'xxx'  
}  
repositories{  
     mavenCentral()  
     jcenter()  
     mavenLocal()  
}  

gradle中有一个核心概念叫任务,gradle的android插件提供了四个顶级任务:

1.assemble 构建项目输出 2.check 运行检测和测试任务 3.build 运行assemble和check 4.clean 清理输出任务

执行任务可以通过gradle/gradlew+任务名称的方式执,执行一个顶级任务会同时执行与其依赖的任务,比如你执行gradlew assemble 它通常会执行:

gradlew assembleDebug  

gradlew assembleRelease

这时会在你项目的build/outputs/apk或者build/outputs/aar目录生成输出文件 

6.导入本地jar包:
跟eclipse不太一样,android studio导入本地jar除了将jar包放到模块的libs目录中以外,还得在该模块的build.gradle中进行配置,配置方式是在dependencies结点下进行如下声明:

compile files('libs/xxx.jar')  

如果libs下有多个jar文件,可以这样声明:

compile fileTree(dir: 'libs', include: ['*.jar'])  

7.导入maven库:

compile 'com.android.support:appcompat-v7:21.0.3'  

可见,格式为 compile 'groupId:artifactId:version'

8.导入某个project:
你的app是多模块的,假设有两个模块app和module-A,并且app模块是依赖module-A的,这时候我们就需要在app模块的build.gradle中的dependencies结点下配置依赖:

compile project(':module-A')  

并且你需要在settings.gradle中把module-A模块包含进来:include ':module-A',':app' 

此外,这种情况下module-A模块是作为库存在的,因而它的build.gradle中的插件声明通常应该是这样的:

apply plugin: 'com.android.library' 

而且,作为library的模块module-A的build.gradle文件的defaultConfig中是不允许声明applicationId的,这点需要注意。

9.声明三方maven仓库:
可能你项目需要的一些库文件是在你们公司的私服上,这时候repositories中仅有jcenter就不行了,你还需要把私服地址配到里面来,注意,应该配到project的build.gradle中的allprojects结点下或者直接配到某个模块中如果仅有这个模块用到。
配置方式:

repositories{  
     maven{  
          url="http://mvnrepo.xxx.com"  
     }  
}  

10.依赖三方aar文件,将库项目导出为aar

compile 'com.aaa.xxx:core:1.0.1@aar'

首先你的项目必须是一个库项目,build.gradle中进行配置

然后你可以在命令行中进到项目目录,执行如下gradle任务:

gradlew assembleRelease//确保该目录下有gradlew文件  

生成的aar在/build/output/aar文件夹中

11.多dex支持(打包65k方法数限制)
首先在build.gradle的buildConfig中增加如下配置:

multiDexEnabled true 

接着,在dependencies结点下增加如下依赖:

dependencies{  
compile 'com.android.support:multidex:1.0.0'  
}  

最后,让你的Application继承MultiDexApplication,如果你的应用没有声明Application,可以在manifest文件的application结点下增加name属性,值为android.support.multidex.MultiDexApplication。

12.自动移除不用资源

buildTypes{  
     release{  
           minifyEnabled true  
           shrinkResources true  
     }  
}  

13.忽略lint错误:

android{  
     lintOptions{  
           abortOnError false  
     }  
}  

14.声明编译的java版本

compileOptions {  
     sourceCompatibility JavaVersion.VERSION_1_7  
     targetCompatibility JavaVersion.VERSION_1_7  
}  

15.应用签名配置

首先在build.gradle的android结点下增加如下配置:

signingConfigs {  
     //debug版本的签名配置,通常不用配,因为有默认的debug签名  
     debug {  
     }  
     release {  
          storeFile file("key.jks")  
          storePassword "123456"  
          keyAlias "mykey"  
          keyPassword "123456"  
     }  
}  

注:debug的默认签名为: 

signingConfig android.signingCongfigs.debug  

位置为 ${home}\.android\debug.keystore 

真实开发中,把密码配置到build.gradle中不是很好的做法,最好的做法是放在gradle.properties中:

RELEASE_STOREFILE=xxx.jks  
RELEASE_STORE_PASSWORD=123456  
RELEASE_KEY_ALIAS=mykey  
RELEASE_KEY_PASSWORD=123456  

然后直接引用即可:

storeFile file(RELEASE_STOREFILE)  
storePassword RELEASE_STORE_PASSWORD  
keyAlias RELEASE_KEY_ALIAS  
keyPassword RELEASE_KEY_PASSWORD  
posted @ 2017-06-16 15:55  why_su  阅读(276)  评论(0编辑  收藏  举报