https://gradle.org/releases/

Gradle介绍

Gradle是一个先进的build toolkit,可以方便的管理依赖包和定义自己的build逻辑。到底有多先进,Android Studio官方集成Gradle,Google还专门写了Android Plugin for Gradle,你们感受一下。

基础配置

Android Studio中有一个顶级的build.gradle文件,每一个module还有一个自己的build.gradle。这个文件是使用Groovy语法和Android Plugin for Gradle元素的配置文件。通常我们只需要修改module的build文件就可以了。 下面是一个简单的例子

apply plugin: 'com.android.application'

android {
compileSdkVersion 19
buildToolsVersion "19.0.0" defaultConfig {
applicationId "com.example.my.app"
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} dependencies { // Module dependency
compile project(":lib") // Remote binary dependency
compile 'com.android.support:appcompat-v7:19.0.1' // Local binary dependency
compile fileTree(dir: 'libs', include: ['*.jar'])
}

第一句apply plugin: ‘com.android.application’说明在这个build文件中使用Android plugin for Gradle,有了这一句后,那些针对Android的元素才有意义。比如android {…}这个就是配置所有针对Android项目build时的选项。

  • compileSdkVersion: 编译时用的sdk版本
  • buildToolsVersion: build工具的版本
  • defaultConfig: 动态的在build时配置AndroidManifest.xml里的项目,defaultConfig里的配置可以覆盖manifest里的配置。
  • buildTypes: 配置如何构建和打包你的App,默认有debug和release两个类型。debug类型包含调试时的信息,并且有debug key签名。release默认是不含签名的。本例中release版本用了ProGuard。
  • dependencies: 在android {…}这个元素之外,配置此模块的依赖。

依赖

dependencies {

     // Module dependency
compile project(":lib") // Remote binary dependency
compile 'com.android.support:appcompat-v7:19.0.1' // Local binary dependency
compile fileTree(dir: 'libs', include: ['*.jar'])
}
  • 模块依赖: compile project(“:lib”),表明本模块依赖于lib模块,编译的时候系统会把lib模块包含进来
  • 远程的二进制依赖: compile ‘com.android.support:appcompat-v7:19.0.1’,当本地没有此依赖时会默认从Maven Central Repository下载相应的依赖。从哪里下载可以在顶级的build文件中配置。
  • *本地二进制依赖:**compile fileTree(dir: ‘libs’, include: [‘.jar’]),把jar包拷贝到/libs文件夹下,compile fileTree(dir: ‘libs’, include: [‘*.jar’])意思是,app/libs下的所有jar包都包含进来

ProGuard

ProGuard的作用是在byte级别对你的app进行分析优化,使得你的App变得更小,更快。值得一提的是,当你使用某些开源项目时,他们会提醒你把一些包排除在ProGuard里,防止出错。

android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

getDefaultProguardFile(‘proguard-android.txt’)获得默认的ProGuard配置。每个模块也都有模块级别的ProGuard规则,在proguard-rules.pro这个文件里,当然你也可以自己配置ProGuard规则。关于ProGuard的详细配置,请参考ProGuard Manual

Application ID

Application ID是用来唯一标识要发行的应用的。在build.gradle里设置。

   defaultConfig {
applicationId "com.example.my.app"
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName "1.0"
}

系统允许你对不同的产品类型设定不同的id,比如免费版和高级版。

productFlavors {
pro {
applicationId = "com.example.my.pkg.pro"
}
free {
applicationId = "com.example.my.pkg.free"
}
} buildTypes {
debug {
applicationIdSuffix ".debug"
}
}

配置签名

debug版本与release版本的区别在于是否可以在一个安全的设备上debug和APK如何被签名的。在debug版本中,系统会提供一个默认的key来签名和已知的证书来授权App,避免在构建的时候出现密码提示。但是在release版本中,除非你主动提供一个key,不然系统是不会构建此项目的。

Release签名步骤

  1. 创建keystore。keystore是一个包含一系列私钥的二进制文件,这个文件必须妥善保管。
  2. 创建一个私钥。一个私钥代表着一个app实体。
  3. 在build文件中配置
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file("myreleasekey.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}

4.在Android Studio中启动assembleRelease。app/build/apk/app-release.apk这个文件就是包含你release key的apk了。 注:一般不会直接在build文件中写入密码的,密码信息可以写在环境变量中

storePassword System.getenv("KSTOREPWD")
keyPassword System.getenv("KEYPWD")

或者用命令行输入

storePassword System.console().readLine("\nKeystore password: ")
keyPassword System.console().readLine("\nKey password: ")

在Android Studio中配置签名

  1. 菜单栏里,点击Build > Generate Signed APK.
  2. 在弹出的窗口里点击Create new
  3. 填写相关信息
  4. Build Type 选择release

到此为止,你就可以去应用市场发布你的应用啦 ^_^

Build变量

定义productFlavors

有时你需要对同一个App发行不同的版本,如免费版、付费版之类的。这时你就需要用到productFlavors了。

android {
...
defaultConfig { ... }
signingConfigs { ... }
buildTypes { ... }
productFlavors {
demo {
applicationId "com.buildsystemexample.app.demo"
versionName "1.0-demo"
}
full {
applicationId "com.buildsystemexample.app.full"
versionName "1.0-full"
}
}
}

productFlavors里的配置会覆盖defaultConfig里的配置,如上配置后,系统会为每一个不同版本使用一个不同的id。

给每一个版本添加对应的资源

当你有不同的版本的时候,不同版本之间肯定有不同,所以需要添加不同的资源。以demo版为例,在src目录下新建以下目录

把需要的Activity,String.xml等资源加入到对应文件夹下。 在IDE左侧的Build Variants窗口里就可以看到如下四个Build变量

这样你需要哪个版本,直接选择就可以了。

最后

看到这里,再次打开build.gradle这个文件也不是感觉也没那么复杂了?是不是更爱Android Studio了?如有什么问题欢迎留言讨论。喜欢的话别忘了点个“顶”啊 ♪(^∀^●)ノ

转载请注明:Android开发中文站 » 关于Android Studio里的Gradle,你所需要知道的都在这里了

关于Android Studio里的Gradle,你所需要知道的都在这里了的更多相关文章

  1. 学习Android Studio里的Gradle

    一直听说Gradle很强大,只是偶尔用Android Studio创建Demo的时候看到他一次,今天抽个时间完整记录一下. 1.gradle位置 Android Studio项目创建好之后,默认有3个 ...

  2. [转]Android Studio 里搭建自动化测试框架Robotium

    Android的自动化测试框架可选择的不多,后来选了Robotium(https://code.google.com/p/robotium/),它的语法及易用性挺像我们用在iOS里的KIF. 官方文档 ...

  3. 拥抱 Android Studio 之五:Gradle 插件开发

    实践出真知 笔者有位朋友,每次新学一门语言,都会用来写一个贪吃蛇游戏,以此来检验自己学习的成果.笔者也有类似体会.所谓纸上得来终觉浅,绝知此事要躬行.这一章,笔者将以开发和发布一个 Gradle 插件 ...

  4. Android Studio之回退Gradle版本方法

    Android Studio之回退Gradle版本方法 (Minimum supported Gradle version is 4.10.1. Current version is 4.6.)   ...

  5. Android : Android Studio 更新至gradle 4.10.1后Variants API变化

    同步警告: WARNING: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'v ...

  6. 【已解决】Android Studio下,gradle project sync failed 错误

    原文:[已解决]Android Studio下,gradle project sync failed 错误 Android studio下突然报错 gradle project sync failed ...

  7. Android Studio的优化/Gradle构建

    转自链接http://bbs.itheima.com/thread-204217-1-1.html   使用Android Studio进行开,随着项目的增大,依赖库的增多,构建速度越来越慢,现在最慢 ...

  8. android studio 2.0 Gradle HttpProxy 设置

    Android Studio 一直Failed to import Gradle project: Connection timed out: connect Android Studio 2.0 里 ...

  9. 如何用Android Studio查看build.gradle源码

    上一篇博客里讲过 build.gradle 里的每一行代码基本都是在调用一个方法,既然是这样,我们就可以用 android studio(下面简称as) 去查看它源码的方法注释说明,这样就可以理解每个 ...

随机推荐

  1. memset,memcpy,memcmp用法

    void* memset(void *s, int ch, size_t n); 将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值. 例如:memset(lpMyStruct ...

  2. MySQL 存储php中json_encode格式中文问题及解决

    MySQL 存储php中json_encode格式信息  ,遇到中文时, 会变成一堆类似uxxxx信息. 1. 原因分析:在存储到数据库时!MySQL 不会存储 unicode 字符: MySQL 仅 ...

  3. IE中JavaScript 的异常处理

    错误类型 编程中我们会遇到四种错误:编译错误.逻辑错误.输入/验证错误.运行时错误,但是在JavaScript中我们只能最后两种错误. JavaScript 1.5定义了六种错误类型: EvalErr ...

  4. LayoutInflater和inflate()方法的用法

    LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 实现LayoutInflater的实例化共有3种方法, (1).通过SystemService获得 Layou ...

  5. ABAP简单表维护的制作

    为了知识的积累,特作了个简单的表维护. 因为自己之前做dynpro程序的时候建了一个Tree node的表,所以就不在此重复.(在表的交付和维护页签中标的属性要是‘允许标准表维护的’) 直接Alt+U ...

  6. 循环语句while与for的穷举迭代

    循环语句while while当...的时候 int n=1; while(n<6)//在括号内直接限制逻辑关系 {//需要在大括号内给出改变方式,否则将进入死循环 console.WriteL ...

  7. 课堂练习&课下作业

    设计思路: 列举出买十本的所有情况:1.一本的时候不打折扣 2.两本的时候买两本价最低 3.三本的时候买三本价最低 4.四本的时候买四本价最低 5.五本的时候买五本价最低 6.六本的时候分一本和五本价 ...

  8. js数量添加(如购物车添加,删减数量)

    <div class="fl shop-num ml24"><input type="button" style=" border- ...

  9. java成员变量与局部变量修饰符的区别

    成员变量: 可以被 public,static ,protected,default,final修饰. 局部变量:包括方法里的和 代码块里的(静态和非静态) 可以被default, final修饰 参 ...

  10. Android统计图表MPAndroidChart.

    Android统计图表MPAndroidChart MPAndroidChart是在Android平台上开源的第三方统计图表库,可以绘制样式复杂.丰富的各种统计图表,如一般常见的折线图.饼状图.柱状图 ...