Android学习笔记|Chapter3:Gradle依赖管理

Chapter3:Gradle依赖管理
文章目录

  • Chapter3:Gradle依赖管理
    • 3.1 依赖仓库
    • 3.2 本地依赖
    • 3.3 依赖概念
    • 3.4 参考资料

3.1 依赖仓库
  • 手动依赖需要:找到依赖->下载JAR文件->拷贝到项目->引用,十分复杂。使用依赖仓库可以解决个问题,依赖仓库可以看做是文件的集合。Gradle默认情况下没有为项目定义任何依赖仓库,需要在 repositories代码块中添加(使用Android Studio会自动帮你添加上)。
    repositories { jcenter() }

  • Gradle 支持三种不同的依赖仓库:
    • 1.Maven
    • 2.Ivy
    • 3.静态文件或文件夹
  • 在构建执行的阶段,所需的依赖会从依赖仓库中获取出来。Gradle有本地缓存,一个特定版本的依赖只会在本地下载一次。
  • 依赖构成:group(创建该依赖库的组织的反向域名)、name(依赖库的唯一标识)、version(依赖库版本号)。
    dependencies { implementation 'com.jakewharton:butterknife:10.2.0' } //完整Groovy映射标识 dependencies { implementation group:'com.jakewharton', name:'butterknife',version:'10.2.0' }

    注意:对于一个依赖,唯一需要的字段是name。group、version为可选字段:添加group会使表述更清晰;添加verison,可以防止依赖库自动更新导致构建失败。
  • Gradle预定义了三个Maven仓库:JCenter、Maven Central、本地Maven仓库。
    repositories { jcenter() mavenCentral() mavenLocal() }

    补充:JCenter和Maven Central一般不同时使用,推荐JCenter。(JCenter是Maven Central的超集,支持HTTPS)。Gradle的本地缓存在 C:\Users\用户名\.gradle\caches\ 中。
  • 添加远程仓库:
    • maven:
      //http://maven.aliyun.com/nexus/content/groups/public/是阿里巴巴提供的境内仓库 repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} }

    • Ivy:
      repositories { ivy{ url 'http://XXXXXXXXXXXXX'} }

    • 需要凭证的情况:
      //建议使用单独的Gradle属性文件存储凭证 repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' credentials{ username 'user' password 'secretpassword' } } }

  • 添加本地仓库:
    repositories { maven{ url '../repo' } }

    //添加一个常用文件夹作为仓库 repositories { flatDir { dirs('aars', '../moduleName/aars') } }

3.2 本地依赖
  • 文件依赖:
    //单个文件 dependencies { implementation files('libs/example.jar') } //文件夹 dependencies { implementation fileTree('libs') } //添加过滤器,只依赖文件夹中的jar格式文件 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) }

  • 原生依赖库:
    .so 文件。Android插件支持原生依赖库,需要在模块层创建jniLibs文件夹,然后为每个平台创建子文件夹,将 .so文件放到适当的文件夹中。
    Android学习笔记|Chapter3:Gradle依赖管理
    文章图片

    //注意是 android代码块 android { sourceSets { main { jniLibs.srcDirs = ['src/main/libs'] } } }

  • 依赖项目:
    • 如果在项目中创建了一个模块作为依赖项目需要:1.在settings.gradle中添加该模块,2.在需要该依赖的模块的build.gradle中添加该依赖库。
      include ':app' , ':library'

      dependencies{ implementation project(path: ':library') }

  • 使用 .aar 文件:
    • 对于Android Library模块编译后,会在该模块的 build/output/arr/ 文件夹生成 .aar 文件。
    • 可以将**.arr**文件复制到一个文件夹中,将该文件夹作为依赖仓库。然后在需要的模块添加该依赖。
      repositories { flatDir { dirs('aars', '../moduleName/aars') } }

      dependencies{ implementation(name: 'aar包名', ext: 'aar') }

3.3 依赖概念
  • 依赖配置:如果你想使用某厂商的蓝牙SDK,为了能够编译该代码,你需要将SDK添加至编译类路径,但是你并不需要添加SDK到你的APK中,因为设备内置了SDK,这里就需要应用到依赖配置。Gradle提供的几种依赖项:
    • 注意:compile已经被弃用了!
    • 1.implementation:Gradle 会将依赖项添加到编译类路径,并将依赖项打包到编译输出。不过,当您的模块配置 implementation 依赖项时,会让 Gradle 了解您不希望该模块在编译时将该依赖项泄露给其他模块。也就是说,其他模块只有在运行时才能使用该依赖项。
    • 2.api:Gradle 会将依赖项添加到编译类路径和编译输出。当一个模块包含 api 依赖项时,会让 Gradle 了解该模块要以传递方式将该依赖项导出到其他模块,以便这些模块在运行时和编译时都可以使用该依赖项。
    • 3.compileOnly:Gradle 只会将依赖项添加到编译类路径(也就是说,不会将其添加到编译输出)。如果您创建 Android 模块时在编译期间需要相应依赖项,但它在运行时可有可无,此配置会很有用。
    • **4.runtimeOnly:**Gradle 只会将依赖项添加到编译输出,以便在运行时使用。也就是说,不会将其添加到编译类路径。
    • 5.annotationProcessor:要添加对作为注解处理器的库的依赖关系,您必须使用 annotationProcessor配置将其添加到注解处理器类路径。这是因为,使用此配置可以将编译类路径与注解处理器类路径分开,从而提高编译性能。
    • 6.lintChecks:使用此配置可以添加您希望 Gradle 在编译项目时执行的 Lint 检查。
    • 7.lintPublish:在 Android 库项目中使用此配置可以添加您希望 Gradle 编译成 lint.jar 文件并打包在 AAR 中的 Lint 检查。这会使得使用 AAR 的项目也应用这些 Lint 检查。如果您之前使用 lintChecks 依赖项配置将 Lint 检查包含在已发布的 AAR 中,则需要迁移这些依赖项以改用 lintPublish 配置。
    • 8.testImplementation、androidTestImplementation:添加用于测试的额外以案例库,在运行测试时会被使用。
    • 9.debugImplementation、releaseImplementation等debug/release前缀的:用于针对不同构建 variant 生成不同配置。(比如只想在Debug构建中使用的Logging框架。)
  • 语义化版本:将依赖添加到JCenter等依赖仓库是,约定遵守的一套版本化规则,称为语义化版本。语义化版本中,版本的数字格式一般为 major.minor.patch:
    • 当做不兼容的API变化时,major版本增加。
    • 当做相互兼容的方式添加功能时,minor版本增加。
    • 当修复一些bug时,patch版本增加。
  • 动态化版本:
    • 在一些情况下,你可能希望在每次构建你的应用或者依赖库是,都能够获取到最新的依赖。
      //获取最新的patch版本 implementation 'com.jakewharton:butterknife:10.2.+' //获取最新的minor版本 implementation 'com.jakewharton:butterknife:10.2+' //获取最新依赖库中的版本 implementation 'com.jakewharton:butterknife:+'

      【Android学习笔记|Chapter3:Gradle依赖管理】注意:获取最新版本时,可能因为依赖版本不稳定导致构建失败。
3.4 参考资料
  • Gradle For Android
  • 官方依赖项说明

    推荐阅读