React Native:迁移到AndroidX

7

今天我运行我的Android RN项目时,出现了以下错误:

Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: android.support.v4.app.INotificationSideChannel$Stub

我认为要解决这个问题,必须迁移到AndroidX。

我备份了我的项目并尝试在Android Studio中进行迁移,但没有成功。我也尝试在gradle.properties文件中手动设置。

android.enableJetifier=true
android.useAndroidX=true

在此之后,我尝试从我的app/build.gradle中删除支持的库,并将目标 targetSdkVersion 设置为28。
这些尝试导致了更多错误,尤其是这一个: Execution failed for task ':react-native-navigation:compileReactNative57_5DebugJavaWithJavac'. 我正在使用React Native 0.58.6与Wix Navigation V2。 非常感谢您的帮助。
2个回答

17

我昨天遇到了同样的问题,最终找到了解决方法。上述错误的原因是将Android项目迁移到AndroidX后,许多React Native库提供本机Java代码,但没有更新。我成功地使用这个库jetifier解决了这个问题,只需运行以下命令:

npm i --save-dev jetifier
npx jetify

但在我的情况下,仍然有一些库会导致一些问题,例如 react-native-fast-image。作为解决方法,我在 /node_modules/react-native-fast-image/android 中创建了一个 gradle.properties 文件,并为该模块停用了 AndroidX 和 Jetifier:

android.useAndroidX=false
android.enableJetifier=false

谢谢你的回答,Ahmed!我相信这会受到大家的赞赏。我找到了一个“预迁移到AndroidX”的解决方案,并将其添加给那些还没有迁移的人。 - jschuss

1
Ahmed发布的答案是一个很好的解决方案,一旦你迁移到AndroidX。在我的情况下,我还不想这样做,发现我的应用程序中只有一个库正在使用AndroidX,来自this线程。
简而言之,我的解决方案就是简单地yarn upgrade react-native-device-info@latest,重新构建后应用程序可以正常构建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接