Привет, я разрабатываю SDK, и когда я добавляю этот SDK в проект приложения, я получаю следующую ошибку:
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.1] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add 'tools:replace = "android:appComponentFactory"' to <application> element at AndroidManifest.xml:22:5-125:19 to override.
build.gradle следующие
Сборка приложения.gradle
dependencies {
implementation project(':sdkA')
implementation project(':sdkB')
implementation 'org.webrtc:google-webrtc:1.0.28032'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:preference-v7:28.0.0'
implementation 'com.android.support:preference-v14:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:gridlayout-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'io.michaelrocks:libphonenumber-android:8.4.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.google.android:flexbox:1.0.0'
implementation 'com.github.woxthebox:draglistview:1.6.3'
implementation 'com.balysv:material-ripple:1.0.2'
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.16'
implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
transitive = true
}
// Google Lifecycle Components
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
}
build.gradle sdkA
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'org.webrtc:google-webrtc:1.0.28032'
implementation('io.socket:socket.io-client:1.0.0') {
exclude group: 'org.json', module: 'json'
}
implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
transitive = true
}
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
// Google Lifecycle Components
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
implementation 'androidx.appcompat:appcompat:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
build.gradle из sdkB
dependencies {
implementation "com.android.support:appcompat-v7:27.1.1"
implementation "com.android.support:recyclerview-v7:27.1.1"
}
Как это решить?
Спасибо
Вы, вероятно, захотите проверить это: stackoverflow.com/questions/56696860/…
Вы используете в своем приложении как библиотеки поддержки, так и библиотеки androidx. Перенесите свой проект на androidx.




Попробуйте применить предложение, добавив
tools:replace = "android:appComponentFactory"
к тегу приложения
Хорошо, я сам решал эту проблему в течение последнего дня или около того. кошмар.
но сейчас он работает, по крайней мере, для проекта, над которым я работал, который довольно большой и с множеством дополнительных зависимостей от Android.
Посмотрите этот выпуск, в котором Майк Харди очень помог. https://github.com/mikehardy/jetifier/issues/27
Я бы рекомендовал избегать AndroidX, пока не выйдет версия 0.60.0.
ИСТОЧНИК ПРОБЛЕМЫ
источником проблемы для большинства из нас является селектор диапазона + в зависимостях gradle.
как показано здесь в качестве примера в react-native-google-analytics-bridge:
compile "com.google.android.gms:play-services-analytics:${safeExtGet('googlePlayServicesVersion', '+')}"
compile "com.google.android.gms:play-services-tagmanager-v4-impl:${safeExtGet('googlePlayServicesVersion', '+')}"
для большинства из нас мы не устанавливаем значение googlePlayServicesVersion на верхнем уровне android/build.gradle
поэтому мы хотим указать googlePlayServicesVersion = "16.+" +, потому что доступны различные другие пакеты услуг Google, и они не все имеют один и тот же номер версии. это захватит 16.X.X и не пойдет выше. 17.X.X содержит дополнительные вопросы.
И мы также хотим установить для supportLibVersion значение 28.0.0, которое используется библиотеками поддержки Android: com.android.support:appcompat-v7 наиболее распространенный.
РЕШЕНИЕ
android/build.gradle
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 21
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
googlePlayServicesVersion = "16.+"
}
...
AndroidManifest.xml
Верхняя строка:
<manifest
xmlns:tools = "http://schemas.android.com/tools"
тег приложения:
tools:replace = "android:appComponentFactory"
android:appComponentFactory = "android.support.v4.app.CoreComponentFactory"
убедитесь, что ваши свойства gradle-wrapper.properties 4.10.1
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
и, наконец, убедитесь, что вы не используете Android X.
град.свойства:
android.enableJetifier=false
android.useAndroidX=false
Дополнительный шаг (вам может понадобиться это)
если это не сработает, попробуйте также добавить jetifier. Мы будем использовать это, чтобы запустить ваши node_modules и убедиться, что все использует библиотеки, отличные от androidx.
npm i jetifier --save-dev или yarn add jetifier --dev
затем добавьте в постустановочный скрипт
"scripts": {
"postinstall": "jetify -r"
}
Опубликуйте свой файл build.gradle