今天和我一起来踩坑吧…

今天打包 React Native 项目的时候,突然出现一些奇怪的问题,我们先看看是什么样的问题吧

Android build 问题一步步踩坑-天真的小窝
java.lang.RuntimeException: Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
	is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
	Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at manifestMerger184721693300689277.xml:7:5-9:19 to override.

经过我翻译以及 Google 之后,并未发现有解决办法但是大概能知道好像是 Google 整理了混乱的 com.android.support 依赖之后推出了一个新的依赖库 androidx 而且这个新的依赖包会和以前的 support 冲突,我们再看回来我上面的报错似乎就是 android.support.v4.app.CoreComponentFactory 与 androidx.core.app.CoreComponentFactory 这个包冲突了,问题来了那么我到底怎么找这个冲突的引用呢?我们看看报错的包,发现好像是在 react-native-device-info 这个包编译的时候出的这个错误,那我们就看看它到底引用了啥依赖包导致冲突的呗… 打开它下面的 build.gradle 文件我很快就发现

Android build 问题一步步踩坑-天真的小窝

它只引用了两个包,两个都是引用最新版本的?我又想到我在 google 的时候看到的一句话,Google 很多包都大力更新了 androidx 的依赖,于是我就很怀疑这个 com.google.android.gms:play-services-gcm 不管了,我们先给它降降版本(因为它最新版本很可能用了 androidx 的依赖),手动设置个版本吧,它的版本好像在上面定义了一个变量 DEFAULT_GOOGLE_PLAY_SERVICES_VERSION 我们给它改一下试试,我 Google 之后发现好像有个 15.0.1 版本的,好了就改这个吧

Android build 问题一步步踩坑-天真的小窝

改好后重新 build 一下,神奇的发现居然 build 过了,那个红红的一片是说:“ 都 2018 了,你还在用这么辣鸡的接口,你可真是个小辣鸡,赶快更新不然不给你服务了,哇卡卡卡…… ”