ANDROID STUDIO系列教程四--GRADLE基础

logo
stormzhang

做好现在的事!

Blog About GitHub Friends
ANDROID STUDIO系列教程四–GRADLE基础

版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!!

其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了很多,所以暂且结合Stduio 1.0正式版与最新的Gradle语法来详细讲解下,小伙伴们直接跟我一步步来学习吧。

什么是Gradle?

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。

安装Gradle

在Android Studio系列教程一–下载与安装中新建项目成功后会下载Gradle,貌似这个过程不翻墙也是可以下载,但是访问特别慢,建议翻墙下载。那么下载的Gradle到什么地方呢?

Mac上会默认下载到 /Users/<用户名>/.gradle/wrapper/dists 目录
Win平台会默认下载到 C:\Documents and Settings<用户名>.gradle\wrapper\dists 目录
你会看到这个目录下有个 gradle-x.xx-all 的文件夹, 如果下载实在太慢,但是又不想翻墙的话,可以自己手动到Gradle官网下载对应的版本,然后将下载的.zip文件(也可以解压)复制到上述的gradle-x.xx-all 文件夹下,不过还是建议让它直接下载的好。

Gradle 基本概念

下面就以我的开源项目 9GAG 来详细讲解下和Gradle相关的知识, 和Gradle相关的几个文件一般有如下几个:

红色标记部分从上到下咱们来一步步分析:

  1. 9GAG/app/build.gradle

这个文件是app文件夹下这个Module的gradle配置文件,也可以算是整个项目最主要的gradle配置文件,我们来看下这个文件的内容:

// 声明是Android程序
apply plugin: ‘com.android.application’

android {
// 编译SDK的版本
compileSdkVersion 21
// build tools的版本
buildToolsVersion “21.1.1”

defaultConfig {
    // 应用的包名
    applicationId "me.storm.ninegag"
    minSdkVersion 14
    targetSdkVersion 21
    versionCode 1
    versionName "1.0.0"
}

// java版本
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

buildTypes {
    debug {
        // debug模式
    }

    release {
        // 是否进行混淆
        minifyEnabled false
        // 混淆文件的位置
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

// 移除lint检查的error
lintOptions {
  abortOnError false
}

}

dependencies {
// 编译libs目录下的所有jar包
compile fileTree(dir: ‘libs’, include: [‘*.jar’])
compile ‘com.android.support:support-v4:21.0.2’
compile ‘com.etsy.android.grid:library:1.0.5’
compile ‘com.alexvasilkov:foldable-layout:1.0.1’
// 编译extras目录下的ShimmerAndroid模块
compile project(‘:extras:ShimmerAndroid’)
}
这里需要说明几点:

文件开头apply plugin是最新gradle版本的写法,以前的写法是apply plugin: ‘android’, 如果还是以前的写法,请改正过来。
buildToolsVersion这个需要你本地安装该版本才行,很多人导入新的第三方库,失败的原因之一是build version的版本不对,这个可以手动更改成你本地已有的版本或者打开 SDK Manager 去下载对应版本。
applicationId代表应用的包名,也是最新的写法,这里就不在多说了。
android 5.0开始默认安装jdk1.7才能编译,但是由于mac系统自带jdk的版本是1.6,所以需要手动下载jdk1.7并配置下,具体可以见我这篇博客Mac下安装和管理Java
minifyEnabled也是最新的语法,很早之前是runProguard,这个也需要更新下。
proguardFiles这部分有两段,前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,免去了我们很多事,这个文件的目录在 /tools/proguard/proguard-android.txt , 后一部分是我们项目里的自定义的混淆文件,目录就在 app/proguard-rules.txt , 如果你用Studio 1.0创建的新项目默认生成的文件名是 proguard-rules.pro , 这个名字没关系,在这个文件里你可以声明一些第三方依赖的一些混淆规则,由于是开源项目,9GAG里并未进行混淆,具体混淆的语法也不是本篇博客讨论的范围。最终混淆的结果是这两部分文件共同作用的。
compile project(‘:extras:ShimmerAndroid’)这一行是因为9GAG中存在其他Module,不知道Module的概念可以看下这篇博客Android Studio系列教程二–基本设置与运行, 总之你可以理解成Android Library,由于Gradle的普及以及远程仓库的完善,这种依赖渐渐的会变得非常不常见,但是你需要知道有这种依赖的。
以上文件里的内容只是基本配置,其实还有很多自定义部分,如自动打包debug,release,beta等环境,签名,多渠道打包等,后续会单独拿出来讲解。
2. 9GAG/extras/ShimmerAndroid/build.gradle

每一个Module都需要有一个gradle配置文件,语法都是一样,唯一不同的是开头声明的是 apply plugin: ‘com.android.library’

  1. 9GAG/gradle

这个目录下有个 wrapper 文件夹,里面可以看到有两个文件,我们主要看下 gradle-wrapper.properties 这个文件的内容:

Thu Dec 18 16:02:24 CST 2014

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip
可以看到里面声明了gradle的目录与下载路径以及当前项目使用的gradle版本,这些默认的路径我们一般不会更改的,这个文件里指明的gradle版本不对也是很多导包不成功的原因之一。

  1. 9GAG/build.gradle

这个文件是整个项目的gradle基础配置文件,我们来看看这里面的内容

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:1.0.0’
}
}

allprojects {
repositories {
jcenter()
}
}
内容主要包含了两个方面:一个是声明仓库的源,这里可以看到是指明的jcenter(), 之前版本则是mavenCentral(), jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。另一个是声明了android gradle plugin的版本,android studio 1.0正式版必须要求支持gradle plugin 1.0的版本。

  1. 9GAG/settings.gradle

这个文件是全局的项目配置文件,里面主要声明一些需要加入gradle的module,我们来看看9GAG该文件的内容:

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

总结

关于gradle的基础知识就介绍到这里,接下来会介绍一种我常用的快速方便的编译查看第三方开源项目的方法,如何导入Android Studio,Gradle常用基本命令,多渠道打包配置等。有疑问或者发现错误欢迎大家直接博客留言。

推荐关注我的微信公众号 AndroidDeveloper「googdev」,第一时间获取博客更新!

stormzhang

12/18/2014

上一篇:java.lang.ExceptionInInitializerError

下一篇:高薪招聘中(高)级Android工程师

被顶起来的评论
Taylor Sun
Taylor Sun
Storm有机会说说gradle添加so库和NDK开发方面的知识吧。Thanks!

2014年12月27日回复顶(3)转发
Conan
Conan
Dilid
Dilid2015年12月10日1楼
现在是凌晨2:35分,半个月前跨入android开发的大门,android入门之曲折,一直带着问题在网上寻寻觅觅。看到楼主这篇文章,在表示对楼主的感激之情的同时有些疑问,楼主是如何、通过什么渠道来获取到这些知识的,也是书籍+博客?android开发有什么好书籍、博客、论坛推荐?恳切期待楼主的回答!       
http://developer.android.com/tools/building/configuring-gradle.html#workBuildVariants

1月4日回复顶(2)转发
Dilid
Dilid
现在是凌晨2:35分,半个月前跨入android开发的大门,android入门之曲折,一直带着问题在网上寻寻觅觅。看到楼主这篇文章,在表示对楼主的感激之情的同时有些疑问,楼主是如何、通过什么渠道来获取到这些知识的,也是书籍+博客?android开发有什么好书籍、博客、论坛推荐?恳切期待楼主的回答!

2015年12月10日回复顶(2)转发
最新最早最热
77条评论 5条新浪微博
www.3gwb.com
www.3gwb.com
谢谢博主分享,很实用! 欢迎回访:www.3gwb.com

11月11日回复顶转发
原子
原子
感谢楼主的无私奉献 我会继续关注的

10月25日回复顶转发
华南虎赤焰军StevenLee
华南虎赤焰军StevenLee
Dilid
Dilid2015年12月10日1楼
现在是凌晨2:35分,半个月前跨入android开发的大门,android入门之曲折,一直带着问题在网上寻寻觅觅。看到楼主这篇文章,在表示对楼主的感激之情的同时有些疑问,楼主是如何、通过什么渠道来获取到这些知识的,也是书籍+博客?android开发有什么好书籍、博客、论坛推荐?恳切期待楼主的回答!       
Conan
Conan1月4日2楼
http://developer.android.com/tools/building/configuring-gradle.html#workBuildVariants       
注意身体啊

9月22日回复顶转发
戎码人生
戎码人生
非常好的文章,收藏了

9月10日回复顶转发
这个人看起来好像一条狗啊
这个人看起来好像一条狗啊
大赞!!

8月15日回复顶转发
忧嘻
忧嘻
学习了,非常感谢

8月2日回复顶转发
芦一发
芦一发
Dilid
Dilid2015年12月10日1楼
现在是凌晨2:35分,半个月前跨入android开发的大门,android入门之曲折,一直带着问题在网上寻寻觅觅。看到楼主这篇文章,在表示对楼主的感激之情的同时有些疑问,楼主是如何、通过什么渠道来获取到这些知识的,也是书籍+博客?android开发有什么好书籍、博客、论坛推荐?恳切期待楼主的回答!       
Conan
Conan1月4日2楼
http://developer.android.com/tools/building/configuring-gradle.html#workBuildVariants       
推荐你一本书,第一行代码

6月12日回复顶转发
Android菜鸟1994
Android菜鸟1994
木偶人Conn
木偶人Conn2015年3月13日1楼
请教下您都是从哪里学习到这些知识的       
百度学到的

4月22日回复顶转发
请教我雷锋
请教我雷锋
Dilid
Dilid2015年12月10日1楼
现在是凌晨2:35分,半个月前跨入android开发的大门,android入门之曲折,一直带着问题在网上寻寻觅觅。看到楼主这篇文章,在表示对楼主的感激之情的同时有些疑问,楼主是如何、通过什么渠道来获取到这些知识的,也是书籍+博客?android开发有什么好书籍、博客、论坛推荐?恳切期待楼主的回答!       
官网 外国技术网站

4月20日回复顶转发
吙綫灬渶譹
吙綫灬渶譹
有帮助

3月28日回复顶转发
wapeyang
wapeyang
music旮旯
music旮旯2015年3月12日1楼
楼主,我使用百度sdk的时候,需要引用so库, 我的写法是这样的
sourceSets.main {
manifest.srcFile ‘AndroidManifest.xml’
java.srcDirs = [‘src’]
resources.srcDirs = [‘src’]
res.srcDirs = [‘res’]
jniLibs.srcDir [‘libs/armeabi’]
}
但是在编译运行之后,却提示so Failed to load. No implementation found for native Lcom/baidu/platform/comjni/map/commonmemcache/JNICommonMemCache;.Create:()I
百度出是因为so为成功引用的原因 怎么破,谢谢楼主       
还有1条评论
= =
= =2015年8月25日3楼
問題解決也不說怎么解決       
jniLibs.srcDir [‘libs/armeabi’] 改成 jniLibs.srcDir [‘libs’]

3月7日回复顶转发
Conan
Conan
Dilid
Dilid2015年12月10日1楼
现在是凌晨2:35分,半个月前跨入android开发的大门,android入门之曲折,一直带着问题在网上寻寻觅觅。看到楼主这篇文章,在表示对楼主的感激之情的同时有些疑问,楼主是如何、通过什么渠道来获取到这些知识的,也是书籍+博客?android开发有什么好书籍、博客、论坛推荐?恳切期待楼主的回答!       
http://developer.android.com/tools/building/configuring-gradle.html#workBuildVariants

1月4日回复顶(2)转发
Dilid
Dilid
现在是凌晨2:35分,半个月前跨入android开发的大门,android入门之曲折,一直带着问题在网上寻寻觅觅。看到楼主这篇文章,在表示对楼主的感激之情的同时有些疑问,楼主是如何、通过什么渠道来获取到这些知识的,也是书籍+博客?android开发有什么好书籍、博客、论坛推荐?恳切期待楼主的回答!

2015年12月10日回复顶(2)转发
暮山老妖
暮山老妖
程序员们都是业界良心啊~感谢楼主写这么详细的教程系列……

2015年11月26日回复顶转发
池乃内路里
池乃内路里
[真淡定] 在哪里聊妹子啊?我推荐→ http://sebi.club

2015年11月25日回复顶转发
森木苏
森木苏
火前留名

2015年11月10日回复顶转发
猴子二世
猴子二世
android studio中没有extras文件夹。

2015年11月9日回复顶转发
0_0
0_0
楼主,ShimmerAndroid这个module是如何放到了extras这个目录下的呀?为什么我尝试也新建一个extras的目录,然后将第三方的module拖进去后,就报错了。

2015年10月4日回复顶转发
= =
= =
music旮旯
music旮旯2015年3月12日1楼
楼主,我使用百度sdk的时候,需要引用so库, 我的写法是这样的
sourceSets.main {
manifest.srcFile ‘AndroidManifest.xml’
java.srcDirs = [‘src’]
resources.srcDirs = [‘src’]
res.srcDirs = [‘res’]
jniLibs.srcDir [‘libs/armeabi’]
}
但是在编译运行之后,却提示so Failed to load. No implementation found for native Lcom/baidu/platform/comjni/map/commonmemcache/JNICommonMemCache;.Create:()I
百度出是因为so为成功引用的原因 怎么破,谢谢楼主       
music旮旯
music旮旯2015年3月13日2楼
问题已解决       
問題解決也不說怎么解決

2015年8月25日回复顶转发
陈伟娜
陈伟娜
请问怎么用Android studio来编译release版本的apk

2015年7月23日回复顶转发
1 2 3 4
社交帐号登录:
微信
微博
QQ
人人
更多»

说点什么吧…
发布
stormzhang正在使用多说
Powered by stormzhang

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值