1. ホーム
  2. android

[解決済み] Program type already present "とはどういう意味ですか?

2022-02-14 02:19:49

質問事項

Android Studioでアプリを作ろうとしています。 Eclipse Pahoライブラリをgradle依存として追加した後(またはMaven? 私はAndroidエコシステムに新しいです)、私は次のエラーが発生しました。

Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat
Message{kind=ERROR, text=Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat, sources=[Unknown source file], tool name=Optional.of(D8)}

このエラーに関連するStackOverflowの質問をいろいろ調べてみましたが、回答はすべて特定のライブラリに限定されています。 私はこのエラーの解決策だけでなく、このエラーが何であるかを理解することを求めているのです。 意味 . そうすれば、人々は具体的なケースに応じた解決策を見出すことが容易になります。 今のところ、そのような回答はありません。

他のStackOverflowの回答から、私のgradleファイルに関係するものであることがわかりました。 そこで、app/build.gradleを紹介します。

apply plugin: 'com.android.application'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "---REDACTED FOR PRIVACY---"
        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(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support:support-media-compat:27.1.0'
    implementation 'com.android.support:support-v13:27.1.0'
    implementation 'com.google.android.gms:play-services-maps:12.0.1'
    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.android.support.constraint:constraint-layout:1.0.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.0.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.0.2'
}

repositories {
    maven { url 'https://repo.eclipse.org/content/repositories/paho-releases/' }
} 

解決方法は?

この問題は通常、名前の衝突から発生します。あなたの場合、support-v4ライブラリが複数のライブラリで使用されていることが原因です。

を見つけるには 依存関係リスト モジュールの app (アプリのデフォルトのモジュール名)を作成するために gradlew app:dependencies を使用して、すべてのライブラリのリストを取得します。

私たちは、以下のことを発見しました。 support-v4 が使われています。

//short version of the dependencies list highlighting support-v4
+--- com.android.support:support-v13:27.1.0
|    \--- com.android.support:support-v4:27.1.0

+--- com.google.android.gms:play-services-maps:12.0.1
|    +--- com.google.android.gms:play-services-base:12.0.1
|    |    +--- com.google.android.gms:play-services-basement:12.0.1
|    |    |    +--- com.android.support:support-v4:26.1.0 -> 27.1.0 (*)

+--- org.eclipse.paho:org.eclipse.paho.android.service:1.0.2
|    +--- com.google.android:support-v4:r7  // <- problem here

Mapsのsupport-v4は、support-v13から提供されるバージョンを使用することがわかります。

また、eclipseライブラリは別のバージョン(r7 ?)を使用していることがわかります。

この問題を解決するには、モジュール support-v4 をこのeclipseライブラリから削除してください。

implementation ('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
    exclude module: 'support-v4'
}

そして、アプリケーションをコンパイルすることができるはずです。

eclipseのモジュールが壊れないように、コードをテストする必要があります。