为什么Android Studio强制使用Android支持库中的Androidx?

时间:2019-06-18 08:33:31

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

正在处理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岁以后就完成了支持库类,并且我知道如何将整个项目从支持库类迁移到AndroidX类。

我的问题是:

  • 是否有可能继续使用支持库类而不是转移到AndroidX类?

  • 如何解决此问题?

5 个答案:

答案 0 :(得分:5)

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

在android / build.gradle中添加:

<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:epsos="...

或在gradle.properties中添加:

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

答案 1 :(得分:2)

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

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

并使用

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

这将强制禁用androidx。

答案 2 :(得分:2)

根据Dan Lew

  

不赞成使用支持库工件,所有未来的开发都将进入AndroidX,因此不可避免地避免了这种迁移。不过,希望这些技巧将为您提供更清晰的过渡路径。

答案 3 :(得分:1)

  

是否有可能继续使用支持库类而不是转移到AndroidX类?

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

新的Firebase libraries和新的Google Play Libraries 需要androidx (请检查以下列表)

在短时间内,其他第三个库将使用这些依赖项。

  

如何解决此问题?

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

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

答案 4 :(得分:1)

您提到您正在使用本机。正如其他地方提到的那样,尽管您可以推迟使用AndroidX,但它永远无法避免。

特别是在react-native中,转换很困难,因为gradle除了在通过Android Studio进行原始重构期间不会喷射源文件,而且react-native会将其本机代码作为源文件发布。

现在,您可以简单地使用'jetifier'工具,并且在首次安装并运行它之后,在package.json的后安装中添加npx jetify,以实现跨节点模块安装/更新的持久化。

然后,您应该能够成功将应用程序转换为AndroidX,根据新的AndroidX库版本开始,但仍使用尚未转换的库。您将为react-native 0.60 which will be AndroidX

做更充分的准备

如果必须推迟AndroidX并使用react-native,至少应将react-native设置为0.59,还可以反向使用jetifier工具,将node_modules中的源引用从androidx修改为compat引用。