Gradle依赖引入

Gradle依赖引入

关键词说明

自Android studio版本更新至3.0后,连带着com.android.tools.build:gradle 工具也升级到了3.0.0,在3.0.0中使用了最新的Gralde 4.0 里程碑版本作为gradle的编译版本,该版本gradle编译速度有所加速;

Gradle新老版本关键字

4.x+版本配置 已弃用配置
api compile
implement compile
compileOnly provided
runtimeOnly apk
testImplementation testCompile
androidTestImplementation androidTestCompile
debugImplementation debugCompile
releaseImplementation releaseCompile
  • api

与compile对应,功能完全一样,会添加依赖到编译路径,并且会将依赖打包到输出(aar或apk),与implementation不同,这个依赖可以传递,其他module无论在编译时和运行时都可以访问这个依赖的实现,也就是会泄漏一些不应该不使用的实现。举个例子,A依赖B,B依赖C,如果都是使用api配置的话,A可以直接使用C中的类(编译时和运行时),而如果是使用implementation配置的话,在编译时,A是无法访问C中的类的。

  • implementation

与compile对应,会添加依赖到编译路径,并且会将依赖打包到输出(aar或apk),但是在编译时不会将依赖的实现暴露给其他module,也就是只有在运行时其他module才能访问这个依赖中的实现;

简单的说,就是使用implementation指令的依赖不会传递;

使用这个配置,可以显著提升构建时间,因为它可以减少重新编译的module的数量。Google建议尽量使用这个依赖配置;

  • compileOnly

与provided对应,Gradle把依赖加到编译路径,编译时使用,不会打包到输出(aar或apk)。这可以减少输出的体积,在只在编译时需要,在运行时可选的情况,很有用

  • apk

只在生成apk的时候参与打包,编译时不会参与,很少用。

  • testImplementation

只在单元测试代码的编译以及最终打包测试apk时有效。

  • androidTestImplementation

只在Android相关单元测试代码的编译以及最终打包测试apk时有效。

  • debugImplementation

只在 debug 模式的编译和最终的 debug apk 打包时有效

  • releaseImplementation

仅仅针对 Release 模式的编译和最终的 Release apk 打包。


引入依赖基本方式

理论上gradle支持三种类型的引用,方式如下:

dependencies {
    
    implementation project(':projectABC')
    
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.0.2'
}

1. 本地项目依赖 --> module依赖

dependencies {
    implementation project(':projectABC')
}

这种依赖方式是直接依赖本地工程代码,比如这个 :projectABC 就是在整个工程项目配置的 settings.gradle 中进行include操作;
例如:

dependencies {
   include ':projectABC'
}

2. 本地二进制依赖 --> jar和so等文件

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

这种依赖方式是依赖工程中 libs 目录下的Jar等文件;

如果还想进行单独某个文件的引用

dependencies {
    implementation files('libs/aaa.jar', 'libs/bbb.jar')
    implementation files('x/y/z/ccc.jar')
}

注意:Gradle的路径是相对于build.gradle文件来读取的,所以上面是这样的相对路径

3.远端二进制依赖

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.2'
}

这是简洁写法,也可以进行完整写法,如:

dependencies {
    implementation  group: 'androidx.appcompat', name:'appcompat', version:'1.0.2'
}

引入依赖复杂方式

根据Task类型引入

有时候我们在引入的时候还需要考虑debug,release,test包的情况如

dependencies {
    testImplementation 'junit:junit:4.12'
    
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-2'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:2.0-beta-2'
}

排除引用

有时候为了解决引入的冲突,需要在引入远端包的同时排除这些包的某几个依赖

dependencies {
    implementation ('com.github.bumptech.glide:glide:4.9.0'){
        exclude group:'com.android.support', module: 'support-fragment'
        exclude group:'com.android.support', module: 'support-core-ui'
        exclude group:'com.android.support', module: 'support-compat'
        exclude group:'com.android.support', module: 'support-annotations'
    }
}

也可以查看官方资料

google 官方说明文档

你可能感兴趣的:(Gradle依赖引入)