[关闭]
@jimbo 2016-10-24T09:50:47.000000Z 字数 3282 阅读 949

gradle学习

android


一 gradle简介

gradle是一种基于Groovy的特定领域语言(DSL)来进行项目自动化建构的工具。可以灵活高效的打包项目。

二 gradle编程模型

gradle是基于groovy的,而groovy是基于java的,所以脚本在执行的时候也是转换成对象的。gradle主要有三个对象,Gradle,Project和Settings。

其他的gradle文件则一般会被转换成一个实现了script接口的对象。

Gradle对象

Gradle包含HomeDir,UserHomeDir,Perent等属性

-HomeDir是gradle的储存路径
-UserHomeDir是Gradle编译的缓存路径,里面会存放配置文件等

Project对象

每一个 build.gradle 文件都会转换成一个 Project 对象。在 Gradle术语中,Project 对象对应的是 Build Script。在Project中我们要

-加载插件:apply函数来加载插件,例如apply plugin:'com.android.application'.apply函数的调用方式是:apply 参数名:值。
-配置源文件
-设置属性

Settings对象

用来配置项目中的Project

蜗牛项目

  1. Root project snailreader
  2. +----project ':app'
  3. \--build.gradle
  4. \--settings.gradle
  5. \--gradle.properties
  6. \--local.properties
  7. +----project ':project'
  8. \--build.gradle
  9. +----project ':pulltorefresh'
  10. \--build.gradle
  11. +----project ':uikit'
  12. \--build.gradle
  13. \--project.properties

snailreader/settings.gradle

  1. // 这个文件对于一个由多个Project组成的项目来说是必须的,配置该项目的project
  2. include ':app', ':uikit'
  3. include ':pulltorefresh'

snailreader/build.gradle

  1. //buildscript,repositories,dependencies都是闭包
  2. //在一个multi-project中,根目录下的build.gradle文件可以为做一些全局配置
  3. buildscript {
  4. //jcenter 是一个函数,表示编译过程中依赖的库,所需的插件可以在jcenter仓库中下载。
  5. repositories {
  6. jcenter()
  7. }
  8. // 配置依赖,dependencies 表示我们编译的时候,依赖 android 开发的gradle插件
  9. dependencies {
  10. //class path 是 com.android.tools.build。版本是2.2.0
  11. classpath 'com.android.tools.build:gradle:2.2.0'
  12. }
  13. }
  14. //subprojects:它会遍历每个子 Project。
  15. // 为所有的Project配置respsitories
  16. allprojects {
  17. repositories {
  18. jcenter()
  19. }
  20. }

snailreader/app/build

  1. // 加载插件
  2. apply plugin: 'com.android.application'
  3. // 配置依赖
  4. dependencies {
  5. // URS登录组件
  6. compile fileTree(dir: 'libs', include: ['*.jar'])
  7. compile 'com.android.support:design:22.2.+'
  8. compile 'com.android.support:appcompat-v7:22.2.+'
  9. compile 'com.android.support:recyclerview-v7:22.2.+'
  10. compile 'com.squareup.okhttp3:okhttp:3.2.0'
  11. compile 'com.google.android.gms:play-services-appindexing:8.1.0'
  12. compile 'com.android.support:multidex:1.0.1'
  13. compile project(':pulltorefresh')
  14. // 云信
  15. compile project(':uikit')
  16. }
  17. android {
  18. useLibrary 'org.apache.http.legacy'
  19. compileSdkVersion 23
  20. buildToolsVersion '24'
  21. // 添加配置属性
  22. defaultConfig {
  23. applicationId "com.netease.snailread"
  24. minSdkVersion 14
  25. targetSdkVersion 21
  26. versionCode 7
  27. versionName "0.9.11"
  28. multiDexEnabled true
  29. }
  30. // 签名配置
  31. signingConfigs {
  32. debug {
  33. }
  34. release {
  35. storeFile file(KEYSTORE_PATH)
  36. storePassword KEYSTORE_PASSWORD
  37. keyAlias KEYSTORE_ALIAS
  38. keyPassword KEYSTORE_PASSWORD
  39. }
  40. }
  41. // 配置编译类型:可以通过这里来实现多渠道打包
  42. buildTypes {
  43. // buildConfigField会在generated中生成一个buildConfig文件
  44. debug {
  45. buildConfigField "boolean", "NEED_CRASH_COLLECT_FLAG", "false"
  46. // DA统计开关
  47. buildConfigField "boolean", "MA_STATISTIC", "false"
  48. buildConfigField "boolean", "SR_SECURE_CONN", "false"
  49. signingConfig signingConfigs.release
  50. }
  51. release {
  52. buildConfigField "boolean", "NEED_CRASH_COLLECT_FLAG", "true"
  53. // DA统计开关
  54. buildConfigField "boolean", "MA_STATISTIC", "true"
  55. buildConfigField "boolean", "SR_SECURE_CONN", "true" //是否采用https连接
  56. signingConfig signingConfigs.release
  57. zipAlignEnabled true
  58. debuggable false
  59. // 移除无用的resource文件
  60. shrinkResources false
  61. // 先不混淆
  62. minifyEnabled false
  63. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  64. }
  65. }
  66. repositories {
  67. mavenCentral()
  68. flatDir {
  69. dirs 'libs'
  70. }
  71. }
  72. }
  73. // urs
  74. // 添加依赖 遍历libs下面的文件
  75. fileTree(dir: 'libs', include: '*.aar').each { File file ->
  76. dependencies.add("compile", [
  77. name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name },
  78. ext: 'aar'
  79. ])
  80. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注