《Gradle for Android》笔记(3):依赖管理

cover

  • Gradle支持递归依赖(transitive dependencies)

依赖源

  • 基本添加依赖的方法,repositories块中添加依赖源。
  • 添加依赖

    1
    2
    3
    dependencies {
    compile ‘com.google.code.gson:gson:2.3
    }
  • 唯一标识依赖的三要素:组(group)、名称(name)、版本(version)

  • 添加依赖的完整写法
    1
    2
    3
    dependencies {
    compile group: ‘com.google.code.gson’, name: ‘gson’, version:2.3
    }
  • Gradle 内置依赖源:mavenCentral()jcenter()mavenLocal()
  • Gradle在其执行/Execution步骤(第三个步骤)下载依赖。
  • JCenter是MavenCentral的超集,并且支持https。
  • Maven仓库缓存位置~/.m2
  • 私有源用法。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    repositories {
    maven {
    url "http://repo.acmecorp.com/maven2"
    // 对于需要验证的服务器
    // 账号和密码放到单独的properties文件中已确保安全。
    credentials {
    username 'user'
    password 'password'
    }
    }
    }
  • 本地源,即把url换成本地路径,支持相对路径和绝对路径。

    1
    2
    3
    4
    5
    repositories {
    maven {
    url "../repo"
    }
    }
  • Android SDK中的support library,就存在于ANDROID_SDK/extras/android/m2repository目录下。

  • 将普通目录作为依赖源的方法。
    1
    2
    3
    4
    5
    repositories {
    flatDir {
    dirs 'aars'
    }
    }

本地依赖

  • 依赖本地JAR文件

    1
    2
    3
    dependencies {
    compile files('libs/domoarigato.jar')
    }
  • 从目录添加依赖

    1
    2
    3
    dependencies {
    compile fileTree('libs')
    }
  • 添加过滤器(Android默认)

    1
    2
    3
    4
    dependencies {
    // 参数顺序是无关的
    compile fileTree(dirs 'libs', include: '[*.jar]')
    }
  • 依赖Native库。默认Android插件会依赖jniLibs目录。可以修改成libs目录。

  • 方法一:

    1
    2
    3
    4
    5
    sourceSets {
    main {
    jniLibs.srcDirs = ['libs']
    }
    }
  • 方法二:

    1
    2
    3
    sourceSets.main {
    jniLIbs.srcDir 'src/main/libs'
    }

  • Android库插件apply plugin ‘com.android.library’
  • 添加库依赖的方式。
    • 将库源码添加到项目中,作为Module。
    • 生成aar文件。
  • Module依赖。compile project(‘:library’)

    以上添加依赖的方式,是将library这个Module的输出,添加到依赖Project的classpath。

  • Android库插件在build之后,会输出.aar文件到build/output/aar/目录。
  • 使用aar文件。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 顶层buld.gradle
    repositories {
    flatDir {
    dirs 'aars'
    }
    }

    // 项目build.gradle
    dependencies {
    // 依赖以aar作为后缀的libraryname名字的library
    // (从顶层配置的目录中查找。)
    compile (name:'libraryname', ext:'aar')
    }

依赖概念

  • 依赖配置(Configurations):有些依赖,比如SDK,是由运行应用的设备提供的,比如Android SDK,或者其他SDK。这些依赖并不需要编译打包进Apk文件,只是将其添加到classpath中。而其他依赖比如库,需要打包进Apk文件,这些工作由依赖配置完成。
  • Gradle会将依赖通过配置名称分组到文件集合。Android标准配置有:
    • compile:将所有依赖添加到classpath,并编译到生成的Apk中。
    • apk:只添加到Apk包中,但是不会添加到classpath。只接受JAR依赖。
    • provided:和apk配置相反,并且自身依赖也不会被打包进Apk。只接受JAR依赖。
    • testCompile:测试Apk依赖。
    • androidTestCompile:测试Apk依赖。
  • 依赖配置支持构建变体,比如debugCompilereleaseProvided

语义化的版本号

  • 版本是依赖管理的重要方面,所有JCenter中的依赖,都假设按照语义化定义版本,依照以下格式:主要.次要.补丁
  • 版本号规范
    • 主版本号升级表示API有不兼容的修改。
    • 次版本号升级表示在向后兼容的前提下添加了功能。
    • 补丁版本号用作bug修复。
  • 使用+标记动态版本,将自动获取最新版本。
    1
    2
    3
    4
    5
    6
    7
    8
    dependencies { 
    // 自动获取patch版本
    compile 'com.android.support:support-v4:22.2.+'
    // 自动获取次版本号大于2的版本
    compile 'com.android.support:appcompat-v7:22.2+'
    // 自动获取任何最新release版本。
    compile 'com.android.support:recyclerview-v7:+'
    }

其他文章