Chapter3:Gradle依赖管理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_33334951/article/details/102757260

Chapter3:Gradle依赖管理

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仓库:JCenterMaven Central本地Maven仓库

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

    补充:JCenter和Maven Central一般不同时使用,推荐JCenter。(JCenter是Maven Central的超集,支持HTTPS)。Gradle的本地缓存在 C:\Users\用户名\.gradle\caches\ 中。

  • 添加远程仓库

    • maven

      扫描二维码关注公众号,回复: 7622978 查看本文章
      //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代码块
    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:+'
      

      注意:获取最新版本时,可能因为依赖版本不稳定导致构建失败。

3.4 参考资料

猜你喜欢

转载自blog.csdn.net/qq_33334951/article/details/102757260