【问题标题】:Why Android Studio is forcing to use Androidx from Android support library?为什么 Android Studio 强制使用 Android 支持库中的 Androidx?
【发布时间】:2019-10-31 20:23:48
【问题描述】:

正在处理 React Native 项目,但突然停止工作并开始出现错误:

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 AndroidManifest.xml:7:5-117 to override.

我知道 Google 在 28 岁之后已经完成了 Support Library 类,并且我知道如何将整个项目从 Support Library 类迁移到 AndroidX 类。

我的问题是:

  • 是否有任何可能的方法来继续使用支持库类而不是转移到 AndroidX 类?

  • 如何解决此问题?

【问题讨论】:

  • 面对同样的问题,谷歌的迁移指南也对我不起作用。你能以某种方式解决编译错误吗?
  • 是的,我刚刚在我的代码中找到了罪魁祸首 3rd 方库,它使用了 Androidx 支持。如果我删除它。我的代码开始工作。我认为@pramod_m ans 在某种程度上是正确的,但这种行为并不好。我花了很多时间来调试这个问题。
  • 您是如何发现哪个第三方库正在使用 Androidx 的?目前处于同样的情况。
  • @ChristophGöttert 我和你有同样的问题,但是有一种更简单的方法来限制 play-services-gcm 的版本,添加 googlePlayServicesVersion = "16.1.0" 或任何你正在使用的版本到你的 build.gradle .无需 fork 库!
  • 我遇到了同样的问题并用这个解决了它:stackoverflow.com/a/56648987/8306924

标签: android react-native android-support-library androidx


【解决方案1】:

您可以锁定您的 googleservices 和 firebase 版本以避免 androidX。

在 android/build.gradle 添加:

buildscript {
  ...
  ext {
    // Lock down googlePlayServicesVersion
    googlePlayServicesVersion = "16.1.0"
    firebaseVersion = "17.6.0"
  }
}

或者在 gradle.properties 中添加:

googlePlayServicesVersion=16.1.0
firebaseVersion=17.6.0

【讨论】:

  • 我应该在哪里添加这个?内部依赖项?
  • 内部构建脚本@chenop
  • 这假设 OP 正在使用这些库中的一个或两个 - 许多项目没有。根据其他答案更新 gradle.properties 文件似乎在这些情况下有效。
【解决方案2】:

可能在此处发布您的应用级 gradle 文件。理想情况下,如果您使用的是其他依赖项,即更新/最新的依赖项,那么您会收到此错误。

如果任何依赖项是最新/更新的,请通过检查其 github 的更改日志将其降级到较低版本。对我来说,罪魁祸首是条纹版本,它在内部使用 androidx 并出现此错误。我降级了它并繁荣!没了:)

并且还使用

禁用 gradle.properties 文件中的 androidx
android.useAndroidX=false
android.enableJetifier=false

这会强制禁用 androidx。

【讨论】:

  • 是的,我同意这是个麻烦,因为我有许多模块(依赖项),我已经从 node_modules 文件夹与我的根项目链接。邓知道什么是最好的! ://
  • 检查您的应用级 build.gradle 文件
  • 根据文档 useAndroidX & enableJetifier 默认为:false 所以不是这样
  • 在我的情况下,我尝试./gradlew :[module]:dependencies | grep "[androidx libs]" 来查找我当前的第三方库中哪个具有传递/依赖于androidx 库,然后强制它使用android-support 版本或@ 987654326@它。
  • 经过很多挫折后,这解决了我的问题 - 谢谢@pramod_m
【解决方案3】:

来自Dan Lew

支持库工件已被弃用,所有未来的开发都将进入 AndroidX,因此无法避免这种迁移。不过,希望这些技巧能够为您提供更清晰的过渡路径。

【讨论】:

    【解决方案4】:

    你提到你正在使用 react-native。正如其他地方所提到的,尽管您可以推迟 AndroidX,但您无法永远避免它。

    在 react-native 中尤其难以转换,因为 gradle 不会喷射源文件,除非在通过 Android Studio 进行原始重构期间,并且 react-native 将其本机代码作为源文件提供。

    现在您可以简单地使用 'jetifier' 工具,在安装并运行它后第一次在您的 package.json 的 postinstall 中添加 npx jetify 以实现跨节点模块安装/更新的持续喷射。

    然后您应该能够成功地将您的应用转换为 AndroidX,开始依赖于新的 AndroidX 库版本,但仍然使用尚未转换的库。你会为react-native 0.60 which will be AndroidX做好准备

    如果您必须推迟 AndroidX 并使用 react-native,至少对于 react-native 0.59,您也可以反向使用 jetifier 工具将 node_modules 中的源引用从 androidx 修改为兼容引用。

    【讨论】:

    • 请注意,jetifier 已作为默认步骤包含在 react-native start 中,因此,如果这是您工作流程的正常部分,您现在实际上会默认获得此行为,您应该能够几乎无所畏惧地升级到 AndroidX 依赖项。干杯
    【解决方案5】:

    有没有办法继续使用 Support Library 类而不是转移到 AndroidX 类?

    是的,这是可能的,但您只能推迟此活动。
    你无法避免。

    新的Firebase libraries 和新的Google Play Libraries 需要androidx(查看下面的列表)

    很快其他第三方库将使用这些依赖项。

    如何解决这个问题?

    您只能使用支持库 v.28 或更低版本的最新版本的 firebase/google play services/第三库。

    这里是 firebase 和 google play 服务库的列表,它们开始使用 androidx 的依赖项。

    Firebase:

    Ads version 18.0.0
    Analytics version 17.0.0
    App Indexing version 19.0.0
    Authentication version 18.0.0
    Cloud Firestore version 20.0.0
    Cloud Firestore-ktx version 20.0.0
    Cloud Functions (client) version 18.0.0
    Cloud Messaging version 19.0.0
    Cloud Storage version 18.0.0
    Dynamic Links version 18.0.0
    In-App Messaging version 18.0.0
    In-App Messaging Display version 18.0.0
    Instance IDs version 19.0.0
    ML Kit Common version 20.0.0
    ML Kit Vision version 21.0.0
    ML Kit Image Labeling Model version 18.0.0
    ML Kit Face Detection Model version 18.0.0
    ML Kit Object Detection and Tracking Model version 17.0.0
    ML Kit Vision AutoML version 17.0.0
    ML Kit Natural Language version 20.0.0
    ML Kit Language Identification Model version 20.0.0
    ML Kit Smart Reply Model version 20.0.0
    ML Kit Translate Model version 20.0.0
    ML Kit Model Interpreter version 20.0.0
    Realtime Database version 18.0.0
    Performance Monitoring version 18.0.0
    Remote Config version 18.0.0
    A/B Testing version 18.0.0
    

    播放服务库:

    com.google.android.datatransport:transport-api:2.0.0
    com.google.android.datatransport:transport-backend-cct:2.0.0
    com.google.android.datatransport:transport-runtime:2.0.0
    com.google.android.gms:play-services-ads:18.0.0
    com.google.android.gms:play-services-ads-identifier:17.0.0
    com.google.android.gms:play-services-ads-lite:18.0.0
    com.google.android.gms:play-services-afs-native:17.0.0
    com.google.android.gms:play-services-analytics:17.0.0
    com.google.android.gms:play-services-analytics-impl:17.0.0
    com.google.android.gms:play-services-appinvite:18.0.0
    com.google.android.gms:play-services-audience:17.0.0
    com.google.android.gms:play-services-auth:17.0.0
    com.google.android.gms:play-services-auth-api-phone:17.0.0
    com.google.android.gms:play-services-awareness:17.0.0
    com.google.android.gms:play-services-base:17.0.0
    com.google.android.gms:play-services-basement:17.0.0
    com.google.android.gms:play-services-cast:17.0.0
    com.google.android.gms:play-services-cast-framework:17.0.0
    com.google.android.gms:play-services-clearcut:17.0.0
    com.google.android.gms:play-services-cronet:17.0.0
    com.google.android.gms:play-services-drive:17.0.0
    com.google.android.gms:play-services-fido:18.0.0
    com.google.android.gms:play-services-fitness:17.0.0
    com.google.android.gms:play-services-flags:17.0.0
    com.google.android.gms:play-services-games:18.0.0
    com.google.android.gms:play-services-gass:18.0.0
    com.google.android.gms:play-services-gcm:17.0.0
    com.google.android.gms:play-services-identity:17.0.0
    com.google.android.gms:play-services-iid:17.0.0
    com.google.android.gms:play-services-instantapps:17.0.0
    com.google.android.gms:play-services-location:17.0.0
    com.google.android.gms:play-services-maps:17.0.0
    com.google.android.gms:play-services-measurement:17.0.0
    com.google.android.gms:play-services-measurement-api:17.0.0
    com.google.android.gms:play-services-measurement-impl:17.0.0
    com.google.android.gms:play-services-measurement-sdk:17.0.0
    com.google.android.gms:play-services-measurement-sdk-api:17.0.0
    com.google.android.gms:play-services-nearby:17.0.0
    com.google.android.gms:play-services-oss-licenses:17.0.0
    com.google.android.gms:play-services-panorama:17.0.0
    com.google.android.gms:play-services-phenotype:17.0.0
    com.google.android.gms:play-services-places:17.0.0
    com.google.android.gms:play-services-places-placereport:17.0.0
    com.google.android.gms:play-services-plus:17.0.0
    com.google.android.gms:play-services-safetynet:17.0.0
    com.google.android.gms:play-services-stats:17.0.0
    com.google.android.gms:play-services-tagmanager:17.0.0
    com.google.android.gms:play-services-tagmanager-api:17.0.0
    com.google.android.gms:play-services-tagmanager-v4-impl:17.0.0
    com.google.android.gms:play-services-tasks:17.0.0
    com.google.android.gms:play-services-vision:18.0.0
    com.google.android.gms:play-services-vision-common:18.0.0
    com.google.android.gms:play-services-vision-image-label:18.0.0
    com.google.android.gms:play-services-wallet:17.0.0
    com.google.android.gms:play-services-wearable:17.0.0
    

    【讨论】:

    • 旧的 Android 设备怎么样?喜欢 v4.x
    • Androidx 迁移与更改所需的 min sdk 无关。显然库改进了,min sdk 迟早会增加。无论如何,4.x 是一个相当大的范围,我们谈论的是2012-2013(6 年前!)和当前的distribution <10%
    • 此答案中提到的版本的服务已经可以与 androidX 一起使用。如果需要 pre-androidX,请尝试 16.0.0。在我的案例中工作
    • @DmitriyPavlukhin 我在回答中写道:新的 Firebase 库和新的 Google Play 库需要 androidx(查看下面的列表)。报告的所有版本都适用于 androidx。无论如何,感谢您的反馈,我会尝试更好地强调这一点。
    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多