Android Studio 中 Gradle 依赖的统一管理及Gradle使用详解

 
 

为什么要对 Gradle 统一管理

在实际项目中,经常会出现一个 Project 中有多个 Module 的情况,如果每个 Module 又同时拥有相同的依赖,比如 v4 包,那么,每次 v4 包升级的时候修改多个 Module 中的 build.gradle 文件,更新其版本都是一件麻烦的事情,而且很有可能忘记某个 Module。所以,将依赖进行统一管理,对于一个 Project 下拥有多个 Module 的情况来说是非常必要的。

如何管理

假设你的 Project 结构如下:

root
  --module1
    --build.gradle
  --module2
    --build.gradle
  ...
  --build.gradle

使用脚本 config.gradle

为了方便管理,可以在根目录下新建 config.gradle 文件

root
  --module1
    --build.gradle
  --module2
    --build.gradle
  ...
  --build.gradle
  --config.gradle

在 config.gradle 中添加如下代码(具体情况根据自己项目来定):

ext {
    android = [
            compileSdkVersion: 23,
            buildToolsVersion: "24.0.0 rc1",
            applicationId    : "com.sivan.rxretrofitdemo",
            minSdkVersion    : 16,
            targetSdkVersion : 23,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    dependencies = [
            "appcompat-v7"       : "com.android.support:appcompat-v7:23.3.0",
            "rxjava"             : "io.reactivex:rxjava:1.1.3",
            "rxandroid"          : "io.reactivex:rxandroid:1.1.0",
            "retrofit"           : "com.squareup.retrofit2:retrofit:2.0.0-beta4",
            "gson"               : "com.google.code.gson:gson:2.6.2",
            "converter-gson"     : "com.squareup.retrofit2:converter-gson:2.0.0-beta4",
            "adapter-rxjava"     : "com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4",
            "butterknife"        : "com.jakewharton:butterknife:7.0.1",
            "logging-interceptor": "com.squareup.okhttp3:logging-interceptor:3.0.1"
    ]
}

OK,依赖写完了,那如何在项目中使用呢

在 root 目录下的build.gradle 中加上apply from: "config.gradle"

接下来就剩下最后一步了,在需要添加依赖的 Module 中使用

  • android 节点的使用
android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    buildToolsVersion rootProject.ext.android.buildToolsVersion

    defaultConfig {
        applicationId rootProject.ext.android.applicationId
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
    }

}
  • dependencies 节点的使用
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile rootProject.ext.dependencies["appcompat-v7"]
    compile rootProject.ext.dependencies["rxjava"]
    compile rootProject.ext.dependencies["rxandroid"]
    compile rootProject.ext.dependencies["gson"]
    compile rootProject.ext.dependencies["converter-gson"]
    compile rootProject.ext.dependencies["adapter-rxjava"]
    compile rootProject.ext.dependencies["retrofit"]
    compile rootProject.ext.dependencies["butterknife"]
}

以后再对依赖包升级的时候直接修改 config.gradle 文件就 OK 了

使用配置文件 gradle.properties

对依赖进行统一管理的另一种方法是使用配置文件 gradle.properties(通常 IDE 会自动生成此文件),在此文件中添加键值对:

LOGGING_INTERCEPTOR=com.squareup.okhttp3:logging-interceptor:3.0.1
CARD_VIEW=com.android.support:cardview-v7:23.3.0

在 Module 的 build.gradle 中使用:

dependencies {
    compile LOGGING_INTERCEPTOR
    compile CARD_VIEW
}

So easy!



作者:遇见67
链接:https://www.jianshu.com/p/a092bcc3de7d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Gradle使用详解

原文出处:http://www.jianshu.com/p/02cb9a0eb2a0  还在更新中。

一)基本配置

  1. build配置

 
 
  1. buildscript {
  2.  repositories {
  3.      jcenter() 
  4.  }
  5.  dependencies {
  6.      classpath 'com.android.tools.build:gradle:1.2.3'
  7.  } 
  8. }

Android脚本

 
 
  1. apply plugin: 'com.android.application'

Android配置

 
 
  1. android {
  2.  compileSdkVersion 22
  3.  buildToolsVersion "22.0.1"
  4. }

项目结构

 
 
  1. MyApp
  2. ├── build.gradle
  3. ├── settings.gradle
  4. └── app
  5.     ├── build.gradle
  6.     ├── build
  7.     ├── libs
  8.     └── src
  9.         └── main
  10.             ├── java
  11.                └── com.package.myapp
  12.             └── res
  13.                 ├── drawable
  14.                 ├── layout
  15.                 └── etc.

Gradle Wrapper结构(这些新建项目时都添加给了用户,不需要重新添加)

 
 
  1. myapp/
  2.  ├── gradlew 
  3.  ├── gradlew.bat
  4.  └── gradle/wrapper/
  5.      ├── gradle-wrapper.jar
  6.      └── gradle-wrapper.properties

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

 
 
  1. ./gradlew tasks

生成App-debug.apk任务

 
 
  1. ./gradlew assembleDebug
  2.  
  3. # Apk路径: MyApp/app/build/ outputs/apk

手动导入Eclipse-Android项目(自动导入请连续点“下一步”)
在项目路径下创建build.gradle文件:

 
 
  1. buildscript {
  2.   repositories {
  3.       jcenter() 
  4.   }
  5.   dependencies {
  6.       classpath 'com.android.tools.build:gradle:1.2.3'
  7.   }
  8. }
  9. apply plugin: 'com.android.application'
  10. android {
  11.   compileSdkVersion 22
  12.   buildToolsVersion "22.0.1"
  13.   sourceSets {
  14.       main {
  15.           manifest.srcFile 'AndroidManifest.xml'
  16.           java.srcDirs = ['src']
  17.           resources.srcDirs = ['src']
  18.           aidl.srcDirs = ['src']
  19.           renderscript.srcDirs = ['src']
  20.           res.srcDirs = ['res']
  21.           assets.srcDirs = ['assets']
  22.       }
  23.       androidTest.setRoot('tests')
  24.   } 
  25. }
  26. dependencies {
  27.   compile fileTree(dir: 'libs', include: ['*.jar'])
  28. }
  1. PS 也可以复制粘贴Eclipse-Android项目的源代码到Android Studio的项目里

二)自定义配置

  1. Gradle所有文件结构

 
 
  1. MyApp
  2. ├── build.gradle
  3. ├── settings.gradle
  4. └── app
  5.     └── build.gradle

settings.gradle

 
 
  1. include ':app'

MyApp/build.gradle

 
 
  1. buildscript {
  2.  repositories {
  3.      jcenter()
  4.  }
  5.  dependencies {
  6.      classpath 'com.android.tools.build:gradle:1.2.3'
  7.  } 
  8. }
  9. allprojects {
  10.  repositories {
  11.      jcenter() 
  12.  }
  13. }

MyApp/app/build.gradle

 
 
  1. apply plugin: 'com.android.application'
  2. android {
  3.  compileSdkVersion 22
  4.  buildToolsVersion "22.0.1"
  5.  defaultConfig {
  6.      applicationId "com.gradleforandroid.gettingstarted"
  7.      minSdkVersion 14
  8.      targetSdkVersion 22
  9.      versionCode 1
  10.      versionName "1.0"
  11.  }
  12.  buildTypes {
  13.      release {
  14.          minifyEnabled false
  15.          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  16.      }
  17.  } 
  18. }
  19. dependencies {
  20.  compile fileTree(dir: 'libs', include: ['*.jar'])
  21.  compile 'com.android.support:appcompat-v7:22.2.0'
  22. }

基础任务

 
 
  1. ./gradlew assemble -为所有构建类型创建apk
  2. ./gradlew check 运行所有的检查,比如说Android Lint,如果发现问题可终止任务
  3. ./gradlew build 运行以上两个任务
  4. ./gradlew clean -清除生成的apk
  5. ++++
  6. ./gradlew connectedCheck - 在设备上运行测试
  7. ./gradlew deviceCheck - 远程设备运行测试
  8. ./gradlew installDebug/installRelease - 在设备商安装指定版本
  9. ./gradlew uninstall - 卸载

blob.png

Build Types不同版本的参数设置 - BuildConfig/Resource Value

 
 
  1. android {
  2.   buildTypes {
  3.       debug {
  4.           buildConfigField "String", "API_URL","\"http://test.example.com/api\""
  5.           buildConfigField "boolean", "LOG_HTTP_CALLS", "true"
  6.           resValue "string", "app_name", "Example DEBUG"
  7.       }
  8.       release {
  9.           buildConfigField "String", "API_URL", "\"http://example.com/api\""
  10.           buildConfigField "boolean", "LOG_HTTP_CALLS", "false"
  11.           resValue "string", "app_name", "Example"
  12.       }
  13.   }
  14. }

全局设置(项目根目录的build.gradle)

 
 
  1. allprojects {
  2.   apply plugin: 'com.android.application'
  3.   android {
  4.       compileSdkVersion 22
  5.       buildToolsVersion "22.0.1"
  6.   } 
  7. }

设置全局参数

 
 
  1. ext {
  2.   compileSdkVersion = 22
  3.   buildToolsVersion = "22.0.1"
  4. }

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

 
 
  1. android {
  2.   compileSdkVersion rootProject.ext.compileSdkVersion
  3.   buildToolsVersion rootProject.ext.buildToolsVersion
  4. }

默认任务(MyApp/build.gradle)

 
 
  1. defaultTasks 'clean', 'assembleDebug'

三) 依赖管理

  1. 仓库
    预设配置仓库

 
 
  1. repositories {
  2.  mavenCentral()
  3.  jcenter()
  4.  mavenLocal()
  5. }

远程仓库

 
 
  1. repositories {
  2.  maven {
  3.      url "http://repo.acmecorp.com/maven2"
  4.      credentials {
  5.          username 'user'
  6.         password 'secretpassword'
  7.      }
  8.  }
  9.  ivy {
  10.      url "http://repo.acmecorp.com/repo"
  11.  }
  12. }

本地仓库

 
 
  1. repositories {
  2.  maven {
  3.      url "../repo"
  4.  }
  5. }

本地依赖
项目文件依赖

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

原生库结构与配置

 
 
  1. # 结构:
  2. app
  3.  ├── AndroidManifest.xml
  4.  └── jniLibs
  5.      ├── armeabi
  6.         └── nativelib.so
  7.      ├── armeabi-v7a
  8.         └── nativelib.so
  9.      ├── mips
  10.         └── nativelib.so
  11.      └── x86
  12.          └── nativelib.so
  13. # 配置:
  14. android {
  15.   sourceSets.main {
  16.       jniLibs.srcDir 'src/main/libs'
  17.   }
  18. }

Libray项目

 
 
  1. # 修改Android插件:
  2. apply plugin: 'com.android.library'
  3. # settings.gradle新增libray项目:
  4. include ':app', ':library'
  5. # app内引用library项目:
  6. dependencies {
  7.   compile project(':library')
  8. }

依赖概念

 
 
  1. <待续>

Android Studio内添加依赖

1440250527134852.png

四)构建变体

 
 
  1. <待续>

五)多模块构建管理

  1. 加速构建

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

六) 测试

  1. 单元测试
    使用JUnit

 
 
  1. # 结构:
  2. app
  3. └─── src
  4. ├─── main
  5.  ├─── java
  6.              └─── com.example.app
  7.          └───res
  8.      └─── test
  9.           └─── java
  10.                └─── com.example.app
  11. # 依赖:
  12. dependencies {
  13.  testCompile 'junit:junit:4.12'
  14. }

使用Robolectric

 
 
  1. # 依赖:
  2. apply plugin: 'org.robolectric'
  3.  dependencies {
  4.     compile fileTree(dir: 'libs', include: ['*.jar'])
  5.     compile 'com.android.support:appcompat-v7:22.2.0'
  6.     testCompile 'junit:junit:4.12'
  7.     testCompile'org.robolectric:robolectric:3.0'
  8.     testCompile'org.robolectric:shadows-support:3.0'
  9. }
  10. # Demo:
  11. @RunWith(RobolectricTestRunner.class)
  12. @Config(manifest = "app/src/main/AndroidManifest.xml", sdk = 18)
  13. public class MainActivityTest {
  14.  @Test
  15.  public void clickingButtonShouldChangeText() {
  16.      AppCompatActivity activity = Robolectric.buildActivity(MainActivity.class).create().get();
  17.      Button button = (Button) activity.findViewById(R.id.button);
  18.      TextView textView = (TextView) activity.findViewById(R.id.label);
  19.      button.performClick();
  20.      assertThat(textView.getText().toString(), equalTo(activity.getString(R.string.hello_robolectric)));
  21.  } 
  22. }

功能测试
使用Espresso

 
 
  1. <待续>

测试覆盖度
使用Jacoco

 
 
  1. <待续>

七)创建任务与插件

 
 
  1. <待续>

八)配置CI

 
 
  1. <待续>

九)自定义配置 - 进阶

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

 
 
  1. android {
  2.  buildTypes {
  3.      release {
  4.          minifyEnabled true
  5.          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  6.      }
  7.  } 
  8. }

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

 
 
  1. android {
  2.  buildTypes {
  3.      release {
  4.          minifyEnabled true
  5.          shrinkResources true
  6.      }
  7.  } 
  8. }

加速构建

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

1440257241123716.png

使用Profiling

 
 
  1. <待续>

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

 
 
  1. <待续>

忽略Lint

 
 
  1. android {
  2.   lintOptions {
  3.       abortOnError false
  4.   }
  5. }

使用Ant

 
 
  1. <待续>

app打包 - 进阶
分割apk

 
 
  1. android {
  2.   splits {
  3.       density {
  4.           enable true
  5.           exclude 'ldpi', 'mdpi'
  6.           compatibleScreens 'normal', 'large', 'xlarge'
  7.       }
  8.   } 
  9. }
  10. 生成结果:
  11. app-hdpi-release.apk
  12. app-universal-release.apk
  13. app-xhdpi-release.apk
  14. app-xxhdpi-release.apk
  15. app-xxxhdpi-release.apk
引用:
  • 《Gradle for Android》



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值