android.support.v4.app.INotificationSideChannel$Stub$Proxy或Manifest merger failed with multiple...

本文介绍了解决Android项目中因导入第三方框架导致的兼容库冲突问题的方法,包括升级Gradle插件版本、迁移到AndroidX以及使用未迁移的第三方库版本。

前言

导入第三方框架或者开源库(我是导入GSYVideoPlayer)的时候,出现Manifest merger failed with multiple errors, see logs异常;

可能原因有:

1,V4或者V7包重复导致Manifest清单文件合并失败;

2,Androidx和v4或者v7不能共存

解决办法:

方法一:

升级AndroidStudio和project 的build.gradle中引入gradle插件版本

例如Androidstudio升级到3.4.1,gradle插件升级到classpath 'com.android.tools.build:gradle:3.4.1',当然高版本的AndroidStudio可能需要更高版本的Gradle

buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

有关gradle,gradle-wrapper,Android plugin for gradle之间的关系

Gradle: https://docs.gradle.org/current/userguide/userguide_single.html
Gradle Wrapper: https://docs.gradle.org/current/userguide/gradle_wrapper.html
Android Plugin for Gradle: https://developer.android.com/studio/build/index.html
 

Gradle:是一个构建系统,能够简化你的编译、打包、测试过程。

Gradle Wrapper:能帮我们搞定项目gradle的安装部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。

Android Plugin for Gradle:它是一堆适合Android开发的Gradle插件的集合,主要由Google的Android团队开发,Gradle不是Android的专属构建工具,但是有了Android Plugin for Gradle的话,你会发现使用Gradle构建Android项目尤其的简单

方法二:把项目迁移到androidx

1,在Terminal中输入gradlew processReleaseManifest --stacktrace可以查看具体报错

2,也可以在Androidstudio 中点开AndroidManifest的Merged Manifest右边有具体的报错信息和建议

3,根据上面提示在<application> 标签下添加了tools:replace="android:appComponentFactory"属性;但是依旧报错错误信息可能有以下几种,不同的操作可能导致的报错信息不一样,但是错误原因一样:

Program type already present: android.support.v4.app.INotificationSideChannel$Stub$Proxy

Program type already present: android.support.v4.os.ResultReceiver

Program type already present: xxxxxxxx 可能还会有其他衍生的错误信息

4,原因其实就是Androidx和V4或者V7包冲突不能共存,有冲突,在gradle.properties添加以下内容,从android support迁移到androidx(Google 2018 IO 大会推出了 Android新的扩展库 AndroidX,用于替换原来的 Android扩展库,将原来的android.support.**替换成androidx.**;只有包名和Maven工件名受到影响,原来的类名,方法名和字段名不会更改。):

android.enableJetifier=true //表示当前项目启用 androidx
android.useAndroidX=true //表示将依赖包也迁移到androidx 。如果取值为false,表示不迁移依赖包到androidx,但在使用依赖包中的内容时可能会出现问题,如果你的项目中没有使用任何三方依赖,那么,此项可以设置为false

5,把module下的build.gradle 中的所有关于V4和V7等support依赖删掉;

6,编译,这时Androidstuido 把之前引用过V4和V7的类全部以错误的形式列出来,如下图:找不到包的错误信息;把报错的地方导入的V4和V7包全部删掉,从新导入Androidx包即可;

以上是把项目中的V4和V7等库删掉,使用Androidx,既是迁移到Androidx;这样项目和第三方框架或者库都用同一个兼容库Androidx;这样就不会出现androidx和Android support库共存的问题了;Androidstudio升级到3.2以上版本,gradle升级到4.6以上支持一键迁移(Androidstudio 选择菜单上的ReFactor —>Migrate to AndroidX... 即可)

方法三:使用没有迁移到androidx之前的第三方库

有些第三方框架最新版已经迁移到了androidx,可以使用第三方框架之前的老版本,即:使用之前没有迁移到androidx的版本;这样项目和第三方框架或者库都用同一个兼容库V4和V7等库,这样就不会出现androidx和Android support库(主要是V4和V7等库)共存的问题了;

 附:

       在 Terminal 中输入gradlew :app:dependencies命令,查看第三方库的依赖树并找出引用了 androidx的库;

方法三

总结:

如果之前项目中没有使用Androidx,使用的时v4或者V7包;导入的第三方框架或者库中使用了Androidx,会导致以上错误,原因Androidx和v4或者V7等包冲突,也就是不能共存;


androidx概述

官方文档:https://developer.android.com/jetpack/androidx

项目迁移到androidx

使用Android Studio迁移现有项目

条件:Androidstudio版本3.2及以上版本;gradle插件classpath 'com.android.tools.build:gradle:3.2.0'   3.2及以上版本; Gradle version is 4.6及以上版本

1,首先在gradle.properties文件中设置以下两个Android Gradle插件标志。

android.enableJetifier=true //表示当前项目启用 androidx
android.useAndroidX=true //表示将依赖包也迁移到androidx 。如果取值为false,表示不迁移依赖包到androidx,但在使用依赖包中的内容时可能会出现问题,如果你的项目中没有使用任何三方依赖,那么,此项可以设置为false

2,使用Android Studio 3.2及更高版本,可以通过从菜单栏中选择Refactor> Migrate to AndroidX,快速迁移现有项目以使用AndroidX 。

3.3,勾选Backup project as Zip file 选项(即:在开始迁移之前备份项目的选项),点击Migrate备份项目代码,一路下一步;中间会涉及选择存储路径,选择备份项目的存储路径即可;

3,迁移到androidx 官方文档:https://developer.android.com/jetpack/androidx/migrate

 

<think>好的,用户遇到了Android项目中的重复类错误,具体是Duplicate class android.support.v4.app.INotificationSideChannel,出现在androidx.core:core和com.android.support:support-compat这两个库中。首先,我需要回忆一下Android支持库和AndroidX的关系。 AndroidX是Android Jetpack的一部分,用来替代旧的支持库。当项目中同时引用了AndroidX和支持库的依赖时,就容易出现类重复的问题,因为这两个库可能有相同的类路径但不同的实现。用户的问题明显是两者共存导致的冲突。 接下来,我需要确定解决方案的步骤。通常,这种情况需要将所有依赖迁移到AndroidX,者排除掉旧的支持库。不过,用户可能已经在使用AndroidX,但某个第三方库还在依赖旧的支持库,导致冲突。因此,首先应该检查项目的gradle.properties文件,确保启用了AndroidX和Jetifier。android.useAndroidX=true和android.enableJetifier=true这两个标记很重要,Jetifier会自动转换第三方库中的支持库引用为AndroidX。 然后,检查build.gradle文件中的依赖,查看是否有直接间接引入com.android.support的库。如果有,需要将其替换为对应的AndroidX版本。例如,com.android.support:support-compat对应的AndroidX库是androidx.core:core。如果无法替换,可以使用exclude语句排除冲突的模块。 另外,用户提到的错误中还提到了AAPT错误,可能与资源文件有关,可能需要检查资源文件中的格式是否正确,比如颜色值是否正确使用#符号,但主要问题还是重复类。 可能还需要检查依赖树,使用./gradlew app:dependencies命令查看哪些库引入了旧的支持库,然后逐一处理。如果第三方aar库导致问题,可能需要联系维护者更新到AndroidX,者自己使用Jetifier处理。 总结,解决方案应包括迁移到AndroidX、排除冲突依赖、处理第三方库等步骤。同时,用户可能需要清理和重建项目,确保所有转换生效。如果用户仍有问题,可能需要更详细的依赖分析配置调整。</think>### 解决Android重复类错误的分步指南 #### 1. **确认AndroidX迁移配置** 在项目根目录的 `gradle.properties` 文件中添加以下配置,启用AndroidX自动转换: ```properties android.useAndroidX=true android.enableJetifier=true ``` *此配置会将旧版支持库自动转换为AndroidX依赖[^1][^2]。* #### 2. **清理冲突依赖** 在 `build.gradle` 中通过 `exclude` 排除重复模块: ```groovy implementation("com.some.library") { exclude group: 'com.android.support', module: 'support-compat' } ``` *适用于无法升级到AndroidX的第三方库[^2]。* #### 3. **统一依赖版本** 检查所有模块的AndroidX版本一致性: ```groovy // 例如统一使用core-ktx 1.6.0 implementation 'androidx.core:core-ktx:1.6.0' ``` *版本差异可能导致隐式依赖旧版支持库。* #### 4. **处理AAPT资源错误** 在 `res/values` 中检查颜色定义格式: ```xml <!-- 错误示例 --> <color name="black">000000</color> <!-- 正确格式 --> <color name="black">#000000</color> ``` *资源格式错误可能引发附带报错[^3]。* #### 5. **强制依赖解析(可选)** 在 `build.gradle` 中添加: ```groovy configurations.all { resolutionStrategy { force 'androidx.core:core:1.6.0' } } ``` *用于覆盖旧版本依赖。* #### 6. **验证解决方案** 执行以下命令清理并重新构建: ```bash ./gradlew clean assembleDebug ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ang_qq_252390816

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值