API 28(P)のAndroid設計サポートライブラリが機能しない


106

android-P SDK環境の設定に成功しました。Androidデザインサポートライブラリを使用しようとすると、プロジェクトのビルドエラーが発生します。プロジェクト構成は次のとおりです。

IDE:3.2 Canary 17ターゲットAPI:28コンパイルAPI:28

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.navigationpoc"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

そしてビルド失敗エラーは:

マニフェストのマージに失敗しました:[androidx.core:core:1.0.0-alpha3]からの属性application @ appComponentFactory value =(androidx.core.app.CoreComponentFactory)AndroidManifest.xml:22:18-86も[com.androidに存在します.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91 value =(android.support.v4.app.CoreComponentFactory)。提案:AndroidManifest.xml:6:5-40:19の要素に「tools:replace = "android:appComponentFactory"」を追加してオーバーライドします。


この回答を確認しましたか:stackoverflow.com/a/54825603/1318946
Pratik Butani

回答:


89

以前のAPIパッケージバージョンのアーティファクトまたは新しいAndroidxのいずれかを使用できます。両方を使用することはできません。

以前のバージョンを使用したい場合は、依存関係を

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.1'

    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.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

Androidxを使用する場合:

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.google.android.material:material:1.0.0-alpha3'
    implementation 'androidx.cardview:cardview:1.0.0-alpha3'
}

2
この答えは受け入れられるべきです。medium.com/mindorks/…の
Rawa

なぜそれcomが置き換えられなかっmaterialたのimplementationですか?
RoCk RoCk

58

重要な更新

以降、Androidはサポートライブラリを更新しません28.0.0

これはandroid.supportパッケージの最後の機能リリースになるため、開発者はAndroidX 1.0.0移行することをお勧めします

ライブラリAndroidXを使用してください。

  • プロジェクトでサポートAndroidXの両方を 使用しないでください
  • ライブラリモジュールまたは依存関係には、サポートライブラリが含まれている場合があります。 Androidx Jetifierが処理します。
  • androidxalpha、beta、rcにはアプリに付属させたくないバグがある可能性があるため、安定版または任意のライブラリを使用してください。

あなたの場合

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
}

奇妙なことに、私のプロジェクトは長い間P上にありましたが、今日ビルドするとサポートライブラリエラーが発生し始めました。ここで見逃しているものはありますか?
Talha

これは、私たち全員が現在直面している一般的なエラーです。プロジェクトの実行では、数日おきに直面しています。キャッシュを無効にして再起動するだけです。
Khemraj 2018年

@Talhaメニューからビルド>プロジェクトのクリア、次にビルド>プロジェクトの作成を試してください。キャッシュの無効化と再起動には時間がかかり、すべてのプロジェクトのキャッシュをクリアするため、キャッシュを無効化して再起動しない場合は、これで十分な場合があります。
ジョン

43

これを追加:

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

マニフェストアプリケーションに

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="android:appComponentFactory"
    android:appComponentFactory="whateverString">

それが役に立てば幸い


あなたは何を持っています@string/action_settingsか?
Aliton Oliveira

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

2行追加後のエラー: * What went wrong: Execution failed for task ':app:generateDebugBuildConfig'. > org.xml.sax.SAXParseException; systemId: file:/C:/D/code/js/emps_app/android/app/src/main/AndroidManifest.xml; lineNumber: 14; columnNumber: 52; The prefix "tools" for attribute "tools:replace" associated with an element type "application" is not bound.
user938363

2
AndroidManifest.xmlヘッダー内にxmlns:tools = " schemas.android.com/tools " を追加しましたか?
Carlos Santiago

2
:アンドロイド/ SRC /デバッグ/持つ同様のヘッダ下マニフェスト<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Googleは新しいAndroidX依存関係を導入しました。AndroidXに移行する必要があります。それは簡単です。

すべての依存関係をAndroidXの依存関係に置き換えました

古い設計依存

implementation 'com.android.support:design:28.0.0'

新しいAndroidXデザインの依存関係

implementation 'com.google.android.material:material:1.0.0-rc01'

ここでAndroidXの依存関係を見つけることができます https://developer.android.com/jetpack/androidx/migrate


自動AndroidX移行オプション(Android Studio 3.3以降でサポート)

メニューバーから[リファクタリング]> [AndroidXに移行]を選択して、AndroidXを使用するように既存のプロジェクトを移行します。


1
実装 'com.google.android.material:material:1.1.0-alpha05'これは新しいバージョンです
Hitesh Tarbundiya

「import android.support.design.widget.TabLayout;」の代わりに何を置くか ?
テミルベク

6

1. app / build.gradleに次のコードを追加しました:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:26.1.0' // the lib is old dependencies version;       
}

2. SDKとツールのバージョンを28に変更:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2.AndroidManifest.xmlファイルに、次の2行を追加する必要があります。

<application
    android:name=".YourApplication"
    android:appComponentFactory="anystrings be placeholder"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

回答ありがとう@Carlos Santiago: API 28(P)のAndroidデザインサポートライブラリが機能しない


今はAndroidXを使用しているはずなので、このソリューションは将来的には準拠しません。公開されている古いアプリケーションを今すぐアップグレードする必要があります。やり直しが多い場合でも、これらの変更を行う必要があります。
Abhinav Saxena

@Abhinav Saxenaそのとおりです。プロジェクトを28に更新する必要があります。古いSDKバージョンでこの問題を解決するよりも優れています。:)
Codios 2018年

これは受け入れられた答えです。多くの提案の後、何の助けにもなりませんでしたが、これはconfiguration.all {}として私に役立ちました。あなたは私の日を救った、ありがとう。
Noor Hossain


4

ファイルgradle.propertiesを開き、次の2行を追加します。

android.useAndroidX = true
android.enableJetifier = true

クリーンでビルド


1
useAndroidXはコンパイラにユーザーandroidxを指示します。古いAndroidサポートパッケージではなくファイル
Lena Bru

これにより、Studio 3.2以降がAndroidXに移行するように指示されます。AndroidXに移行したすべてのライブラリは、依存関係が修正されています。
Abhinav Saxena

3

注:アプリでcom.android.supportとcom.google.android.materialの依存関係を同時に使用しないでください。

build.gradle(app)ファイルにAndroidのマテリアルコンポーネントを追加する

dependencies {
    // ...
    implementation 'com.google.android.material:material:1.0.0-beta01'
    // ...
  }

現在、アプリが元のデザインサポートライブラリに依存している場合は、Android Studioが提供するAndroidXへのリファクタリングオプションを利用できます。これにより、アプリの依存関係とコードが更新され、新しくパッケージ化されたandroidxおよびcom.google.android.materialライブラリが使用されます。

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


3

まず最初に、gradle.propertiesを見て、これらの値がtrueである必要があります。あなたがそれらを見ることができない場合は、あなたが書く必要があります。

android.useAndroidX=true
android.enableJetifier=true

その後、build.gradle(モジュール:app)で AndroidXの依存関係を使用できます。また、compileSDKVersiontargetVersionを確認する必要があります。最小値は28です。たとえば、29を使用しています。

したがって、androidx依存関係の例:

implementation 'androidx.cardview:cardview:1.0.0'

ただし、すべてがcardview依存関係のように androidxで始まるわけではないので注意してください。たとえば、古いデザインの依存関係は次のとおりです。

implementation 'com.android.support:design:27.1.1'

しかし、新しい設計の 依存関係は次のとおりです。

implementation 'com.google.android.material:material:1.1.0'

したがって、注意深く検索して読む必要があります。ハッピーコード。

@canerkaseler


2

私はすべてandroidx.*をに置き換えることでその状況を乗り越えていappropiate package nameます。

あなたのラインを変える

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

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

implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

了解しました

  • tools:replace="android:appComponentFactory"AndroidManifestから削除

0

以下のコードは私と完全に連携しました:

dependencies {
    api 'com.android.support:design:28.0.0-alpha3'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'androidx.test:runner:1.1.0-alpha2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha2'
}


0

Androidドキュメントはこれで明確です。以下のページに移動してください。その下に、「OLD BUILD ARTIFACT」「AndroidXビルドアーティファクト」という名前の2つの列があります。

https://developer.android.com/jetpack/androidx/migrate

これで、gradleに多くの依存関係ができました.Androidxビルドアーティファクトとそれらを一致させ、gradleで置き換えてください。

それでは十分ではありません。

MainActivityに移動し(すべてのアクティビティについてこれを繰り返します)、ステートメント「public class MainActivity extends AppCompatActivity」からAppCompact Activityという単語を削除し、同じ単語をもう一度書き込みます。ただし、今回はandroidxライブラリがインポートされます。これまでappcompactサポートファイルがインポートされ、使用されます(また、そのappcompactインポートステートメントを削除します)。

また、レイアウトファイルに移動します。制約レイアウトがあるとすると、xmlファイルの最初の行の制約レイアウトにappcompactに関連するものが含まれていることがわかります。これを削除して、制約レイアウトを再度記述します。しかし、androidx関連の制約レイアウトが追加されます。

これを同じ数のアクティビティと同じ数のxmlレイアウトファイルに対して繰り返します。

しかし心配する必要はありません。AndroidStudioは、コンパイル中にこのような起こり得るエラーをすべて表示します。


0

同様の問題がありました。build.gradleに追加され、それは私のために働いた。

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

AndroidXに移行せずにこの問題を解決したい場合(お勧めしません)

このマニフェストのマージの問題は、androidXを使用している依存関係の1つに関連しています。

この依存関係のリリースバージョンを減らす必要があります。私の場合:

GoogleまたはFirebaseを使用していた

api 'com.google.android.gms:play-services-base:17.1.0'

サポートライブラリで使用するには、15.0.1に減らす必要があります。


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