Android开发之Gradle笔记整理1
2015-04-05 21:23
489 查看
Title:Android开发之Gradle笔记整理1
Date:2015-04-05 17:55:50
Category:Android Develop
Tag:技术,生活,Android Develop
Author:EricTang
在Android开发中,我们经常会涉及到打包的问题,不管是debug包还是release包或者是beta包,又或是形形色色的各种国内的应用市场,即使是常见的应用市场,也不下几十个,所以打包的时候尤其痛苦,好在我们有Gradle。当然,看过美团的Android项目打包方案,也是一个不错的选择,感兴趣的同学也同样可以研究一下:美团Android自动化之旅—生成渠道包
Gradle是啥?
Gradle是一个依赖管理工具,基于Groovy语言,面向java应用为主,它抛弃了各种基于XML的繁琐配置,取而代之的时基于Groovy的内部领域特定语言,即DSL语言。
Gradle安装
在Mac下,安装了Idea并且启用了Gradle支持的话,首次创建Gradle: Android Module的时候会自动下载Gradle,最好翻墙下载,速度会快一些,当然不翻墙也可以成功下载。
![](http://7vzo2i.com1.z0.glb.clouddn.com/64502CCD-3560-49F8-A520-9D2B737FF2F0.png-img.normal)
下载之后的Gradle保存在
Gradle快速入门
我们随便新建一个项目,命名为GradleTest,然后我们看一下Gradle的相关配置文件,跟Gradle配置相关的文件主要有:
一、 GradleTest/GradleTest/build.gradle
![](http://7vzo2i.com1.z0.glb.clouddn.com/2E9D9E49-7D82-413D-BDDD-6E16C57191E2.png-img.normal)
此处的build.gradle是整个Module的Gradle配置文件,也是主要的Gradle配置文件,然后我们看一下主Gradle配置文件的内容以及注释:
几点注意事项:
apply plugin是最新的Gradle版本写法,之前的版本写法是apply plugin: “android”,以前使用过的同学记得改正过来,刚开始用的同学(比如我)算是比较幸运的,可以直接从新的语法开始写起
buildToolsVersion需要本地的SDK里安装过的版本才行,这个可以手动更改,或者通过Android SDK Manager下载相对应的版本
sourceCompatibility后面的JavaVersion.VERSION_1_X指的是编译项目所需的java版本,Mac系统在10.9之前都是自带JDK1.6的,但是从10.9开始,java就不是Mac系统的一等公民了,不默认安装,这点我想大家在运行Idea或者Eclipse之类的IDE的时候应该已经知道了,运行的时候会提示你当前没有安装JDK,点击更多信息之后会跳转到Apple的Support网站去下载。不过还需要注意一点,最好把JDK1.7或者JDK1.8安装上,因为Android从5.0开始需要JDK1.7才能进行编译
创建Gradle Android项目之后,自动生成的是默认基本配置,当然还有很多其他的自定义部分,例如自动打包debug、release、beta等,签名,多渠道打包等。
二、 GradleTest/build.gradle
![](http://7vzo2i.com1.z0.glb.clouddn.com/A2D81006-ECEA-441A-8E7F-3053A4669879.png)
![](http://7vzo2i.com1.z0.glb.clouddn.com/8FE1D91D-43CD-49B6-842B-7F9B4029283A.png)
Idea中每个Project相当于一个Workspace,而一个Module相当于一个Project,我们的Android项目中肯定有一个是运行的,而其他的Module就是引用的Library,每个Module(不论是运行的工程还是引用的Library)都需要有一个gradle配置文件,语法都是一样的,唯一不同的是开头声明的:运行的工程师开头声明的是“apply plugin:’com.android.application’”,而引用的Library开头声明的则是“apply plugin:’com.android.library’”
上面这个文件,就是整个Project的gradle基础配置文件,我们来看一下它的内容:
该文件主要包含两个方面的内容:
jcenter(),这里可以理解为一个新的中央远程仓库,兼容maven中心仓库,但是性能更优。
classpath,声明了android gradle plugin的版本,这里的版本,对Idea的版本没有什么特殊要求,我用的是Idea14的版本,完全正常使用,其他的IDE例如Eclipse和Android Studio我就不是很清楚了。
三、 GradleTest/gradle目录
这个目录下面有个wrapper目录,里面有两个文件,一个是gradle-wrapper.jar,另一个是gradle-wrapper.properties文件,这里我们重点看一下gradle-wrapper.properties文件的内容:
这里面声明了Gradle的目录、下载路径以及当前项目所使用的Gradle版本,一般情况下保持默认即可,无需更改,不过如果项目报错的话,而且确实是Gradle版本问题的话,我们也可以通过手动修改指定到正确的路径。
四、 GradleTest/settings.gradle文件
![](http://7vzo2i.com1.z0.glb.clouddn.com/F07D6370-2AB6-4DA9-B25B-C765872EE9C9.png)
该文件是全局的项目配置文件,内容如下:
这里面主要是生命一些需要加入Gradle的Module,例如我们这里就暂时就只有一个,如果引用了其他的Module,就按照
其它问题
一、有些同学会和我一样,对Gradle的sync不是很熟悉,嗯,是这样儿的,每次我们修改了build.gradle文件,Gradle项目需要与Idea进行文件同步,点击sync now之后,Idea会根据Gradle文件重新更新.idea目录以及*.iml文件,让Idea可以识别到新引入的资源。
二、关于Module中的build.gradle文件的buildscript代码其实是可以删除掉的,因为它可以从父项目中继承得来,即,使用GradleTest/build.gradle处的设置
![](http://7vzo2i.com1.z0.glb.clouddn.com/9C3B474D-5F50-4DE4-B23C-997022923C8D.png-img.normal)
三、关于“Gradle: Error retrieving parent for item: No resources found that matches the given name ‘android:TextAppearance.Material’”的错误
![](http://7vzo2i.com1.z0.glb.clouddn.com/B989688C-7432-47C4-BB19-C632B32FBA61.png-img.normal)
如果遇到这个错误的话,你就需要检查一下你相应的Module中得dependencies,确保将compile ‘com.android.support:appcompat-v7:22.0.0’的写法修正为’com.android.support:appcompat-v7:19.+’,这里的19指的是SDK版本号,需要跟你的targetSdkVersion保持一致。
参考链接:Error retrieving parent for item - Android Studio
四、Gradle的sync在无网络连接的情况下失效
这个可以通过设置Gradle的离线工作方式来解决,打开Preferences,在Build, Execution, Deployment下的Build Tools中找到Gradle。
![](http://7vzo2i.com1.z0.glb.clouddn.com/D80720AD-4A54-4505-B308-2E8DE19B4891.png-img.normal)
勾选Offline work即可。
关于Gradle的快速入门先写这么多,然后后面会重点记录一下多渠道打包的问题
Date:2015-04-05 17:55:50
Category:Android Develop
Tag:技术,生活,Android Develop
Author:EricTang
在Android开发中,我们经常会涉及到打包的问题,不管是debug包还是release包或者是beta包,又或是形形色色的各种国内的应用市场,即使是常见的应用市场,也不下几十个,所以打包的时候尤其痛苦,好在我们有Gradle。当然,看过美团的Android项目打包方案,也是一个不错的选择,感兴趣的同学也同样可以研究一下:美团Android自动化之旅—生成渠道包
Gradle是啥?
Gradle是一个依赖管理工具,基于Groovy语言,面向java应用为主,它抛弃了各种基于XML的繁琐配置,取而代之的时基于Groovy的内部领域特定语言,即DSL语言。
Gradle安装
在Mac下,安装了Idea并且启用了Gradle支持的话,首次创建Gradle: Android Module的时候会自动下载Gradle,最好翻墙下载,速度会快一些,当然不翻墙也可以成功下载。
![](http://7vzo2i.com1.z0.glb.clouddn.com/64502CCD-3560-49F8-A520-9D2B737FF2F0.png-img.normal)
下载之后的Gradle保存在
shell /Users/EricTang/.gradle下
Gradle快速入门
我们随便新建一个项目,命名为GradleTest,然后我们看一下Gradle的相关配置文件,跟Gradle配置相关的文件主要有:
一、 GradleTest/GradleTest/build.gradle
![](http://7vzo2i.com1.z0.glb.clouddn.com/2E9D9E49-7D82-413D-BDDD-6E16C57191E2.png-img.normal)
此处的build.gradle是整个Module的Gradle配置文件,也是主要的Gradle配置文件,然后我们看一下主Gradle配置文件的内容以及注释:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.1.1' } } //声明这是Android应用程序 apply plugin: 'com.android.application' repositories { jcenter() } android { // 编译的SDK版本 compileSdkVersion 19 // buildTools的版本 buildToolsVersion "21.1.1" defaultConfig { // 应用包名 applicationId "com.aiscot.gradle.test" minSdkVersion 9 targetSdkVersion 19 versionCode 1 versionName "1.0" } // java版本 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { debug { // debug模式 } release { // release模式 // 是否进行混淆 minifyEnabled false // 混淆文件的位置 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { // 将项目中libs目录下的所有jar包包含到编译目录中 compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' }
几点注意事项:
apply plugin是最新的Gradle版本写法,之前的版本写法是apply plugin: “android”,以前使用过的同学记得改正过来,刚开始用的同学(比如我)算是比较幸运的,可以直接从新的语法开始写起
buildToolsVersion需要本地的SDK里安装过的版本才行,这个可以手动更改,或者通过Android SDK Manager下载相对应的版本
sourceCompatibility后面的JavaVersion.VERSION_1_X指的是编译项目所需的java版本,Mac系统在10.9之前都是自带JDK1.6的,但是从10.9开始,java就不是Mac系统的一等公民了,不默认安装,这点我想大家在运行Idea或者Eclipse之类的IDE的时候应该已经知道了,运行的时候会提示你当前没有安装JDK,点击更多信息之后会跳转到Apple的Support网站去下载。不过还需要注意一点,最好把JDK1.7或者JDK1.8安装上,因为Android从5.0开始需要JDK1.7才能进行编译
创建Gradle Android项目之后,自动生成的是默认基本配置,当然还有很多其他的自定义部分,例如自动打包debug、release、beta等,签名,多渠道打包等。
二、 GradleTest/build.gradle
![](http://7vzo2i.com1.z0.glb.clouddn.com/A2D81006-ECEA-441A-8E7F-3053A4669879.png)
![](http://7vzo2i.com1.z0.glb.clouddn.com/8FE1D91D-43CD-49B6-842B-7F9B4029283A.png)
Idea中每个Project相当于一个Workspace,而一个Module相当于一个Project,我们的Android项目中肯定有一个是运行的,而其他的Module就是引用的Library,每个Module(不论是运行的工程还是引用的Library)都需要有一个gradle配置文件,语法都是一样的,唯一不同的是开头声明的:运行的工程师开头声明的是“apply plugin:’com.android.application’”,而引用的Library开头声明的则是“apply plugin:’com.android.library’”
上面这个文件,就是整个Project的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.1.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } }
该文件主要包含两个方面的内容:
jcenter(),这里可以理解为一个新的中央远程仓库,兼容maven中心仓库,但是性能更优。
classpath,声明了android gradle plugin的版本,这里的版本,对Idea的版本没有什么特殊要求,我用的是Idea14的版本,完全正常使用,其他的IDE例如Eclipse和Android Studio我就不是很清楚了。
三、 GradleTest/gradle目录
这个目录下面有个wrapper目录,里面有两个文件,一个是gradle-wrapper.jar,另一个是gradle-wrapper.properties文件,这里我们重点看一下gradle-wrapper.properties文件的内容:
#Wed Apr 10 15:27:10 PDT 2013 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版本问题的话,我们也可以通过手动修改指定到正确的路径。
四、 GradleTest/settings.gradle文件
![](http://7vzo2i.com1.z0.glb.clouddn.com/F07D6370-2AB6-4DA9-B25B-C765872EE9C9.png)
该文件是全局的项目配置文件,内容如下:
include ':GradleTest'
这里面主要是生命一些需要加入Gradle的Module,例如我们这里就暂时就只有一个,如果引用了其他的Module,就按照
include ':GradleTest’, ‘extras:额外的Module’的格式加入进去即可
其它问题
一、有些同学会和我一样,对Gradle的sync不是很熟悉,嗯,是这样儿的,每次我们修改了build.gradle文件,Gradle项目需要与Idea进行文件同步,点击sync now之后,Idea会根据Gradle文件重新更新.idea目录以及*.iml文件,让Idea可以识别到新引入的资源。
二、关于Module中的build.gradle文件的buildscript代码其实是可以删除掉的,因为它可以从父项目中继承得来,即,使用GradleTest/build.gradle处的设置
![](http://7vzo2i.com1.z0.glb.clouddn.com/9C3B474D-5F50-4DE4-B23C-997022923C8D.png-img.normal)
三、关于“Gradle: Error retrieving parent for item: No resources found that matches the given name ‘android:TextAppearance.Material’”的错误
![](http://7vzo2i.com1.z0.glb.clouddn.com/B989688C-7432-47C4-BB19-C632B32FBA61.png-img.normal)
如果遇到这个错误的话,你就需要检查一下你相应的Module中得dependencies,确保将compile ‘com.android.support:appcompat-v7:22.0.0’的写法修正为’com.android.support:appcompat-v7:19.+’,这里的19指的是SDK版本号,需要跟你的targetSdkVersion保持一致。
参考链接:Error retrieving parent for item - Android Studio
四、Gradle的sync在无网络连接的情况下失效
这个可以通过设置Gradle的离线工作方式来解决,打开Preferences,在Build, Execution, Deployment下的Build Tools中找到Gradle。
![](http://7vzo2i.com1.z0.glb.clouddn.com/D80720AD-4A54-4505-B308-2E8DE19B4891.png-img.normal)
勾选Offline work即可。
关于Gradle的快速入门先写这么多,然后后面会重点记录一下多渠道打包的问题
相关文章推荐
- Android开发之Gradle笔记整理1
- Android开发之Gradle笔记整理2
- Android开发之Gradle笔记整理2-Gradle常用命令及UMeng多渠道打包实战
- 安卓学习笔记---Android 开发技巧-以友盟为例在Android Studio利用gradle进行多渠道打包和apk签名发布
- Jenkins+svn_Gradle实现android开发持续集成问题笔记
- Android应用开发中WebView的常用方法笔记整理
- Android开发笔记整理
- Android开发笔记整理
- Android开发笔记:如何使用预先制作好的SQLite数据库(整理自网络)
- android 开发零起步学习笔记(四):学习几个原来没接触的概念之Gradle
- android游戏开发——笔记整理之SurfaceView游戏框架整理
- Android开发学习笔记(13):Android开发常用技术点整理(更新中...)
- android 开发零起步学习笔记(二十):Android开发笔记:如何使用预先制作好的SQLite数据库(整理自网络)
- MC55开发之与GPRS登陆有关的AT指令详解(独家整理!保证是你见过的MC55开发最全的笔记~~)
- Android 学习笔记(三)Windows下建立Android开发环境
- Android开发笔记
- android应用开发学习笔记--游戏开发
- “面向状态软件开发”学习笔记一(整理LeWolf的文章)
- Android开发中用到的命令——整理贴
- 转载!有关GTK开发的笔记[整理中]