gradle 详解——你真的了解Gradle吗?

简介: 版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/52355915 前段时间忽然发现自己对于Android studio的Gradle打包并不了解,这篇博客参考网上众多教程,为大家详细介绍Gradle。
版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/52355915

前段时间忽然发现自己对于Android studio的Gradle打包并不了解,这篇博客参考网上众多教程,为大家详细介绍Gradle。

Gradle简介

We would like to introduce Gradle to you, a build system that we think is a quantum leap for build technology in the Java (JVM) world. Gradle provides:

  1. A very flexible general purpose build tool like Ant.
  2. Switchable, build-by-convention frameworks a la Maven. But we never lock you in!
  3. Very powerful support for multi-project builds.
  4. Very powerful dependency management (based on Apache Ivy).
  5. Full support for your existing Maven or Ivy repository infrastructure.
  6. Support for transitive dependency management without the need for remote repositories or pom.xml and ivy.xml files.
  7. Ant tasks and builds as first class citizens.
  8. Groovy build scripts.
  9. A rich domain model for describing your build。
上面这段是grade官方介绍的grade的特性:
  • 一个像 Ant 一样的灵活的构建工具
  • 一种可切换的, 像 maven 一样的基于合约构建的框架
  • 支持强大的多工程构建
  • 支持强大的依赖管理(基于 ApacheIvy )
  • 支持已有的 maven 和 ivy 仓库
  • 支持传递性依赖管理, 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
  • 优先支持 Ant 式的任务和构建
  • 基于 groovy 的构建脚本
  • 有丰富的领域模型来描述你的构建

gradle属于任务驱动型构建工具,它的构建过程是基于Task的。Gradle是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。

Gradle安装与环境变量配置

。。。。。。。。。略!!!

网上有好多关于Windows,Linux,MAC的grade安装与配置的教程这里就不写了。

Gradle脚本构建(build.gradle)

Gradle中的所有东西都是围绕两个基本概念:项目和任务。

每个Gradle构建都是由一个或多个项目组成。一个项目代表什么,取决于你用Gradle正在做的。比如,一个项目可能代表一个库或一个网络应用。它可能代表一个由其他项目产生的一个或多个jar包打包d一个zip包。一个项目不需要代表一个事物而被构建。它可以代表一个事物而被做出来,比如部署你的应用到暂存区或产品环境。不要担心这个现在是否好像有一点含糊。Gradle的通过约定来构建的功能支持为一个项目添加一个更加具体的定义。

下面介绍一下build.gradle文件:

apply plugin: 'com.android.application'//说明module的类型,com.android.application为程序,com.android.library为库
android {
compileSdkVersion 22//编译的SDK版本
buildToolsVersion "22.0.1"//编译的Tools版本
defaultConfig {//默认配置
applicationId "com.nd.famlink"//应用程序的包名
minSdkVersion 8//支持的最低版本
targetSdkVersion 19//支持的目标版本
versionCode 52//版本号
versionName "3.0.1"//版本名
}
sourceSets {//目录指向配置
main {
manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件
java.srcDirs = ['src']//指定source目录
resources.srcDirs = ['src']//指定source目录
aidl.srcDirs = ['src']//指定source目录
renderscript.srcDirs = ['src']//指定source目录
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类型
release {//发布
minifyEnabled true//混淆开启
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆规则文件
signingConfig signingConfigs.release//设置签名信息
}
debug {//调试
signingConfig signingConfigs.release
}
}
packagingOptions {
exclude 'META-INF/ASL2.0'//排除一些文件
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/MANIFEST.MF'
}
lintOptions {
abortOnError false//lint时候终止错误上报,防止编译的时候莫名的失败
}
}
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的第三方开源库
}

Gradle常用命令


直接执行gradle build会生成debug包和release如果不想要debug包可以使用gradleasR命令。

上面大家接触了一些命令如 ./gradlew -v ./gradlew clean ./gradlew build, 这里注意是./gradlew./代表当前目录,gradlew代表 gradlewrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper9GAG/gradle/wrapper/gralde-wrapper.properties文件中声明了它指向的目录和版本。只要下载成功即可用grdlew wrapper的命令代替全局的gradle命令。z理解了gradlewrapper的概念,下面一些常用命令也就容易理解了。

·      ./gradlew-v版本号

·      ./gradlewclean清除9GAG/app目录下的build文件夹

·      ./gradlewbuild检查依赖并编译打包

这里注意的是 ./gradlew build 命令把debugrelease环境的包都打出来,如果正式发布只需要打Release的包,该怎么办呢,下面介绍一个很有用的命令 assemble,

·      ./gradlewassembleDebug编译并打Debug

·      ./gradlewassembleRelease编译并打Release的包

除此之外,assemble还可以和productFlavors结合使用,具体在下一篇多渠道打包进一步解释。

·      ./gradlewinstallRelease Release模式打包并安装

·      ./gradlewuninstallRelease卸载Release模式包

local.properties文件:


这个文件主要是配置sdk ndk路径,格式必须符合要求。

settings.gradle文件

include ‘:app’

该文件中就仅仅只包含了一句话,在你的项目中如果有多个Model存在的时候,就可以选择包含哪些进行编译。 

这个文件是全局的项目配置文件,里面主要声明一些需要加入gradlemodule,如:

include':app', ':extras:ShimmerAndroid'

文件中的 appextras:ShimmerAndroid 都是module,如果还有其他module都需要按照如上格式加进去。

gradle-wrapper.properties 文件


可以看到里面声明了gradle的目录与下载路径以及当前项目使用的gradle版本,这些默认的路径我们一般不会更改的,这个文件里指明的gradle版本不对也是很多导包不成功的原因之一。

default.properties文件


我们看红色框中圈的两句,第一句说:不要修改这个文件,您的修改将被清除。第二句说:这个文件必须被版本控制系统检查。

意思就说这个文件我们不能动。这个文件的内容是配置混淆文件及android系统版本。

project.properties文件


这个文件和上个文件一样,我们不能修改。


参考资料

http://avatarqing.github.io/Gradle-Plugin-User-Guide-Chinese-Verision/basic_project/general_tasks.html

http://wiki.jikexueyuan.com/project/GradleUserGuide-Wiki/using_ant_from_gradle/importing_an_ant_build.html

http://www.2cto.com/kf/201501/366464.html

https://segmentfault.com/a/1190000002439306

http://doc.okbase.net/tanlon/archive/125036.html

http://www.android100.org/html/201507/12/164312.html

相关文章
|
存储 缓存 Java
Gradle下载&安装 Gradle wrapper(gradlew)
Gradle的仓库可以和Maven的仓库为同一个,环境变量中的名字必须为 GRADLE_USER_HOME,相当于配置Gradle 本地仓库位置和 Gradle Wrapper 缓存目录
443 0
|
5月前
|
Java API Maven
Gradle使用总结
Gradle使用总结
118 0
|
9月前
|
缓存 Java Maven
gradle
Gradle 是一个现代化的构建工具,它可以帮助开发人员管理项目依赖、构建项目、运行测试、打包和部署项目等。与 Maven 类似,Gradle 也是一种基于约定的构建系统,它不仅可以管理 Java 项目,还可以管理 Android 应用程序、Kotlin 项目、Groovy 项目等。
999 1
|
前端开发 Java Maven
Gradle build.gradle 文件
Gradle build.gradle 文件
Gradle build.gradle 文件
Gradle Avoiding traps
Groovy script variables 4. Groovy 脚本变量 对于 Groovy DSL 的用户来说,了解 Groovy 如何处理脚本变量非常重要。 有两种类型的脚本变量。 一个具有本地作用域,另一个具有脚本范围。 Example: Variables scope: local and script wide 示例: 变量范围: 本地范围和脚本范围 scope.groovy String localScope1 = 'localScope1' def localScope2 = 'localScope2' scriptScope = 'scriptScope' println
100 0
|
Java Android开发
gradle配置 flavor和buildType小结
gradle配置 flavor和buildType小结
5756 0
|
Java Apache Kotlin
Gradle系列01 Gradle介绍与安装
说明 Gradle官网 版本:gradle-5.6.4 系统:macOS Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。
|
API Android开发 数据安全/隐私保护
Gradle 使用技巧(一)
前言 Gradle是使用Groovy语言构建,所以既然是语言,那么就有他的语法,而不是简单的配置项。关于Gradle有时间会出一系列的文章。 1. 自定义apk输出名称 (3.0) 本配置为Android studio3.0及以上的配置,3.0以下版本适用,下面的配置会将所有的Variants都输出。
1166 0