Android Gradle依赖管理、去除重复依赖、忽略

  • 常用依赖
	//1.直接依赖第三方开源库,一般是托管在 jitpack 或者 jcenter
	implementation 'com.google.code.gson:gson:2.2.4'
	implementation 'com.android.support:cardview-v7:25.0.0'
	implementation 'com.android.support:design:25.0.0'
	//2.直接依赖本地的aar文件,一般是在libs目录下
	implementation(name: 'LiteAVSDK_Professional_5.1.5293', ext: 'aar')
	//3.直接依赖本地的jar文件
	 implementation files('libs/bdasr_V3_20170801_60da871.jar')
	//4.依赖本地的module
	implementation project(':wavelibrary')
	implementation project(':android-ffmpeg')

  • 库工程依赖传递问题

1、依赖常用的基本类型有:provided和compile,provided 只在编译生效不会打包到 apk 或 aar 中;compile 是会打包到 apk或 aar 中的(如果是库工程的话有特殊情况,参考下面3).
2、app 工程的当前(compile+) 的依赖都会打包到 app 中
3、库工程中:
  1) jar 包:远程依赖不会打包到 aar 中;本地依赖会;
  2) aar:远程和本地都不不会打包到 aar中.
  3) 如果你要提供你的库工程的 aar 给他人,你需要同时告诉他这个库工程依赖的其他aar 和远程 jar包(因为他们没有打包到 aar 中)
  4) 如果通过工程依赖(即compile project(’:lib’)的方式), 依赖是可以传递的,所以不需要在声明一次依赖.

  • 去掉重复依赖

1.第三方库中同样使用了implementation或者compile依赖相同的库

    implementation('com.allenliu.versionchecklib:library:2.0.5') {
        exclude group: 'com.android.support', module: 'appcompat-v7'
        exclude group: 'com.android.support.constraint', module: 'constraint-layout'
        exclude group: 'org.greenrobot', module: 'eventbus'
        exclude group: 'com.squareup.okhttp3', module: 'okhttp'
    }

2.在不同的库中出现相同的so文件
pickFirst只会打包第一个遇到的冲突的so,merge(碰到冲突会合并)和exclude(直接排除匹配到的文件,不建议使用)

 packagingOptions {
            pickFirst 'lib/arm64-v8a/libgnustl_shared.so'
            pickFirst 'lib/armeabi-v7a/libgnustl_shared.so'
        }

遇到这种错误可以通过上面方法尝试解决
Error:Execution failed for task ‘:app:transformNativeLibsWithMergeJniLibsForDebug’. > More than one

Manifest merger failed with multiple errors, see logs

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Android GradleAndroid 开发中使用的构建工具,用于管理项目中的依赖库和构建过程。在 Android Gradle 中,可以通过在 build.gradle 文件中声明依赖管理项目中所需的第三方库。 首先,要避免重复依赖,可以通过以下几种方式来解决: 1. 使用 implementation 替代 compile: 在构建文件中,使用 implementation 来声明依赖而不是 compile。implementation 会自动解决版本冲突,并排除掉传递性依赖中的冗余依赖。 2. 使用 exclude 指令: 如果遇到了冗余的依赖,可以使用 exclude 指令来排除掉特定的依赖项。在依赖声明中添加 exclude 指令,指定要排除的库名称和组织。 3. 使用统一的依赖版本: 可以在项目的 root build.gradle 文件中定义一个变量来统一管理依赖的版本,然后在所有的 module 的 build.gradle 文件中引用这个变量。 另外,如果希望忽略某个依赖,可以使用以下方式: 1. 使用 implementation 进行依赖声明: 如果在某个 module 的 build.gradle 文件中使用 implementation 来声明依赖,那么该依赖将不会传递给该 module 的依赖项。 2. 使用 exclude group 指令: 如果希望忽略某个库的所有依赖,可以在依赖声明中使用 exclude group 指令来排除掉某个组织的所有依赖。 总结来说,Android Gradle 提供了一些方法来管理和解决依赖冲突问题,包括使用 implementation 替代 compile,使用 exclude 指令去除重复依赖,使用统一的依赖版本,以及使用 implementation 和 exclude group 进行依赖忽略。通过合理地使用这些方式,可以有效地管理依赖库并避免不必要的冲突和重复依赖
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值