给 Android 初学者的 Gradle 知识普及:http://gold.xitu.io/entry/5778f8bd165abd0054b443b0/promote?utm_source=baidu&utm_medium=keyword&utm_content=android_gradle&utm_campaign=q3_search

Gradle 笔记

http://www.cnblogs.com/xiaokang088/p/4450406.html

网上有一篇文章说的很明白,
图文来教你在eclipse下用gradle 来打包Android
http://blog.csdn.net/x605940745/article/details/41242687

步骤为:

1. Elipse里面导出,Generate  Gradle build files

2. 找到生成的gradle文件夹,里面有 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=http\://services.gradle.org/distributions/gradle-1.10-all.zip

3. 复制最后一行,下载这个文件,并拷贝到指定目录

4. 配置环境变量, GRADLE_HOME= E:\GraldeTest\gradle-1.10-all\,并把 GRADLE_HOME\bin 加入到PATH里面。

5. 命令行里面输入 gradle -v, 如果配置成功,会显示相应的版本号。

6. 跳转到android 工程文件夹,执行gradle build,生成APK。APK 在build\outputs\apk里面。

7. 如果要Release版本的,build.gradle 要做一下修改,

增加:

signingConfigs{
        release{
            storeFile file("keystores/SeagateDashboard.keystore")
            storePassword "nero1234"
            keyAlias "[dashboard]"
            keyPassword "nero1234"
        }
    }

buildTypes{
        release{
            signingConfig signingConfigs.release
        }
    }

8.  如果使用了最新的gradle,例如 2.3,导致build失败,需要修改一下配置

distributionUrl=http\://services.gradle.org/distributions/gradle-2.3-all.zip

当然了,GRADLE_HOME里面也要改过的。

另外

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
    }
}

这个版本号和grade的对应,参考 https://developer.android.com/tools/revisions/gradle-plugin.html

具体的对应关系不详,需要多试试。

9.  编译时可能会报错 sdk location not found.define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

本地创建一个local.properties, 内容为

sdk.dir=C:\android\sdk …. (ANDROID_HOME所在路径)

如果是在集成服务器上,例如Bamboo,需要使用第三方组件 android-sdk-manager (https://github.com/JakeWharton/sdk-manager-plugin)。

这个组件会帮我们下载android sdk,并配置local.properties.

并且需要在build.gradle头部增加如下信息,这些必须在apply android前面。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
    }
}
apply plugin: 'android-sdk-manager'
apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

其他参考:

gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第二篇:gradle简单实战

记——加快gradle 构建速度的经验

http://blog.csdn.net/maosidiaoxian/article/details/49583215

Gradle作为一个新的构建系统,无疑在灵活,扩展,跨平台等各方面都表现得非常优秀,然而,它也有一点备受吐槽,就是速度慢。以下为本人使用gradle过程中,几次加快gradle构建速度的经验之谈。

本文原创。

转载请注明CSDN博客出处:

http://blog.csdn.net/maosidiaoxian/article/details/49583215

1,开启守护进程。

这一点在许多问答网站,博客等,都会提到。通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新fork一个gradle构建进程。通过在~/.gradle(如果是windows下,则为用户目录下的.gradle文件夹,如果配置过 GRADLE_USER_HOME,则为该目录)中编辑(如果没有则创建)gradle.properties,加入以下配置,可以让所有项目在构建时都开启守护进程:

  1. org.gradle.daemon=true

2,开启并行编译

这一点同上,也是常见的加快编译速度的方法。在多项目(或多模块)编译时它会很有用。同样在~/.gradle/gradle.properties中加入:

  1. org.gradle.parallel=true

3,使用新版的gradle和android gradle plugin。

然而,在加上这两行之后,随着项目开发的逐渐复杂,引入的库也越来越多,项目本身也要增加一些productFlavor,速度又开始慢起来。后来Android Studio升级,Gradle升级,看到Gradle 2.4的升级说明上提到提高了gradle的构建速度,于是用了新版的Gradle,果然提高了些许速度。

编辑项目根目录下的build.gradle,把android gradle plugin更新到新版本:

  1. classpath 'com.android.tools.build:gradle:1.3.0'

如果是使用本地的gradle,则下载新的版本,并且更新新版本的gradle到path的环境变量中。如果是使用gradlew构建,则编辑项目根目录下的gradle/wrapper/gradle-wrapper.properties,把gradle改为2.4或更新的版本。

  1. distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip

4,命令行构建。

在Android Studio中,点击运行时它是将当前的构建任务加入到队列中。也就是,如果你改过build.gradle的文件导致它在同步脚本时,就必须等到这个任务完成之后才会执行你刚才的构建任务。作为命令行控的我,首先还是用命令行构建了。

  1. ./gradlew assembleRelease

上面的任务还可以简写为:

  1. ./gradlew aR

由于我这里的项目中因需要而创建了几个productFlavor:Develop, Test, Official。所以如果使用./gradlew aR的话,它会同时构建这三个的release版本。而实际上,我在开发的时候只需要构建Develop这一个,所以命令改为如下:

  1. ./gradlew aDR

5,屏蔽不必要的productFlavor

在使用命令行的构建过程中,我发现尽管我只是要构建Develop版本,但是它还是会去解析每一个productFlavor的依赖,并且在依赖上卡很久。所以在构建时先注释掉了其他两个pruductFlavor,果然在解析依赖的这一步就节省了一半以上的时间。在不clean的情况下,之前构建一次接近三分钟,现在不到两分钟。

6,使用离线模式。

我发现在构建过程中,除了修改了java文件然后在multldex时有点耗时之外,最大的耗时都在于resolving dependencies,也就是解析依赖的这一步。而我的项目这时候的依赖应该都在本地中有缓存了。所以使用--offline,让它不去联网检查更新。

  1. ./gradlew aDR --offline

因为是构建过的,所以只需要3.846秒。而即使是clean,构建的时间也只需要47.175秒(并不是每一次都是这个时间,有时间会比较大,多构建几次会快一些)。

7,不使用snapshot依赖仓库

现在的速度已经和以前一样快了,但是在Android Studio中直接点运行,总比在命令行执行./gradlew aDR --offline && adb install -r app/build/outputs/apk/xxxxxx.apk要更方便些,而如果在Android Studio中开启offline mode的话,下次更新依赖又要去取消掉它或者在命令行下更新一次依赖。所以我决定再找找gradle不开离线模式下变慢的原因。

命令行下执行:

  1. ./gradlew aDR --info

让gradle在构建过程中打印消息日志。

结果发现,有一些android support库,它会去我声明的一个SNAPSHOT仓库中去找,因为找不到,所以在这一步会耗时很多。特别是我有3个productFlavor的情况下,每一个flavor的依赖都要去解析一遍,这样就要消耗三倍的时间。

之所以会声明这个SNAPSHOT仓库,是因为项目中用到了JakeWharton大神的ViewPagerIndicator,而他的这个库已经两年没维护,里面有几个bug没有修复。我在修复之后,又加了一点新的功能,就准备发布到2.5版本,由于还没怎么测过,所以只是作为SNAPSHOT版本发在了oss.jfrog.org上。于是切换到ViewPagerIndicator项目,把我的改动发到了jcenter中,然后项目的依赖改为2.5版本而不是2.5-SNAPSHOT,然后在依赖库声明为,把这个依赖仓库给注释掉。

先构建一下,下载ViewPagerIndicator 2.5的依赖。然后我们再运行一遍,看一下速度:

  1. ./gradlew aDR

现在解析依赖变得很快,一秒不到就完成了。由于是编译过的,所以整个过程很快,3.092秒,和offline模式下相同(这点时间上的差别,并不能因此说它比offline下更快,即使是相同的构建,偶尔也会有一点时间上的差别)。

再看一下clean后再编译的情况:

  1. ./gradlew clean aDR

只需要47.912秒。已经和--offline下一样了。

从以上过程中可以总结出加快构建速度的技巧如下:

开启守护进程,开启并行编译,使用新版本的android gradle plugin, 使用新版本的Android Studio(它会使用新版本的Tools api去调用gradle),使用新版本的Gradle,使用命令行构建(如果你实在等不级Android Studio中还未执行完的其他任务),构建时减少productFlavor,避免使用SNAPSHOT版本及使用SNAPSHOT仓库,使用离线模式(如果允许),如果没必要则不需要在构建时进行clean。

据说,facebook出了一个新的构建系统,可以构建android, ios, cpp, java, python, go等项目,支持linux, mac(windows?呵呵)。还据说,微信也在使用这个构建系统。接下来我要去了解一下它了。

 
 

版权声明:本文为博主原创文章,未经博主允许不得转载。博主项目:https://github.com/msdx/status-bar-compat

给 Android 初学者的 Gradle 知识普及的更多相关文章

  1. Android开发工具——Gradle知识汇总

    1.什么是构建工具 Eclipse大家都知道是一种IDE(集成开发环境),最初是用来做Java开发的,而Android是基于Java语言的,所以最初Google还是希望Android能在Eclipse ...

  2. 详细介绍android rom移植知识普及

    详细介绍android rom移植知识普及 最近接到很多兄弟们的求助,也回答过无数个和下面这个问题类似的问题: 如何编译android 原生代码得到一个rom,然后跑到某某手机上. 鉴于很多兄弟对这块 ...

  3. android studio学习----gradle基础

    Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. 安装Gradle 在And ...

  4. Android Studio之gradle的配置与介绍

    1.gradle的简单介绍 Gradle是可以用于Android开发的新一代的Build System,也是Android Studio默认的build工具.其实Gradle脚本是基于一种JVM语言- ...

  5. 【Android 应用开发】 Android 各种版本简介 ( Support 支持库版本 | Android Studio 版本 | Gradle 版本 | jcenter 库版本 )

    初学者遇到 Android Studio, 导入工程后, 会出现各种奇葩错误, 如果管理好各个插件, gradle, SDK, SDK Tools, 各种官方依赖库 的版本, 会将错误大大的减少; 这 ...

  6. 强烈推荐android初学者,android进阶者看看这个系列教程

    强烈推荐android初学者,android进阶者看看这个系列教程 转载 2015年05月30日 23:05:44 695 为什么要研究Android,是因为它够庞大,它够复杂,他激起了我作为一个程序 ...

  7. Android Studio 中 Gradle 依赖的统一管理(rootProjectt)

    最近遇到Android Studio 中 Gradle 依赖的统一管理的不懂得地方,看大神的也没看懂,百度了一下,使用起来还挺方便 下面是链接,在这里我就不详细说明了, http://www.jian ...

  8. android studio学习----gradle配置

    转载地址:http://blog.csdn.net/loongggdroid/article/details/47037413 1.gradle的简单介绍 Gradle是可以用于Android开发的新 ...

  9. 解决 Could not find com.android.tools.build:gradle 问题

    今天拉同事最新的代码,编译时老是报如下错误: Error:Could not find com.android.tools.build:gradle:2.2.0.Searched in the fol ...

随机推荐

  1. NOSQL之旅---HBase

    最近因为项目原因,研究了Cassandra,Hbase等几个NoSQL数据库,最终决定采用HBase.在这里,我就向大家分享一下自己对HBase的理解. 在说HBase之前,我想再唠叨几句.做互联网应 ...

  2. Android Layout_Gravity和Gravity

    简单来说layout_gravity表示子控件在父容器的位置,gravity表示控件内容在控件内的位置. 上面图片的xml代码 <?xml version="1.0" enc ...

  3. SAP BW标准模型简介(BW星形模型 BW Star Schema )

    标准星型模型是 数据仓库中一种常用的组织信息和数据的多维数据模型.它由中心的一个事实表(Fact Table)和一些围绕它的维度表(Dimensional Table)组成.  事实(Fact)着眼于 ...

  4. Java和C#在面向对象上语法的区别

    做了几年了开发一直没有总结什么,回到了家乡的小城做了一名培训班的教员,教授软件开发的知识.细小的知识从头细细嚼来,别有一番滋味.或是以前遗漏的太多,或是确实没有系统的学习过,教学生的过程中自己也对教材 ...

  5. 小学生玩ACM----优先队列

    思来想去,本人还是觉得,这个优先队列啊,不学不行,怎么说咧?虽说有时候我可以模仿它的功能,但是有的题目会坑的我大放血,况且多学会用一个小东东总不会伤身的撒,何况我是永举不垂的,哦耶,嘿嘿 优先队列嘛就 ...

  6. [Angular-Scaled Web] 8. Using $http to load JSON data

    Using the $http service to make requests to remote servers. categories-model.js: angular.module('egg ...

  7. 检测到有潜在危险的 Request.Form

    今天在做一个.net的新闻发布器的时候. 遇到这样的一个问,在html编辑器里面加入图片提交的时候 就报一个 从客户端(content1="<img src="/web/ne ...

  8. mysql 5.7 多源复制 原创

    一从两主:多源复制 每台mysql 服务器都需要加my.cnf要加两个参数才可以在GTID多源复制 master-info-repository=TABLE relay-log-info-reposi ...

  9. phonegap platform add ios 出错的问题

    在Mac上新安装的Phonegap,版本3.3-0.18.0. 本来创建项目后按教程: http://docs.phonegap.com/en/edge/guide_platforms_ios_ind ...

  10. 苹果开发工具:Xcode和Interface Builder

    摘要:在Mac OS X上开发,首选Xcode继承开发环境.本文对开发工具套件中最重要的Xcode和Interface Builder两个工具做了简要介绍,并提供<苹果开发工具概述>PDF ...