目录:1、Gradle初识2、Gradle加速3、AndroidStudio工程下的build.gradle文件4、AndroidStudio导入工程还是卡卡卡???
1. Gradle是什么?
1.1. 概念
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。一种依赖管理工具,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。 用于自动化构建、测试、发布打包。
1.2. Gradle的Project与Task
Project工程:一个待编译的工程称为一个Project工程
Task任务:每一个Project在构建的时候都包含一些列的任务,例如在AndroidStudio中的Gradle编译就包括:
- Java源码编译任务
- 资源编译任务
- JNI编译任务
- lint检查任务
- 打包生成apk任务
- 签名任务等等
1.3. Gradle做什么用?
- 依赖管理
- 版本发布
- 差异管理
2. Gradle加速
安卓开发过程中最不能忍的就是Gradle那龟速的构建速度。AndroidStudio使用最郁闷莫过于导入一个工程等上大半天。所以提高项目的构建速度势在必行。
-
1、给Gradle配置一个gradle.properties文件
在用户目录下的.gradle
文件夹里新增一个名为gradle.properties
的gradle属性配置文件。
在文件中添加以下内容://让gradle使用单独的守护进程org.gradle.daemon=true//让gradle并行编译org.gradle.parallel=true//让gradle在需要的时候才配置org.gradle.configureondemand=true//增加gradle运行的java虚拟机的大小org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
这里是对所有的工程生效。
如果将gradle.properties文件只配置在单个工程下,那么只对该工程有效。 -
使用国内的maven仓库,这里用的是阿里云的。
在用户目录下的.gradle
文件夹里新增一个名为ini.gradle
的gradle初始化配置文件。
在文件中添加以下内容:allprojects{ repositories { def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." remove repo } } } maven { url REPOSITORY_URL } } }
-
修改AndroidStudio的配置:offline的工作模式,这样就不用每次都去抓取最新的内容,本地有就直接使用本地的:
同时对Compiler做如下配置:
- 修改本地仓库的位置,避免占用C盘内存,影响运行速度。
在另一个盘符下新建一个文件夹,将用户目录下的.gradle文件夹全部拷贝到该目录下。比如我是迁移到T盘的GradleRepo文件夹下。
然后添加系统环境变量:
GRADLE_USER_HOME=t:/GradleRepo/.gradle
3. AndroidStudio工程下的build.gradle文件
项目根目录下的build.gradle内容,默认包含三个标签:
- buildscript
- allpprojects
- task clean
// Top-level build file where you can add configuration options common to all sub-projects/modules.// gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件、maven仓库地址等。buildscript { repositories { // 声明仓库源 jcenter() // 中央远程仓库,兼容maven中心仓库,性能更优 } dependencies { classpath'com.android.tools.build:gradle:2.3.0'// 声明gradle插件的版本// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files }}// 所有Project默认的仓库源allprojects { repositories { jcenter() }}// 声明一个名为clean的任务,作用是每当修改settings.gradle文件后点击同步,就会删除rootProject.buildDir下的文件(清除了External Libraries里的包,重新添加一次)task clean(type: Delete) { delete rootProject.buildDir}
应用android app目录下的build.gradle文件,默认包含三个标签:
- apply plugin
- android
- dependencies
//声明类型是安卓应用apply plugin: 'com.android.application'android { compileSdkVersion 25// 编译的SDK版本 buildToolsVersion "25.0.2"// 编译的tools版本// 一些默认的配置 defaultConfig { applicationId "com.lisathecat.mvp.my_mvp_app"// 包名 minSdkVersion 15// 支持的最低SDK版本 targetSdkVersion 25// 支持的目标版本 versionCode 1// 版本号 versionName "1.0"//版本名称//AndroidJUnitRunner单元测试在gradle文件下的配置 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { //build类型 release {//发布配置 minifyEnabled false//关闭混淆//指定proguard文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug {//调试配置 signingConfig signingConfigs.release } }}dependencies { // 编译本地libs目录下的所有依赖compilefileTree(dir: 'libs', include: ['*.jar']) // 测试编译配置 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { excludegroup: 'com.android.support', module: 'support-annotations' }) // 项目添加的引用包compile'com.android.support:appcompat-v7:25.2.0'compile'com.android.support:design:25.2.0'compile'com.android.support.constraint:constraint-layout:1.0.1' testCompile 'junit:junit:4.12'}
4. AndroidStudio导入工程还是卡卡卡???
AndroidStudio安装的同时也会安装Gradle插件,在用户的根目录下同时生成.gradle
文件,在.gradle/wrapper/dists
目录下面有gradle-versioncode-all
,如:gradle-3.3-all
,gradle-2.14.1-all
这样的文件夹。
在导入安卓工程的时候常常会出现卡住的现象,那是因为.gradle
里面没有工程设置的构建工程的gradle版本,所以AndroidStudio在默默下载对应的gradle版本。
可以考虑先修改配置文件再导入。
- Gradle,包括Gradle使用版本和Android插件版本
- JDK,这个所有的Java程序都需要
- Compile Sdk—需要的Android SDK
- Build Tool—编译工具
- 众多第三方包
参考资料:
AndroidStudio下gradle的入门介绍与使用
加速Android Studio的Gradle构建速度
学习Android Studio里的Gradle
AndroidStudio导入太慢?。。。