转自:http://www.jianshu.com/p/02cb9a0eb2a0

一)基本配置

  1. build配置

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

    Android脚本

    apply plugin: 'com.android.application'

    Android配置

    android {compileSdkVersion 22buildToolsVersion "22.0.1"
    }

    项目结构

    MyApp
    ├── build.gradle
    ├── settings.gradle
    └── app├── build.gradle├── build├── libs└── src└── main├── java│   └── com.package.myapp└── res├── drawable├── layout└── etc.
  2. Gradle Wrapper结构(这些新建项目时都添加给了用户,不需要重新添加)

    myapp/├── gradlew ├── gradlew.bat└── gradle/wrapper/├── gradle-wrapper.jar└── gradle-wrapper.properties

    运行build任务 - 列出所有可用任务

    $ ./gradlew tasks

    生成App-debug.apk任务

    $ ./gradlew assembleDebug# Apk路径: MyApp/app/build/ outputs/apk
  3. 手动导入Eclipse-Android项目(自动导入请连续点“下一步”)
    在项目路径下创建build.gradle文件:

    buildscript {repositories {jcenter() }dependencies {classpath 'com.android.tools.build:gradle:1.2.3'}
    }
    apply plugin: 'com.android.application'
    android {compileSdkVersion 22buildToolsVersion "22.0.1"sourceSets {main {manifest.srcFile 'AndroidManifest.xml'java.srcDirs = ['src']resources.srcDirs = ['src']aidl.srcDirs = ['src']renderscript.srcDirs = ['src']res.srcDirs = ['res']assets.srcDirs = ['assets']}androidTest.setRoot('tests')}
    }
    dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])
    }

    PS 也可以复制粘贴Eclipse-Android项目的源代码到Android Studio的项目里

二)自定义配置

  1. Gradle所有文件结构

    MyApp
    ├── build.gradle
    ├── settings.gradle
    └── app└── build.gradle

    settings.gradle

    include ':app'

    MyApp/build.gradle

    buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:1.2.3'}
    }
    allprojects {repositories {jcenter() }
    }

    MyApp/app/build.gradle

    apply plugin: 'com.android.application'
    android {compileSdkVersion 22buildToolsVersion "22.0.1"defaultConfig {applicationId "com.gradleforandroid.gettingstarted"minSdkVersion 14targetSdkVersion 22versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}
    }
    dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:appcompat-v7:22.2.0'
    }
  2. 基础任务

    $ ./gradlew assemble -为所有构建类型创建apk
    $ ./gradlew check 运行所有的检查,比如说Android Lint,如果发现问题可终止任务
    $ ./gradlew build 运行以上两个任务
    $ ./gradlew clean -清除生成的apk
    ++++
    $ ./gradlew connectedCheck - 在设备上运行测试
    $ ./gradlew deviceCheck - 远程设备运行测试
    $ ./gradlew installDebug/installRelease - 在设备商安装指定版本
    $ ./gradlew uninstall - 卸载
  3. Build Types不同版本的参数设置 - BuildConfig/Resource Value

    android {buildTypes {debug {buildConfigField "String", "API_URL","\"http://test.example.com/api\""buildConfigField "boolean", "LOG_HTTP_CALLS", "true"resValue "string", "app_name", "Example DEBUG"}release {buildConfigField "String", "API_URL", "\"http://example.com/api\""buildConfigField "boolean", "LOG_HTTP_CALLS", "false"resValue "string", "app_name", "Example"}}
    }
  4. 全局设置(项目根目录的build.gradle)

    allprojects {apply plugin: 'com.android.application'android {compileSdkVersion 22buildToolsVersion "22.0.1"}
    }

    设置全局参数

    ext {compileSdkVersion = 22buildToolsVersion = "22.0.1"
    }

    在MyApp/app/build.gradle里面使用参数

    android {compileSdkVersion rootProject.ext.compileSdkVersionbuildToolsVersion rootProject.ext.buildToolsVersion
    }
  5. 默认任务(MyApp/build.gradle)

    defaultTasks 'clean', 'assembleDebug'

三) 依赖管理

  1. 仓库
    预设配置仓库

    repositories {mavenCentral()jcenter()mavenLocal()
    }

    远程仓库

    repositories {maven {url "http://repo.acmecorp.com/maven2"credentials {username 'user'password 'secretpassword'}}ivy {url "http://repo.acmecorp.com/repo"}
    }

    本地仓库

    repositories {maven {url "../repo"}
    }
  2. 本地依赖
    项目文件依赖

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

    原生库结构与配置

    # 结构:
    app├── AndroidManifest.xml└── jniLibs├── armeabi│   └── nativelib.so├── armeabi-v7a│   └── nativelib.so├── mips│   └── nativelib.so└── x86└── nativelib.so
    # 配置:
    android {sourceSets.main {jniLibs.srcDir 'src/main/libs'}
    }

    Libray项目

    # 修改Android插件:
    apply plugin: 'com.android.library'
    # settings.gradle新增libray项目:
    include ':app', ':library'
    # app内引用library项目:
    dependencies {compile project(':library')
    }
  3. 依赖概念

    <待续>
  4. Android Studio内添加依赖

四)构建变体

  • <待续>

五)多模块构建管理

  1. 加速构建

    在gradle.properties里面添加:
    org.gradle.parallel=true

六) 测试

  1. 单元测试
    使用JUnit

    # 结构:
    app
    └─── src
    ├─── main
    │ ├─── java│    │    └─── com.example.app│    └───res└─── test└─── java└─── com.example.app
    # 依赖:
    dependencies {testCompile 'junit:junit:4.12'
    }

    使用Robolectric

    # 依赖:
    apply plugin: 'org.robolectric'dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:appcompat-v7:22.2.0'testCompile 'junit:junit:4.12'testCompile'org.robolectric:robolectric:3.0'testCompile'org.robolectric:shadows-support:3.0'
    }
    # Demo:
    @RunWith(RobolectricTestRunner.class)
    @Config(manifest = "app/src/main/AndroidManifest.xml", sdk = 18)
    public class MainActivityTest {@Testpublic void clickingButtonShouldChangeText() {AppCompatActivity activity = Robolectric.buildActivity(MainActivity.class).create().get();Button button = (Button) activity.findViewById(R.id.button);TextView textView = (TextView) activity.findViewById(R.id.label);button.performClick();assertThat(textView.getText().toString(), equalTo(activity.getString(R.string.hello_robolectric)));}
    }
  2. 功能测试
    使用Espresso

    <待续>
  3. 测试覆盖度
    使用Jacoco

    <待续>

七)创建任务与插件

  1. <待续>

八)配置CI

  1. <待续>

九)自定义配置 - 进阶

  1. 缩减apk文件大小
    使用ProGuard

    android {buildTypes {release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}
    }

    收缩资源文件 - 自动 (<手动待续>)

    android {buildTypes {release {minifyEnabled trueshrinkResources true}}
    }
  2. 加速构建

    org.gradle.parallel=true # 并行构建
    org.gradle.daemon=true # 开启Gradle守护进程
    org.gradle.jvmargs=-Xms256m -Xmx1024m # 配置JVM<参照下图>

    使用Profiling

    <待续>

    使用Jack(Java Android Compiler Kit) and Jill(Jack Intermediate Library Linker)

    <待续>
  3. 忽略Lint

    android {lintOptions {abortOnError false}
    }
  4. 使用Ant

    <待续>
  5. app打包 - 进阶
    分割apk

    android {splits {density {enable trueexclude 'ldpi', 'mdpi'compatibleScreens 'normal', 'large', 'xlarge'}}
    }
    生成结果:
    app-hdpi-release.apk
    app-universal-release.apk
    app-xhdpi-release.apk
    app-xxhdpi-release.apk
    app-xxxhdpi-release.apk

引用

  • 《Gradle for Android》

Android Studio中Gradle使用详解相关推荐

  1. Android Studio build.gradle配置详解

    Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项 ...

  2. android studio gradle3.3,Android studio 3.2 升级详解及Gradle配置

    Android studio 3.2 升级详解及Gradle配置 发布时间:2018-09-29 15:36, 浏览次数:618 , 标签: Android studio Gradle 一直在使用An ...

  3. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  4. 《Android Studio应用开发实战详解》——导读

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的目录,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 第1章 An ...

  5. libraries 和android runtime之间的关系,《Android Studio应用开发实战详解》——第1章,第1.3节Android系统架构...

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.3节Android系统架构,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&quo ...

  6. 《Android Studio应用开发实战详解》——第1章,第1.2节Android系统基础

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.2节Android系统基础,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&quo ...

  7. 《Android Studio应用开发实战详解》——第1章,第1.4节Android和Linux的关系

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.4节Android和Linux的关系,作者 王翠萍,更多章节内容可以访问云栖社区"异步社 ...

  8. 《Android Studio应用开发实战详解》——第1章,第1.5节Android开发学习路线图

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.5节Android开发学习路线图,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区& ...

  9. 《Android Studio应用开发实战详解》——第1章,第1.1节移动智能设备系统发展现状...

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.1节移动智能设备系统发展现状,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&qu ...

最新文章

  1. 中国研制量子计算机成功,中国宣布研发量子计算机,这次很可能真的要领先世界!速度太快!...
  2. python爬虫提取人名_python爬虫—爬取英文名以及正则表达式的介绍
  3. 目标检测学习笔记--DSSD算法
  4. 分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据
  5. 检查本地服务器是否配置成功
  6. oracle awr报告提取,oracle AWR报告提取分析
  7. MySQL 中的重做日志,回滚日志以及二进制日志的简单总结
  8. LeetCode 518. 零钱兑换 II(动态规划)
  9. 【计算机网络复习 数据链路层】3.4.1 流量控制与可靠传输机制
  10. Spring Boot中使用模板引擎参数化传参数
  11. Ubuntu环境搭建一:安装tftp服务器程序
  12. Python3基础12(collections、struct、itertools、chardet等的使用)
  13. ASP.NET MVC 利用Razor引擎生成静态页
  14. 实验12:Problem A: 你会定义类吗?
  15. python ide_Python id()
  16. Code snippet of the day : Get Chinese Spell in C#
  17. 关于艾宾浩斯曲线的一点思考
  18. Java中成员变量和局部变量在内存中的分配
  19. 建筑企业“出租脚手架”究竟如何缴纳增值税
  20. 弧齿锥齿轮零件图_弧齿锥齿轮画法类别

热门文章

  1. 触底事件_福建双外到位欲触底反弹,李宁回应易建联扔鞋事件,吉林主帅表态...
  2. mysql root 注入_sql注入入门之mysqlroot权限下的注入利用方式
  3. 文件不能自动求和_Excel求和公式函数的使用方法教程
  4. no判断 python yes_Python 内置类型全解析(1)
  5. flutter offset_牛笔!自己用Flutter撸一个天气APP
  6. Hadoop入门进阶步步高(二)-目录介绍
  7. 大数据学习笔记53:Flume Sink Processors(Flume接收器处理器)
  8. 大数据学习笔记27:MR案例——多输入源处理成绩
  9. 大数据学习笔记20:MR案例——按电影热度值排序
  10. VB讲课笔记07:控制结构