安卓库混合报错的终极解决方案

前言:

  1. 你还为各种混合库报错各种苦恼吗?
  2. 怎么才能彻底解决?

这篇文章针对mac系统,解决方案(因为下面骚操作windows不需要,windwos 执行gradle.bat xxx xxx xxx就可以)。 废话不多说,直接走正题。

首先解决问题肯定要知道问题根本原因。所以我们需要知道那些包冲突,一般Android Studio(简称:AS),编译日志消息能直接给我们提示出来。然后我们可以根据这些冲突包来定位。

解决方案:

实战项目中有很多module 怎么来定位?

方法1:

使用AS Gradle 插件 。这种方式简单,能遍历所有库,但是我们无法精准定位(因为实际项目中一个库包含很多不同的子库),大多情况也都是子库冲突。若你的项目中存在库与库之间冲突,该方法就能找到和解决。若是子库与子库冲突就无法解决了。

在这里插入图片描述

方法2:

找到AS插件管理,我们可以下载 Gradle View 这个插件,这个不仅能看到所有库,而且还能看到库和子库的依赖关系,缺点是 我TM的想看所有就需要一个一个点,不管你心情如何,对于当时的我急需要解决bug时,要疯掉的节奏。

在这里插入图片描述

方法3:

需要使用gradle命令 ,所以我们需要配置gradle环境变量。
gradle路径:在AS包内容,找不到请看第二种。
在这里插入图片描述

第二种路径:
在这里插入图片描述

可以执行 gradle --scan,弹出如下图,点击yes,有个地址。gradle

在这里插入图片描述

找到gradle的路径:

这是小编的位置 /Users/mac/.gradle/wrapper/dists/gradle-4.10.1-all/455itskqi2qtf0v2sja68alqd/gradle-4.10.1/bin/gradle

那么问题来了,gradle怎么配置?

我们都是到肯定是配置环境变量,vim ~/.bash_profile,由于我们mac电脑可能会装zsh命令窗口,所以 可以改这个:vim ~/.zshrc
在这里插入图片描述
添加如下配置,如图:
在这里插入图片描述
保存:
在这里插入图片描述
保存后需要刷新配置生效:source ~/.bash_profile 或者 source ~/.zshrc
然后我们输入:gradle -v
在这里插入图片描述
这样就表示配置成功了。

你以为完了?不存在的!!!

由于我们需要看库的依赖情况,需要需要用到 gradlew,于是我们打开AS的
在这里插入图片描述

此时你会发现这个提示:no such file or directory,有些网上说使用 ./gradlew,会提示你需要权限,然而此时你输入:sudo ./gradlew ,结果还是一样,我真TM醉了。然后小编又找了许多资料,输入:gradle wrapper 来刷新,这样就可以了。然后我们在输入:

./gradlew -q :app:dependencies --configuration compile
// app:dependencies 中的 app 是 module-name 可根据自己的需求更改
// --configuration compile  表示只使用编译期的配置,避免输出所有flavor组合的信息
也可以简化:./gradlew -q :app:dependencies 。 -q可要可不要。
这个要注意 app 这个模块名称哦。

在这里插入图片描述
输入: ./gradlew -q :mycrash:dependencies

在这里插入图片描述
由于:AS的输出日志有限制,所以我们可以在终端里输入:找到自己项目根目录:
在这里插入图片描述
在这里插入图片描述
把这些复制到你的文本里,就可以愉快的查找和分析了。

那么重点来了:

这里配置你自己的项目冲突包,如:androidx.lifecycle 和 androidx.databing 这两个包冲突 。在项目的gradle配置:

subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'androidx.lifecycle'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion '2.0.0'//这个版本号设置为你想要的版本
            }
            if (details.requested.group == 'androidx.databinding'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion '3.4.1'//这个版本号设置为你想要的版本
            }
        }
    }
}

在这里插入图片描述
在网上还有其他方法:但是我的只有这种配置好使。以上有问题欢迎提问哈!!!

猜你喜欢

转载自blog.csdn.net/houdada_/article/details/105847993
今日推荐