程序类型已经存在:androidx.versionedparcelable.NonParcelField

Pri*_*mza 6 android react-native react-native-android

我在React Native Android项目上工作,但我被卡在这个错误上

> Task :app:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED

D8: Program type already present: androidx.versionedparcelable.NonParcelField    

FAILURE: Build failed with an exception.
Run Code Online (Sandbox Code Playgroud)

我试图在build.gradle中将multi dex更改为false

  defaultconfig {...
    multiDexEnabled false 
     ...}
Run Code Online (Sandbox Code Playgroud)

我不想迁移到androidx,我只想摆脱androidx&这个错误; 请帮助我,在此先感谢

Ahm*_*mam 6

根据我的研究,找不到简单的方法,或者我应该说一种从 androidx 退出的正确方法,要解决上述问题,只需将以下内容添加到您的gradle.properties

android.useAndroidX=true
android.enableJetifier=true
Run Code Online (Sandbox Code Playgroud)

这可能会导致另一个问题,例如

任务 ':react-native-navigation:compileReactNative57_5DebugJavaWithJavac' 执行失败

这个错误的原因,如果它发生了,在将你的 android 项目迁移到 androidx 之后,你的许多 react-native 库都提供了本地 Java 代码并且没有更新,手动更新它很乏味,我可以通过使用它来做到这一点库jetifier只需运行

npm i --save-dev jetifier
npx jetify 
Run Code Online (Sandbox Code Playgroud)

就我而言,仍有一些库导致了一些问题,例如我们 react-native-fast-image,作为一种解决方法,我在 /node_modules/react-native-fast-image/android 中创建了一个 gradle.properties 并停用了 AndroidX 和 Jetifier这个模块:

android.useAndroidX=false
android.enableJetifier=false
Run Code Online (Sandbox Code Playgroud)