欲了解Android Studio,必先知道Gradle
http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2015/0126/2361.html
泡在网上的日子 发表于 2015-01-26 13:28 第 11306 次阅读 Gradle,Android Studio
编辑推荐:稀土掘金,这是一个高质量的技术干货分享社区,web前端、Android、iOS、设计资源和产品,满足你的学习欲望。
在前面的文章Android Studio初体验 一文中,我们新建了一个项目,其中提到了向导所产生的build.gradle文件,我们也大致看了build.gradle中的脚本内容,这篇文章将对gradle作更详细的讲解 。这篇文章我们将介绍Gradle的安装、Gradle的基本语法、Gradle的打包,内容会比较枯燥,但是对build.gradle脚本中参数的解释这部分还是非常有用的。Gradle是Eclipse开发转android studio的拦路虎, 我们必须攻克它。
注:这篇文章的大部分内容主要是直接复制了这篇文章:http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html
什么是Gradle?
Gradle 以module 来管理project,在Gradle 构建的Gradle project中通常包含application module(com.android.application),与library module(com.android.library)两种module。
在Gradle 的project 中需要使用,基本上全都使用.gradle 文件来配置,是一个脚本化的工程构建,而非原先ADT中那种eclipse 的可视化构建。gradle的依赖管理能力极其强大,几乎所有的开源项目都可以简单的通过一条compile指令完成依赖的配置。
安装Gradle
第一次新建项目成功会下载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 基本概念
首先我们学习几个gradle 的脚步语法,掌握了这几个语法,你就能非常简单的用gradle构建打包android项目了。 首先,我们来看下一个最简单android build.gradle
。
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
android {
compileSdkVersion 17
}
|
英语的介绍都来自与 gradle官方文档, 主要后边的中文不是翻译,是补充介绍。。
buildscript{}
Configures the build script classpath for this project. 说白了就是设置脚本的运行环境
repositories{}
Returns a handler to create repositories which are used for retrieving dependencies and uploading artifacts produced by the project. 大意就是支持java 依赖库管理(maven/ivy),用于项目的依赖。这也是gradle 强力的地方。。。
dependencies{}
The dependency handler of this project. The returned dependency handler instance can be used for adding new dependencies. For accessing already declared dependencies, the configurations can be used. 依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件,如果前面定义了
repositories{}
maven 库,使用maven的依赖(我没接触过ivy。。)的时候只需要按照用类似于com.android.tools.build:gradle:0.4
,gradle 就会自动的往远程库下载相应的依赖。
apply plugin:
声明构建的项目类型,这里当然是android了。。。
android{}
设置编译android项目的参数,接下来,我们的构建android项目的所有配置都在这里完成。
构建一个Gradle android项目
首先,你要安装Gradle 1.6 并且,写进系统的环境变量里面,所有的命令都是默认你已经配好了gradle 的环境。而且,已经已经升级了android sdk 22
要用gradle构建你的有两种方式:(build.gradle 放到项目目录下)
利用adt 22导出 build.gradle.
复制别人写好的build.gradle 文件.
根据gradle 规则,手写android 的build.gradle 文件。
个人推荐1,2 方法。。。。
一个android build.gradle 最基本基本文件
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android' dependencies {
}
android {
compileSdkVersion 17
buildToolsVersion "17"
defaultConfig {
minSdkVersion 8
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = [ 'src' ]
resources.srcDirs = [ 'src' ]
aidl.srcDirs = [ 'src' ]
renderscript.srcDirs = [ 'src' ]
res.srcDirs = [ 'res' ]
assets.srcDirs = [ 'assets' ]
}
instrumentTest.setRoot( 'tests' )
}
}
|
接着在命令行cd 到项目目录下
例如: cd e:\workplace\andoridGradle
如果你是第一次使用gradle 构建android项目建议你先使用gradle clean
把android gradle 插件,还有相关依赖包下载下来并且对环境进行初始化,如果出错了,一般可能是下载超时,试多几次即可,最后你会看到如下提示:BUILD SUCCESSFUL
The TaskContainer.add() method has been deprecated and is scheduled to be remove d in Gradle 2.0. Please use the create() method instead.
:clean UP-TO-DATE
BUILD SUCCESSFUL
Total time: 7.847 secs
完成以上的步骤,就可以正式使用gralde 构建你的android项目了。
然后使用gradle build
就完成了android 项目的构建了。如果,你是照着以上步骤走的话,你将会想项目目录里面看到一个build 的目录,里面就是用gradle 构建android项目的全部例如了,结构目录看附录。
最终打包的apk 就在build/apk 目录下了。然后,你会发现,两个apk 一个是 [项目名]-debug-unaligned [项目名]-release-unsigned
如果以上内容你都掌握的话,接下来就将详细说说如何利用gralde 打包android apk。
Gralde 打包参数详解
上面说了一大堆东西,其实并不吸引人去使用gradle,如果只是构建项目的话,adt不是更合适吗?如果,你看完以下内容还是这么觉得的话,你就没必要折腾gradle了。。。。。。
打签名包
看附录 默认输出 release apk 是没有签名的,那么我们需要签名的很简单,只需要在android{}里面补充加上加上即可。完整build.gradle 请点击我的gist
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
|
signingConfigs {
myConfig{
storeFile file( "gradle.keystore" )
storePassword "gradle"
keyAlias "gradle"
keyPassword "gradle"
}}
buildTypes{
release {
signingConfig signingConfigs.myConfig
}
}
|
然后,运行gradle clean
gradle build
,这次在build/apk 你看到了多了一个[项目名]-release-unaligned, 从字面上面我就可以知道,这个只是没有进行zipAlign 优化的版本而已。而[项目名]-release 就是我们签名,并且zipAlign 的apk包了. ###打混淆包### 只需要在原来的基础上加上,完整的proguad.gradle 代码 build.gradle
1
2
3
4
5
6
7
|
buildTypes{
release {
signingConfig signingConfigs.myConfig
runProguard true
proguardFile 'proguard-android.txt'
}
}
|
gradle clean
gradle build
打多渠道包(Product Flavor)
现在来解释一下上一节的问题,apk目录下的两个apk 的含义
为什么产生了两个apk?
默认的android gralde 插件定义了两种apk 的类型debug, release,这两种类型的详细对比看附录。
这个是android gralde 插件 buildTypes{}
方法产生的,默认配置好了两个默认模板,当然你也可以修改,前面我们就是在修改默认的release 的配置,让输出release类型的的apk,具有签名和混淆。
对于多渠道包,android 插件提供了一个名为Product Flavor{}
的配置,用于进行多渠道打包。
例如,我的android应用有海外版,和国内版本,而且这两个版本的包名是不一样的!!(我就举两个市场的例子安装这个思路,你要打包100个不同的市场只是几行代码的事情。)。
你只需要在android{}
补充上
build.gradle
1
2
3
4
5
6
7
8
|
productFlavors {
playstore {
packageName= 'com.youxiachai.androidgradle.playstore'
}
hiapk {
packageName= 'com.youxiachai.androidgradle.amazonappstore'
}
}
|
然后gradle clean
,gradle build
,在build/apk 下面你会看到一堆的包,命名格式[项目名]-[渠道名]-release
仅此而已?
Product Flavor{}
不只是能改包名那么简单,还能够对编译的源码目录进行切换。
什么意思? 不知道各位有没有用过友盟做用户统计,如果,你用的是分发渠道分析,你需要修改AndroidManifest.xml 添加上 <meta-data android:value="hiapk" android:name="UMENG_CHANNEL"/>
如果,你很多渠道,,然后你就会很痛苦,现在用gradle 就非常舒服,你只需要在android.sourceSets
指定我们的渠道名就行,android gradle 插件,会自动打包!!!例如
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = [ 'src' ]
resources.srcDirs = [ 'src' ]
aidl.srcDirs = [ 'src' ]
renderscript.srcDirs = [ 'src' ]
res.srcDirs = [ 'res' ]
assets.srcDirs = [ 'assets' ]
}
hiapk {
manifest.srcFile 'hiapk/AndroidManifest.xml'
}
playstore {
manifest.srcFile 'hiapk/AndroidManifest.xml'
}
instrumentTest.setRoot( 'tests' )
}
|
然后运行gradle clean
,gradle build
,省下的时间去喝杯咖啡,睡个觉什么 的都好。。。 ###外部依赖### android gradle 对于外部jar 包的应用支持maven/ivy 管理的包,也支持指定具体文件,前面已经在上文说过。上面演示的完整 build.gradle gist 里面也有写。你需要加上如下代码即可: build.gradle
1
2
3
|
dependencies {
compile files( 'libs/android-support-v4.jar' )
}
|
欲了解Android Studio,必先知道Gradle相关推荐
- 如何导入别人的android studio项目,解决gradle版本不兼容问题
如何导入别人的android studio项目,解决gradle版本不兼容问题 参考文章: (1)如何导入别人的android studio项目,解决gradle版本不兼容问题 (2)https:// ...
- 史上最详细的Android Studio系列教程四--Gradle基础
史上最详细的Android Studio系列教程四--Gradle基础 转载于:https://www.cnblogs.com/zhujiabin/p/5125917.html
- [转]Android Studio系列教程六--Gradle多渠道打包
转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...
- Android Studio (6)---Gradle
Android Studio (6)---Gradle 在AS中包含一个顶级构建文件和每个模块构建文件组成,如下图 我们这里就主要讲[顶级配置文件和模块配置文件以及sdk配置文件] 1.顶级配置文件 ...
- android studio 编译高级篇-gradle多版本编译,定制任务
导读 本文旨在介绍Gradle构建的一些高级功能,包含了多版本编译.定制任务等功能: 为相同的app构建多个版本 如果在Gradle的过程中添加定制的任务 如何使用android库module 3.构 ...
- Android Studio里面的Build.gradle的详细配置说明
Android Studio里面的Build.gradle的详细配置说明 [java] view plain copy print ? apply plugin: 'com.android.appli ...
- Android Studio里面的Build.gradle的详细配置
Android Studio里面的Build.gradle的详细配置说明 apply plugin: 'com.android.application'//说明module的类型,com.androi ...
- 【错误记录】Android Studio 编译报错 ( Gradle 下载错误导致 Failed to open zip file 报错 )
文章目录 一.报错信息 二.解决方案 1.修改 gradle-wrapper.properties 配置 ( 失效解决方案 ) 2.手动干预 Gradle 目录 ( 推荐 ) 3.手动下载 Gradl ...
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...
最新文章
- 【译】MVVM Tutorial with ReactiveCocoa: Part 1/2
- docker-compose bug
- 斯诺登:FBI需要苹果帮助才能解锁iPhone完全扯淡
- 使用Spring MVC,Mybatis框架等创建Java Web项目时各种前期准备的配置文件内容
- kubernetes 实战 使用 nfs 作为动态 storageClass 存储
- pytorch学习——构建多元线性回归的网络结构
- android 拖动进度,Android 可拖动的seekbar自定义进度值
- 华景机器人百度_qq群机器人凉了,晨风创始人被抓,酷Q停止运营!
- python之os模块详解
- 如何用计算机抢座位,火车票可以自选座位啦!内附史上最强抢票攻略!
- Python Pycharm 对代码进行TODO标记注释
- catalina 无法验证macos_macOS 10.15 Catalina无法打开app,提示“因为无法确认开发者身份”问题的解决方法......
- 贝壳金服 TiDB 在线跨机房迁移实践
- 微信小程序 wx.request 的封装
- 【JAVA语言基础】
- shell 循环语句
- 泛微软件服务器是多少,泛微oa云服务器要求
- 星环科技分布式文件系统TDFS介绍(上)
- PostgreSQL TID及tuple slot
- name=strcpy(name,name1)是什么意思?
热门文章
- java was started but returned exit code = 1
- java.io,PrintWriter可以用来创建一个文件并向本文文件写入数据
- 【KVM系列01】KVM简介及安装
- 使用Eclipse进行Javaweb项目开发时,如何设置外置浏览器Chrome
- 一天搞定HTML----a标签02
- 安装和配置sendmail
- 学习java的步骤_java学习的基本步骤
- 工业机器人调运角度_站在全球角度,看待中国工业机器人
- 将 Sidecar 容器带入新的阶段
- Knative 实战:基于 Kafka 实现消息推送