每次吃一点AndroidのGradle加速

目录:
1、Gradle初识
2、Gradle加速
3、AndroidStudio工程下的build.gradle文件
4、AndroidStudio导入工程还是卡卡卡???

Android小仙

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的工作模式,这样就不用每次都去抓取最新的内容,本地有就直接使用本地的:
Paste_Image.png

同时对Compiler做如下配置:

Paste_Image.png
  • 修改本地仓库的位置,避免占用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目录下的所有依赖
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // 测试编译配置
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: '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-allgradle-2.14.1-all这样的文件夹。
在导入安卓工程的时候常常会出现卡住的现象,那是因为.gradle里面没有工程设置的构建工程的gradle版本,所以AndroidStudio在默默下载对应的gradle版本。
可以考虑先修改配置文件再导入。

  • Gradle,包括Gradle使用版本和Android插件版本
  • JDK,这个所有的Java程序都需要
  • Compile Sdk—需要的Android SDK
  • Build Tool—编译工具
  • 众多第三方包

Gradle各个版本下载通道
安卓开发各种工具下载通道

参考资料:
AndroidStudio下gradle的入门介绍与使用
加速Android Studio的Gradle构建速度
学习Android Studio里的Gradle
AndroidStudio导入太慢?。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,837评论 25 707
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,778评论 6 342
  • 第一首:难道爱本身可爱在於束缚 一丝不挂——陈奕迅 每个人都有段想当初,那时年轻气盛,无甚建树,却偏偏醉心于爱情。...
    9d2b8393c420阅读 564评论 0 0
  • 《釜山行》应该是最近最能征服我的一部电影了吧~即使这部电影情节有诸多不合理与破绽,但是确实让观众对人性不免产生了更...
    天使没牙齿阅读 204评论 0 0