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


223

次の学年があります

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

2
次の行を削除してみてください:実装 'com.android.support:appcompat-v7:28.0.0-rc01'および実装 'com.android.support.constraint:constraint-layout:1.1.2'
vcapra1

2
マテリアルパッケージはすべてandroid-designにバンドルされていると思います。確認してください...
Marcos Vasconcelos

これが必要です:material.io/design/components/app-bars-bottom.html。これはandroid-designに入っていますか?
ЕвгенийУсов

これも確認できます:stackoverflow.com/a/54825603/1318946
Pratik Butani

新しいAndroid Studioには、アプリケーションをAndroidXにスムーズに移行する機能があります。以下のリンクに従ってください。 github.com/material-components/material-components-android/...
ラヴィJaggarapu

回答:


15

依存関係の最初と最後の行の「rc01」を「alpha1」に変更するだけですこれは私のために働いています


OSに依存しないパス 'META-INF / androidx.core_core.version
Oliveira

40
実装「com.android.support:appcompat-v7:28.0.0」で記述された「rc01」がありません。まだ問題が発生します。いくつかの解決策を提案してください。
avani kothari

10
この回答は、質問に対するコメントである必要があります。
Ananth

459

同様の問題がありました。gradle.propertiesファイルに2行追加しました:

android.useAndroidX=true
android.enableJetifier=true

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


6
android.useAndroidX = true
Frank Fang

6
追加後、この次のエラーが発生します `` `*何が問題でしたか:タスク ':react-native-camera:compileGeneralDebugJavaWithJavac'の実行が失敗しました。>コンパイルに失敗しました。詳細については、コンパイラエラー出力を参照してください。*試してください:--stacktraceオプションを指定して実行し、スタックトレースを取得します。--infoまたは--debugオプションを指定して実行し、より多くのログ出力を取得します。完全な洞察を得るために--scanを付けて実行します。`` `
ディリーパチャンディマ

@PrinceHamzaこれをチェックして、このgithub.com/facebook/react-native/issues/…の
Dileepa Chandima

9
これは受け入れられる答えになるはずです。これで問題は解決しました。
VishalKale

2
「しかし、「gradles.propertiesファイル」が表示されません。はい、そのため、スタジオプロジェクトのアプリのルートフォルダーで、そのファイル(拡張子なし)を作成し、それらの行を追加します。
user1010160

145

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

AndroidXへの移行を試みましたが、問題は修正されました!

Refactor/Migrate to AndroidX


1
これは機能しますが、生成するインポート文の一部は古いパッケージ名を使用しています。androidx.*IDEが修正として提案したパッケージ名を使用するだけで、それらの多くを修正する必要がありました。
Andrew Koster

1
@Meteこの答えは私の命を救った。ビールを買ってもいいですか。
girish_vr

@girish_vr提供してくれてありがとう:)うまくいったことを嬉しく思います。
メテ

build.gradleファイルで「support-v4」ライブラリの最新リリースを取得していたため、この問題に遭遇しました。私がgradleファイル内の特定のバージョンのライブラリを参照していたら、最初はこの問題に遭遇しなかったでしょう。また、もう少し調べたところ、GoogleがAndroidXライブラリへの切り替えを推奨していることがわかりました。だから、弾丸を噛むことにしました。幸い、アップグレード後にすべての問題が解決しました...災害は回避され、レッスンはGradleの参照について学習しました。
BluJ IT

104

失敗の理由

AndroidXの一部であるマテリアルライブラリを使用しています。AndroidXをご存じない場合は、この回答をご覧ください。

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

例えば ​​-

あなたのグラドルでは、あなたは使用しています

  • com.android.support:appcompat-v7 (古い--Androidサポートライブラリ-の一部)
  • com.google.android.material:material(AndroidXの一部)(AndroidXビルドアーティファクトcom.android.support:design

解決

したがって、解決策はAndroidXまたは古いサポートライブラリを使用することです。Androidはバージョン28.0.0以降のサポートライブラリを更新しないため、AndroidXの使用をお勧めします。リリースノートを見るサポートライブラリのを。

AndroidXに移行するだけです。AndroidXに移行するための詳細な回答を次に示します。ここでは、その答えから必要な手順を説明します。

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

既存のプロジェクト

  • Android Studio> Refactor Menu> Migrate to AndroidX ...
  • 分析が行われ、下部にRefractorウィンドウが開きます。行われる変更を受け入れます。

画像

新しいプロジェクト

これらのフラグを gradle.properties

android.enableJetifier=true
android.useAndroidX=true

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

Migrate to AndroidXの @ 公式ページを確認してください

Jetifierとは何ですか?


その後もエラーが発生しましたが、この回答は
役に立ち

3
「Migrate to AndroidX」をクリックした後、左下の「Do
refactor

88

私の場合、これは完全に機能しています。マニフェストファイル内に2つの行コードを追加しました

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

クレジットはこの答えに行きます

マニフェストファイルの例


4
後でアプリに問題が発生するかどうかはわかりませんが、うまくいきました。
Aliton Oliveira

4
はい、問題が発生しました:OSに依存しないパス「META-INF / androidx.core_core.version
Oliveira

3
次に、ツールがアプリケーションタグにバインドされていないことを示すエラーが表示されます。
Travis Delly

完全なlogcatを投稿できますか?
Muhaiminur Ra​​hman


29

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

で、gradle.properties2つのスクリプトの下に追加するだけです

android.useAndroidX=true
android.enableJetifier=true

理由はなんですか↓

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

参照してくださいパッケージリファクタリングページを


私のプロジェクトにはそのようなファイルgradle.propertiesはありません。(元々はeclipseで数年前に作成され、その後Androidスタジオに移動されました)
Sujith Manjavana

ああ...私はこのような状況に直面していなかった、私はあなたが役立つかもしれないスレッドの下に見つけ stackoverflow.com/a/37389861/6917362 コメントをしてくださいしてみてください
EJ Chathuranga

存在しない場合は、メインのbuild.gradleの近くにそのファイルを作成し、プロジェクトを同期します。
Fedir Tsapana、

13

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'
   }

1
これが最も正確な答えです。
Fran Marzoa

1
@FranMarzoaそうではありません。compatライブラリを別の依存関係からインポートするとどうなりますか?
m0skit0

1
@ m0skit0ここでは別の質問を投稿する必要があると思います...;)
Fran Marzoa


12

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

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

ここに画像の説明を入力してください


文字列は何を意味しますか?
Kishore Kumar

@KishoreKumarでは、appNameなどの任意の文字列名を追加することもできます。
Prashant Arvind

正確には、whateverStringはAppComponentFactoryを拡張する完全なクラス名である必要があります。たとえば、カスタム定義クラスcom.xxx.MyFactoryはAppComponentFactoryを拡張します
jiashie

11

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

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
追加するとツールが赤くなります。追加する必要があるものは他にありますか?
夏みゆ

追加するものは何もありません。おそらく1つの理由は、ur gradleのバージョンが一致していないことです。AndroidManifest.xmlファイルのコードを表示できますか?
アジェイ

私はandroidxに移行してみましたが、タスク ':app:compileDebugJavaWithJavac'の実行が失敗し続けます。>コンパイルに失敗しました。詳細については、コンパイラエラー出力を参照してください。
夏みゆ

これが私のAndroidマニフェスト<application android:allowBackup = "true" android:icon = "@ mipmap / ic_launcher" android:label = "@ string / app_name" android:roundIcon = "@ mipmap / ic_launcher" android:usesCleartextTraffic = "true "android:supportsRtl =" true "android:theme =" @ style / AppTheme "tools:replace =" android:appComponentFactory "android:appComponentFactory =" @ string / texthere ">
natsumiyu

1
素晴らしいソリューション、私の時間を節約しました。
Umair Iqbal

9

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

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

8

次の手順を実行します:

  • [リファクタリングに移動し、[AndroidXに移行]をクリックします
  • 「リファクタリングを実行」をクリックします

これはリファクタリング全体を行いません:(
Mohsin


6

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

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

最初の1つ:

ファイルからすべてold dependenciesClassPathsを更新しProject level gradleます。

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

ありがとう、誰かがこの答えから助けてくれたら教えてください。


6

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

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

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


1
これをどこに追加するのですか?
Travis Delly

これをandroid / build.gradleファイルに追加
Manoj Alwis

2
@ManojAlwis build.gradleファイルのどのセクションにこれを配置する必要がありますか?
Keval Langalia

@KevalLangalia、これらの2行をandroid-> build.gradleファイルに追加するだけです。例:buildscript {ext {buildToolsVersion = "28.0.3" minSdkVersion = 19 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesVersion = "16. +" firebaseVersion = "17.3.4"}
Manoj Alwis

1
本当に役に立ちました...ありがとう
Vasudev Vyas

6

ライブラリバージョンの互換性に関するすべて

私はこの奇妙なバグのカップルに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'

1
正直に私は同じことをしてそれがうまくいったので、プロセスをマージした後のライブラリバージョンの互換性についてすべてだと思います
Milos

6

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

したがって、私の場合、androidxを使用していたライブラリを使用していますが、androidxを使用していないため、そのライブラリバージョンをダウングレードすると問題が解決しました。

私の場合:

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

上記のライブラリーでは問題が発生します13. +では、androidxを使用するライブラリーの新しいバージョンが自動的に取得されます。だから私はライブラリのバージョンを以下にダウングレードしました:

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

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


6
  1. Refactor-> Migrate-> Migrate to Android Xに移動してください。

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

    android.enableJetifier=true
    android.useAndroidX=true

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


今、あなたの状況はどうですか?
Girish BR

私が受け継いだプロジェクトは50年前のものです。Googleが推進している新しいFabric / Firebaseアナリティクスを実装しようとしました。そして、その新しいライブラリはandroidx互換ライブラリを使用しており、私のプロジェクトではAppCompatを使用しています。今、私はたくさんの依存関係の更新やものに対処しなければなりませんでした。私は停止し、これらのコマンドを含むさまざまなことを試しましたが、新しいFirebaseのもののためにそれらが必要です。これをオンにした後、大量のコンパイラエラーが発生しました。それを修正しましたが、今はui xmlファイルからエラーが発生しています。したがって、すべてを放棄して、古いバージョンで試す必要があります。
Martin Berger、

クラスの名前空間をandroidxに手動で修正してからさらに1時間後、それは今は機能しているようです。問題は、コンパイラがxmlで検出できなかったことです。たとえば、「android.support.v7.widget.AppCompatSpinner」は「androidx.appcompat.widget.AppCompatSpinner」である必要があります。このドキュメントは役に立ちました:developer.android.com/jetpack/androidx/migrate
Martin Berger

うまくいくといいのですが、何か問題があればお知らせください。
Girish BR

4

新しいプロジェクトを作成し、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を使用するようにインポートを修正しました。


なんらかの理由で、androidxを使用したくありません。
シャビー

4

私がしたことはトップメニューの「リファクタリング」オプションに行くことだけでした。

次に[AndroidXに移行]を選択します

プロジェクトをzipファイルとして保存することに同意します。

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


4

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">

または単に

  • リファクタリングに移動します(スタジオ->メニュー->リファクタリング)
  • [AndroidXに移行]をクリックします。それは働いています
  • それは働いています。

2
  • リファクタリングに移動(画像
  • [AndroidXに移行]をクリックします。それは働いています
  • それは働いています。

1
ソリューションへのリンクを歓迎しますが、それがなくても回答が役立つことを確認してください。リンクの周りにコンテキストを追加して、他のユーザーがそれが何であるか、なぜそこにあるのかを理解し、ページの最も関連性の高い部分を引用してくださいターゲットページが利用できない場合にリンクし直します。リンクに過ぎない回答は削除される場合があります。
マシュー

2

AndroidXに移行しない場合は、次の手順に従ってください

  1. 端末タイプのgradlew app:dependencies
  2. ウィンドウに依存関係が表示されたら、Ctrl + fを押して「androidX」と入力します
  3. 内部でandroidx libを使用しているすべての依存関係が見つかります。これをダウングレードするか、その代替手段を使用して、内部でandroidX libsを使用しないようにする必要があります。

1

これと同じ問題が3日間ありました。

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

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

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

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


1

これが正しい答えかどうかはわかりませんが、うまくいきました

グリドルラッパープロパティを増やす

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

グリドルを構築して

    classpath 'com.android.tools.build:gradle:3.4.2'

バージョンが原因でエラーが表示されます。


私は、任意の文字列がランダムエラーにいくつかの時間が発生します、文字列はandroidx.core.app.AppComponentFactoryされるべきだと思う、。
seyedrezafar

0

まず最初に、この行をマニフェストタグに必ず追加してください

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

次に、Android Studioで提案されたツールを置き換えるツールを追加します


0

build.gradle(モジュール:app)のproguardFileを次のように変更します

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

の代わりに

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

これは私のために働いた


0

この問題を解決するには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

私も同じ問題に直面しています、あなたのAndroidスタジオでは、Android Gradleプラグインバージョン3.3.2を変更するだけで、Gradleバージョンは5.1.1です


0

私の場合、マニフェストファイルに追加します `

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

もちろんアプリケーションタグ、それは動作します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.