web-dev-qa-db-ja.com

既に存在するプログラムタイプ:Android.support.v4.app.BackStackRecord

Android St​​udioをアップグレードしましたが、最新バージョンで多くの問題が見つかりました。

似たような質問がたくさんありますが、私はすべての答えをチェックしましたが、どれも役に立たなかったのです!

コードのコンパイル中に私が直面しているエラーは次のとおりです。

プログラムの種類が既に存在する:Android.support.v4.app.BackStackRecord $ Op Message {kind = ERROR、text =プログラムの種類が既に存在する:Android.support.v4.app.BackStackRecord $ Op、sources = [不明なソースファイル]、ツールname = Optional.of(D8)}

ここに私のgradleファイルがあります:

プロジェクト

// Top-level build file where you can add configuration options common to 

all sub-projects/modules.

buildscript {

repositories {
    google()
    jcenter()
}
dependencies {
    classpath 'com.Android.tools.build:gradle:3.1.0'


    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
 }

 allprojects {
 repositories {
    google()
    jcenter()
    maven {
        url "https://jitpack.io"
          }
     }
}

task clean(type: Delete) {
delete rootProject.buildDir
}

アプリ

apply plugin: 'com.Android.application'

Android {
compileSdkVersion 27
defaultConfig {
    applicationId "com.alcantara.bugismart"
    minSdkVersion 15
    targetSdkVersion 27
    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(dir: 'libs', include: ['*.jar'])
    implementation 'com.Android.support:appcompat-v7:27.1.1'
    implementation 'com.Android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.Android.support.test:runner:1.0.1'
    androidTestImplementation 'com.Android.support.test.espresso:espresso- 
    core:3.0.1'
    implementation 'com.github.ViksaaSkool:AwesomeSplash:v1.0.0'
}

私が何をしているのか、どこが間違っているのかを理解するために、他に何か追加すべきことがあれば教えてください。

52

プログラムの種類が既に存在する:Android.support.v4.app.BackStackRecord $ Op Message {kind = ERROR、text =プログラムの種類が既に存在する:Android.support.v4.app.BackStackRecord $ Op、sources = [不明なソースファイル]、ツールname = Optional.of(D8)}

この問題は、サポートライブラリが重複しているために発生しています。この依存関係:

implementation 'com.github.ViksaaSkool:AwesomeSplash:v1.0.0'

古いバージョンのサポートライブラリを使用しています。サポートライブラリが既にある場合は、除外してみてください。

// support libraries we want to use
implementation 'com.Android.support:appcompat-v7:27.1.1'
implementation 'com.Android.support:support-v4:27.1.1'

// we already have the specific support libraries. So, exclude it
implementation ('com.github.ViksaaSkool:AwesomeSplash:v1.0.0') {    
    exclude group: 'com.Android.support'
    exclude module: 'appcompat-v7'
    exclude module: 'support-v4'
}

次のコマンドで依存関係を確認する必要があります。

./gradlew app:dependencies

または代わりに、いつでもサポートライブラリバージョンを上書きすることができます必要な正確なバージョンと競合するライブラリ。


UPDATE

ビルド依存関係の追加 ドキュメントで、依存関係の解決エラーを修正するための完全なステップがあります。ここに抜粋:

依存関係解決エラーを修正

アプリプロジェクトに複数の依存関係を追加すると、それらの直接および推移的な依存関係が互いに競合する可能性があります。 Android Gradleプラグインはこれらの競合を適切に解決しようとしますが、一部の競合はコンパイル時間またはランタイムエラーにつながる可能性があります。

どの依存関係がエラーの原因であるかを調べるには、 アプリの依存関係ツリーを調べます を使用して、複数回または競合するバージョンで表示される依存関係を探します。

重複する依存関係を簡単に識別できない場合は、Android St​​udioのUIを使用して、次のように重複するクラスを含む依存関係を検索してみてください。

  1. メニューバーからNavigate>Classを選択します。
  2. ポップアップ検索ダイアログで、「非プロジェクト項目を含める」の隣のボックスがチェックされていることを確認します。
  3. ビルドエラーに表示されるクラスの名前を入力します。
  4. クラスを含む依存関係の結果を調べます。

次のセクションでは、発生する可能性があるさまざまな種類の依存関係解決エラーとその修正方法について説明します。

重複クラスのエラーを修正する

クラスがランタイムクラスパスに複数回表示されると、次のようなエラーが表示されます。

Program type already present com.example.MyClass

このエラーは通常、次のいずれかの状況が原因で発生します。

  • バイナリ依存関係には、アプリが直接依存関係として含むライブラリが含まれます。たとえば、アプリはライブラリAとライブラリBへの直接の依存関係を宣言していますが、ライブラリAは既にバイナリにライブラリBを含んでいます。

    • この問題を解決するには、直接依存関係としてライブラリBを削除します。
  • アプリには、同じライブラリに対するローカルバイナリ依存関係とリモートバイナリ依存関係があります。

    • この問題を解決するには、バイナリ依存関係の1つを削除します。

クラスパス間の競合を修正

Gradleは、コンパイルクラスパスを解決するとき、最初にruntimeクラスパスを解決し、その結果を使用して、コンパイルクラスパスに追加する必要がある依存関係のバージョンを決定します。つまり、ランタイムクラスパスは、ダウンストリームクラスパスの同一の依存関係に必要なバージョン番号を決定します。

アプリのランタイムクラスパスは、アプリのテストAPKのランタイムクラスパス内の依存関係を一致させるためにGradleが必要とするバージョン番号も決定します。クラスパスの階層を次の図で説明します。

enter image description here

たとえば、アプリにimplementationdependency configuration を使用するバージョンの依存関係が含まれ、ライブラリモジュールにruntimeOnly構成を使用した依存関係の異なるバージョン。

ランタイムとコンパイル時のクラスパスの依存関係を解決するとき、Android Gradleプラグイン3.3.0以降は、特定のダウンストリームバージョンの競合を自動的に修正しようとします。たとえば、ランタイムクラスパスにライブラリAバージョン2.0が含まれ、コンパイルクラスパスにライブラリAバージョン1.0が含まれている場合、プラグインはエラーを回避するためにコンパイルクラスパスの依存関係をライブラリAバージョン2.0に自動的に更新します。

ただし、ランタイムクラスパスにライブラリAバージョン1.0が含まれ、コンパイルクラスパスにライブラリAバージョン2.0が含まれる場合、プラグインはコンパイルクラスパスへの依存関係をライブラリAバージョン1.0にダウングレードせず、次のようなエラーが表示されます。

Conflict with dependency 'com.example.library:some-lib:2.0' in project 'my-library'.
Resolved versions for runtime classpath (1.0) and compile classpath (2.0) differ.

この問題を解決するには、次のいずれかを実行します。

  • ライブラリモジュールへのapi依存関係として、必要なバージョンの依存関係を含めます。つまり、ライブラリモジュールのみが依存関係を宣言しますが、アプリモジュールも一時的にそのAPIにアクセスできます。
  • または、両方のモジュールで依存関係を宣言できますが、各モジュールが同じバージョンの依存関係を使用することを確認する必要があります。 プロジェクト全体のプロパティの構成 を検討して、各依存関係のバージョンがプロジェクト全体で一貫性を保つようにします。

これをApp module build.gradleに追加します:

implementation 'com.Android.support:support-v4:27.1.1'
37
keval koria

受け入れられた答えに代わるものは、新しいバージョンを強制するようにgradleに指示することです:

final SUPPORT_LIB_VER = '27.1.1'

configurations.all {
    resolutionStrategy { 
        force "com.Android.support:appcompat-v7:${SUPPORT_LIB_VER}"
        force "com.Android.support:support-v4:${SUPPORT_LIB_VER}"
    }
}

これは、多くの依存関係がある場合により便利です。

参照: 「Gradleに2つの依存関係に同じバージョンを設定させるにはどうすればよいですか?」

10
TmTron

あなたのgradleファイルの依存関係セクションにこのコード行を追加してください

implementation 'com.Android.support:support-v4:28.0.0'
9
Areeba Qurashi

"SdkVersion"に従ってこのコードをgradleに追加します。

implementation 'com.Android.support:support-v4:28.0.0'

たとえば、私のSDKVersionは28で、次のコードを使用します。

implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation 'com.Android.support:support-v4:28.0.0'
4
Masoud Siahkali

また、libsフォルダーも確認してください。

implementation fileTree(dir: 'libs', include: ['*.jar'])

そこからすべてのjarも選択します。 jarが互いに重複している場合や、下位の実装が重複している場合があります。

ライブラリに重複があり、この問題が発生しました。

2
Boris Gafurov

私の場合、非常に古いEclipseプロジェクトをAndroid St​​udioに変換しました。そのため、使用される自動移行:

dependencies {
    compile files('libs/Android-support-v13.jar')
}

このライブラリの行を削除するかコメントしてください。

コメントすると、Gradleスクリプトが正しく実行されました。

1
Vyacheslav

依存関係を置き換えます。

implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.Android.support:appcompat-v7:28.0.0-alpha1'
    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'
0
Vijay Kumar

enter image description here 私はそれらを試しました:

  • クリーン/リビルド
  • 現金を無効にして再起動
  • App.gradleのライブラリから依存関係を除外します(以下を参照)

implementation(project( ':libxmiimp')){除外グループ: 'com.Android.support'、モジュール: 'support-v4'}

  • Gradle設定で遊んでください(multiDexのようなものはtrueなどを有効にします)

しかし、私の問題は、Android-support-v4.jarがローカルAndroidライブラリのlibフォルダーにどういうわけか入ったということでした。..削除して問題を修正しました

multiDexEnabled true gradle-appのAndroidブロックに上記の行を追加してください...

0
Monem