Android Studioをアップグレードしましたが、最新バージョンで多くの問題が見つかりました。
似たような質問がたくさんありますが、私はすべての答えをチェックしましたが、どれも役に立たなかったのです!
コードのコンパイル中に私が直面しているエラーは次のとおりです。
プログラムの種類が既に存在する: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'
}
私が何をしているのか、どこが間違っているのかを理解するために、他に何か追加すべきことがあれば教えてください。
プログラムの種類が既に存在する: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
または代わりに、いつでもサポートライブラリバージョンを上書きすることができます必要な正確なバージョンと競合するライブラリ。
ビルド依存関係の追加 ドキュメントで、依存関係の解決エラーを修正するための完全なステップがあります。ここに抜粋:
アプリプロジェクトに複数の依存関係を追加すると、それらの直接および推移的な依存関係が互いに競合する可能性があります。 Android Gradleプラグインはこれらの競合を適切に解決しようとしますが、一部の競合はコンパイル時間またはランタイムエラーにつながる可能性があります。
どの依存関係がエラーの原因であるかを調べるには、 アプリの依存関係ツリーを調べます を使用して、複数回または競合するバージョンで表示される依存関係を探します。
重複する依存関係を簡単に識別できない場合は、Android StudioのUIを使用して、次のように重複するクラスを含む依存関係を検索してみてください。
次のセクションでは、発生する可能性があるさまざまな種類の依存関係解決エラーとその修正方法について説明します。
クラスがランタイムクラスパスに複数回表示されると、次のようなエラーが表示されます。
Program type already present com.example.MyClass
このエラーは通常、次のいずれかの状況が原因で発生します。
バイナリ依存関係には、アプリが直接依存関係として含むライブラリが含まれます。たとえば、アプリはライブラリAとライブラリBへの直接の依存関係を宣言していますが、ライブラリAは既にバイナリにライブラリBを含んでいます。
アプリには、同じライブラリに対するローカルバイナリ依存関係とリモートバイナリ依存関係があります。
Gradleは、コンパイルクラスパスを解決するとき、最初にruntimeクラスパスを解決し、その結果を使用して、コンパイルクラスパスに追加する必要がある依存関係のバージョンを決定します。つまり、ランタイムクラスパスは、ダウンストリームクラスパスの同一の依存関係に必要なバージョン番号を決定します。
アプリのランタイムクラスパスは、アプリのテストAPKのランタイムクラスパス内の依存関係を一致させるためにGradleが必要とするバージョン番号も決定します。クラスパスの階層を次の図で説明します。
たとえば、アプリにimplementation
dependency 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'
受け入れられた答えに代わるものは、新しいバージョンを強制するように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ファイルの依存関係セクションにこのコード行を追加してください
implementation 'com.Android.support:support-v4:28.0.0'
"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'
また、libsフォルダーも確認してください。
implementation fileTree(dir: 'libs', include: ['*.jar'])
そこからすべてのjarも選択します。 jarが互いに重複している場合や、下位の実装が重複している場合があります。
ライブラリに重複があり、この問題が発生しました。
私の場合、非常に古いEclipseプロジェクトをAndroid Studioに変換しました。そのため、使用される自動移行:
dependencies {
compile files('libs/Android-support-v13.jar')
}
このライブラリの行を削除するかコメントしてください。
コメントすると、Gradleスクリプトが正しく実行されました。
依存関係を置き換えます。
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'
私はそれらを試しました:
implementation(project( ':libxmiimp')){除外グループ: 'com.Android.support'、モジュール: 'support-v4'}
しかし、私の問題は、Android-support-v4.jarがローカルAndroidライブラリのlibフォルダーにどういうわけか入ったということでした。..削除して問題を修正しました
multiDexEnabled true gradle-appのAndroidブロックに上記の行を追加してください...