web-dev-qa-db-ja.com

Android MaterialとappcompatのManifestの合併に失敗しました

私は次の学年があります

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.Android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.Android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.Android.support.test:runner:1.0.2'
    androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.Android.material:material:1.0.0-rc01'
}

しかし私がアプリを構築したいとき、私は次のログを得ます:

Manifest merger failed : Attribute application@appComponentFactory value=(Android.support.v4.app.CoreComponentFactory) from [com.Android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="Android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.

オーケー!マニフェストに行き、それをする:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    package="ru.chopcode.myapplication">

    <application
        tools:replace="Android:appComponentFactory"
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:roundIcon="@mipmap/ic_launcher_round"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme">
    </application>

</manifest>

それから私は私のLogcatのこのエラーを得ます:

Manifest merger failed with multiple errors, see logs that I have Linked with it

依存関係の最初と最後の行の "rc01"を "alpha1"に変更するだけです。

6
Anubhav Gupta

私は同様の問題を抱えていました。 gradle.propertiesファイルに2行追加しました。

Android.useAndroidX=true
Android.enableJetifier=true

この2行は、Googleのファイルとサードパーティの依存関係との間の私の依存関係の競合を自動的に解決しました。フォローするリンクは次のとおりです。 https://developer.Android.com/topic/libraries/support-library/androidx-overview#new-project

128
Abir Hasan

Kotlin-KTXライブラリを自分のプロジェクトに追加しようとしたときに同じエラーが発生しました。

AndroidXへの移行を試みましたが、問題は解決しました!

Refactor/Migrate to AndroidX

62
Mete

失敗の理由

AndroidX の一部である資料ライブラリーを使用しています。あなたがAndroidXを知らないならば、 この答え - を通過してください。

1つのアプリはAndroidXまたは古いAndroid Supportライブラリを使用する必要があります。あなたがこの問題に直面したのはそのためです。

例えば ​​-

あなたのgradleでは、あなたは使っています

  • com.Android.support:appcompat-v7(昔の一部 - Androidサポートライブラリ - )
  • com.google.Android.material:material(AndroidXの一部)(com.Android.support:designのAndroidXビルド成果物)

溶液

そのため、解決策はAndroidXか古いSupport Libraryを使うことです。 Androidはバージョン28.0.0以降のサポートライブラリを更新しないため、AndroidXを使用することをお勧めします。 Support Libraryの release notes を参照してください。

AndroidXに移行してください。 ここ はAndroidXに移行するための私の詳細な回答です。私はその答えから必要なステップをここに置いています。

移行する前に、プロジェクトをバックアップすることを強くお勧めします。

既存プロジェクト

  • Android Studio>リファクタメニュー> AndroidXに移行...
  • それは分析して、下部にRefractorウィンドウを開くでしょう。行われる変更を受け入れます。

image

新しいプロジェクト

これらのフラグをあなたのgradle.propertiesに入れてください

Android.enableJetifier=true
Android.useAndroidX=true

@ 同じAndroidXパッケージのライブラリマッピングを確認してください

チェック@ AndroidXへの移行の公式ページ

Jetifierとは何ですか?

35
Khemraj

シンプルなソリューション-AndroidXへの移行

gradle.propertiesで、以下の2つのスクリプトを追加します

Android.useAndroidX=true
Android.enableJetifier=true

理由は何でしたか↓

AndroidXのすべてのパッケージは、文字列androidxで始まる一貫した名前空間に存在します。サポートライブラリパッケージは、対応するandroidx。*パッケージにマップされています。すべての古いクラスとビルドアーティファクトの新しいクラスへの完全なマッピングについては、パッケージリファクタリングページを参照してください。

パッケージリファクタリングページをご覧ください

22
E J Chathuranga

Android P以降、サポートライブラリは AndroidX に移動しました。

このページからあなたの libsのためのリファクタリングをしてください

https://developer.Android.com/topic/libraries/support-library/refactor

10
mughil

私の場合、これは完璧に動作しています。マニフェストファイル内に2行以下のコードを追加しました。

tools:replace="Android:appComponentFactory"
Android:appComponentFactory="whateverString"

クレジットは この答えに /.

Manifest file Example

9

Android.support依存関係を削除するだけです

    implementation 'com.Android.support:appcompat-v7:28.0.0-rc01'

材料ガイドラインからの引用

まだ新しいandroidxおよびcom.google.Android.materialパッケージに切り替える必要がない場合は、com.Android.support:design:28.0.0-alpha3依存関係を通じてMaterial Componentsを使用できます。

注:アプリでcom.Android.supportとcom.google.Android.dependenciesを同時に使用しないでください。

この依存関係を削除するだけで問題なく動作します

    implementation 'com.Android.support:appcompat-v7:28.0.0-rc01'

これは完全な依存関係の例です。

    dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       implementation 'com.google.Android.material:material:1.0.0-beta01'
       implementation 'com.Android.support.constraint:constraint-layout:1.1.2'
       testImplementation 'junit:junit:4.12'
       androidTestImplementation 'com.Android.support.test:runner:1.0.2'
       androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
   }
8
Arfat Binkileb

これらの2行のコードをマニフェストファイルに追加するだけです

tools:replace="Android:appComponentFactory"
Android:appComponentFactory="whateverString"
7
Manoj Alwis

最後に、Android/build.gradleファイルに2行追加することで、すばやく簡単な解決策を見つけました。

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

この100%正しいことに従ってください。

5
Manoj Alwis

次の手順を実行します:

  • リファクタリングしてAndroidXに移行をクリック
  • リファクタリングをクリック
4
BloodLoss

トップメニューの[リファクタリング]オプションに移動するだけでした。

次に、「AndroidXに移行」を選択します

同意して、プロジェクトをZipファイルとして保存します。

問題が発生しないように、Android St​​udioとGradleを更新してください。

3
d4rkcon

androidxを使いたくない場合のみ

だから私の場合私はandroidxを使用していたライブラリを使用していますが、私はそのライブラリのバージョンをダウングレードしたとき問題が解決されたのでandroidxを使用していません。

私の場合:

implementation 'com.github.turing-tech:MaterialScrollBar:13.+'

上記のライブラリは問題13になります+は自動的にandroidxを使用してライブラリの新しいバージョンを取得します。だから私はにライブラリのバージョンをダウングレードしました:

implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'

そして問題は解決しました。

3
Suraj Vaishnav

既存のプロジェクトの場合、androidXに移行します。新しいプロジェクトの場合、これら2つのフラグをGradle.propetiesに追加します

Android.enableJetifier = true
Android.useAndroidX = true

詳細な手順については https://developer.Android.com/jetpack/androidx またはこれを確認してください AndroidXとは

3
trustidkid

新しいプロジェクトを作成し、build.gradleファイルを比較してすべてを置き換えます。

implementation 'com.Android.support:appcompat-v7:27.1.1'
implementation 'com.Android.support.constraint:constraint-layout:1.1.1'

そのような新しいプロジェクトの中にあったものと同じものを持つ他の依存関係

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'

implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'

androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

implementation 'androidx.core:core-ktx:1.0.0-alpha3'

そしてkotlinファイルでandroidxを使うようにインポートを修正しました。

  1. [リファクタリング]-> [移行]-> [Android Xへの移行]に移動してください。

  2. これをgradle.propertiesファイルに追加してください:Android.enableJetifier = true Android.useAndroidX = true

そして、同期を実行します。

2
Girish B.R
  • リファクタリングに移動( Image
  • [AndroidXに移行]をクリックします。それは働いています
  • それは働いています。
2
Aydın Üzmez

私は2時間のこの奇妙なバグに直面していました。これらの手順を実行してこのエラーを解決しました

build.gradleの依存関係を変更

  implementation 'com.google.Android.gms:play-services-maps:17.0.0'

  implementation 'com.google.Android.gms:play-services-maps:15.0.0'
2
Kashif Ahmed

私はこの同じ問題を3日間抱えていました。

AndroidがKotlinまたはAndroidXのいずれかを使用することを望んでいるように、彼らはAndroidを廃止しています。

しかし、これは私がそれを解決した方法です。

  • プロジェクトをAndroidXに移行しました。これにより、問題のこの問題に関連するエラーは発生しません。ファイルがそれぞれ更新されます。アプリケーションでメソッド、クラス、または変数名を変更する必要はありません。

注意:Android studio 3.4.1の最新の安定バージョンで最新のライブラリ(build.grudleファイル)を使用する必要があります。

これらの行をAndroidManifest.xmlファイルに追加します。

tools:replace = "Android:appComponentFactory" Android:appComponentFactory = "whateverString"

1
Ajay

この問題は主に 古い依存関係 で発生しました。

2つの解決策があります。

最初の1つ:

old dependenciesファイルからすべてのProject level gradleおよび ClassPaths を更新します。

classpath 'com.Android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'

二つ目:

あなたのプロジェクトMigrate to AndroidX

Android Studioのメニューから - > Refanctor - > Migrate to AndroidX

ありがとう、誰かがこの答えから手伝ってくれるなら私に知らせてください。

1
Hasib Akter

この画像を見て、Android AndroidManifest.xmlでこの行を追加してください

tools:replace="Android:appComponentFactory"
Android:appComponentFactory="whateverString"

enter image description here

1
Prashant Arvind

AndroidXに移行する予定がない場合は、以下の手順に従ってください

  1. ターミナルタイプgradlew app:dependencies
  2. ウィンドウに依存関係が表示されたら、Ctrl + fを押してandroidXと入力します
  3. 内部でandroidx libを使用しているすべての依存関係があります。androidxlibsを内部で使用していないことを確認するために、それをダウングレードするか、その代替を使用する必要があります。
1
Swapnil

まず最初に manifest tag にこの行を追加してください。

xmlns:tools="https://schemas.Android.com/tools"

それからツールを追加して、Androidスタジオであなたが提案したものを置き換えます

0

Groupie(実装 'com.xwray:groupie:2.3.0')を使用しているときに同じエラーが発生しました

バージョンを(実装 'com.xwray:groupie:2.1.0')に変更して解決しました

0
atilganhaci

場合によっては、私はandroidXに渡したくありませんでした。そして最後の変更をチェックしなければなりません。私は新しいコンポーネントが - > lottie 2.8.0であることを理解しています。

これが誰かに役立つことを願っています。

1. app/build.gradleの最後にこれらのコードを追加しました。

configurations.all {
   resolutionStrategy.force 'com.Android.support:support-v4:28.0.0' 
   // the above lib may be old dependencies version       
    }

2.Sdkとツールのバージョンを28に変更しました。

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

3. AndroidManifest.xmlファイルに2行追加します。

<application
    Android:name=".YourApplication"
    Android:appComponentFactory="AnyStrings"
    tools:replace="Android:appComponentFactory"
    Android:icon="@drawable/icon"
    Android:label="@string/app_name"
    Android:largeHeap="true"
    Android:theme="@style/Theme.AppCompat.Light.NoActionBar">
0
Attaullah

この問題を解決するには、ルートプロジェクトのAndroid/build.gradleでext変数のバージョンを明示的に定義することをお勧めします

ext {
    googlePlayServicesVersion = "16.1.0" // default: "+"
    firebaseVersion = "15.0.2" // default: "+"

    // Other settings
    compileSdkVersion = <Your compile SDK version> // default: 23
    buildToolsVersion = "<Your build tools version>" // default: "23.0.1"
    targetSdkVersion = <Your target SDK version> // default: 23
    supportLibVersion = "<Your support lib version>" // default: 23.1.1
}

参照 https://github.com/zo0r/react-native-Push-notification/issues/1109#issuecomment-506414941

0
Govan

Build.gradle(Module:app)のproguardFileを次のように変更します。

proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'

の代わりに

proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'

これは私のために働きました

0
David Wanjohi