前言:
- 你还为各种混合库报错各种苦恼吗?
- 怎么才能彻底解决?
这篇文章针对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'//这个版本号设置为你想要的版本
}
}
}
}
在网上还有其他方法:但是我的只有这种配置好使。以上有问题欢迎提问哈!!!