每次吃一点AndroidのGradle加速

作者: 耑意儿 | 来源:发表于2017-03-06 17:42 被阅读362次
    目录:
    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导入太慢?。。。

    相关文章

      网友评论

      • 低调的辉:为什么带下json什么的还是卡住动不了
        低调的辉:@傲娇小野猫 运行内存16g
        耑意儿: @低调的辉 带下json应该不会有影响吧?看看有没有可能是别的原因。你的运行内存大不大?

      本文标题:每次吃一点AndroidのGradle加速

      本文链接:https://www.haomeiwen.com/subject/ppwygttx.html