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
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