"Program türü zaten mevcut" ne anlama geliyor?


102

Android Studio'da bir uygulama oluşturmaya çalışıyorum. Eclipse Paho kitaplığını kademeli bağımlılık olarak ekledikten sonra (yoksa Maven mi? Android ekosisteminde yeniyim) aşağıdaki hatayı aldım:

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

Bu hatayla ilgili birçok farklı StackOverflow sorusunu kontrol ettim, ancak yanıtların tümü belirli kitaplıklara özeldir. Sadece hataya bir çözüm değil, aynı zamanda hatanın ne anlama geldiğine dair bir anlayış arıyorum . Bu şekilde, insanların kendi özel durumları için çözümler bulması daha kolay olacaktır. Şimdiye kadar hiçbir cevap bunu sağlamadı.

Diğer StackOverflow yanıtlarından, gradle dosyamla bir ilgisi olduğunu anladım. İşte 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/' }
} 

Yanıtlar:


73

Bu sorun genellikle, sizin durumunuzda birkaç kitaplık tarafından kullanılan support-v4 kitaplığı gibi bir adlandırma çakışmasından kaynaklanır.

Modül için bağımlılıkların listesini bulmak için app(uygulama için varsayılan modülün adı) gradlew app:dependenciestüm kitaplıkların bir listesini almak için bir yapabiliriz .

Bunun support-v4tarafından kullanıldığını bulduk :

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

Haritalar'daki support-v4'ün support-v13'ten sağlanan sürümü kullanacağını görüyoruz.

Eclipse kütüphanesinin başka bir versiyon (r7 ??) kullandığını da görüyoruz.

Sorununuzu çözmek için, modülü support-v4bu tutulma kitaplığından şu şekilde çıkarmayı deneyebilirsiniz :

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

O zaman uygulamanızı derleyebilmelisiniz.

Btw, kodunuzu test ederek tutulma modülünün kırılmamasına dikkat etmelisiniz.


2
Tamamen farklı bir çatışma yaşadım, ancak cevabınız aslında bir şeyin çatışabileceği fikrini ALMama yardımcı oldu. Android Exo Player kullanan 2 farklı oyuncu kullanıyorum. Bir gün birine yardım edebilir. Teşekkürler!
Vucko

@Vucko Çatışmayı nasıl belirlediniz?
Vir Rajpurohit

Şans eseri. Araştırmaya başladım ve brightcove video oynatıcı kitaplığımın bağımlı olduğu için exoplayer kullandığını fark ettim. Bunun sizin için ne olabileceğini görmeye çalışın.
Vucko

85

Benim için sadece projeyi temizlemek sorunu çözdü

Terminal Kullanımı :

./gradlew clean

Android Studio kullanarak :

Build (menu) > Clean Project

1
Doğru! Belki android stüdyosunun hatasıdır.
aolphn

3
Android Studio'da menüden de yapılabilir Build > Clean Project.
Salvador

1
Android Studio İçin File > Invalidate Caches / Restart > Invalidate and restartAynı sorun giderebilir
Max

Bu cevap, hatanın ne anlama geldiğini açıklamıyor, bu da sorunun sorduğu şey.
user2102929

Cevabı aylar sonra, sadece deneyimlerimi gelecekteki okuyucularla paylaşmak için yazdım .. uzun çözümler ve açıklamalar arayabilirler, ancak tek bir basit adımla çözülebilirler .. @ user2102929
MujtabaFR

13

Gönderen resmi Doc

Bir sınıf, çalışma zamanı sınıf yolunda birden fazla görünürse, aşağıdakine benzer bir hata alırsınız:

Program type already present com.example.MyClass

Bu hata genellikle aşağıdaki durumlardan biri nedeniyle oluşur:

  • İkili bağımlılık, uygulamanızın doğrudan bağımlılık olarak da içerdiği bir kitaplığı içerir.

    Örneğin, uygulamanız Kitaplık A ve Kitaplık B'ye doğrudan bir bağımlılık bildiriyor, ancak Kitaplık A zaten ikili dosyasında Kitaplık B'yi içeriyor. Bu sorunu çözmek için Kitaplık B'yi doğrudan bağımlılık olarak kaldırın.

  • Uygulamanızın yerel bir ikili bağımlılığı ve aynı kitaplıkta uzak ikili bağımlılığı vardır.

    Bu sorunu çözmek için, ikili bağımlılıklardan birini kaldırın. (Aynı kitaplığın jar ve gradle bağımlılığı olarak eklenip eklenmediğine bakın)


Çok teşekkürler. Birincisi benim için sorunun sebebiydi. CompileOnly'yi başka bir kitaplığın içindeki yinelenen kitaplık için kullandım, derleme bunu oluştururken dışarıda bırakacaktır.
Canavar Beyin

4

Benim de başıma geldi ama benim durumumda, aynı sınıfa sahip farklı bağımlılıkları eklemeye çalışıyorum debugApive Apiböylece Android Studio yinelenen sınıf olarak işaretlendi, bu yüzden sorunu derleme varyantına bağlı olarak farklı bağımlılıkları dahil ederek debugApi& kullanarak releaseApiçözdüm.


2

Uygulama düzeyindeki Gradle dosyasına Destek kitaplığı ekleyin

uygulama 'com.android.support:design:27.1.0'


2

Benim durumumda, 2 * .jar dosyam veya 2 kitaplığım olduğu anlamına geliyor. Örneğin: 2 var youtube.jariçinde app/libaryve module/libary bir kere gereksiz silin ve iyi olacak


1

Bu sorunla ilgili sorun - Kitaplığı modül olarak ve başka bir kitaplıktaki bağımlılıkla aynı kitaplığı kullanıyorsanız.

Örnek: KitaplıkA Modül olarak içe aktarıldı ve aynı KitaplıkA başka herhangi bir kitaplık modülüne bağımlılık olarak eklendi.

Bu sorunu nasıl çözebilirim?

1.Çözüm -> ikisini de korumak istiyorsanız -> LibraryA modülünün paket adını yeniden düzenleyin

2.Çözüm -> LibraryA bağımlılığını kaldırın ve modülü kullanın

uygulama projesi (': LibraryA')


0

Umarım birisine yardımcı olur, Build> Clean Project benim için çalıştı.


3
Bu çözüm başka bir cevabın yorumlarında zaten önerildi
Fanick

0

Aynı sorunu yaşıyorum ancak Android Studio 4.0.2'den 4.1'e güncelledikten sonra projemin dahili kitaplığında. Başarısız bir çok şeyi araştırdım ve denedim. Benimle aynı vakaya sahipseniz, umarım bu cevap yardımcı olabilir. Ne yaptım:

  1. Clean Projectsonra Rebuild Project- başarısız oldu
  2. Invalidate Caches / Restart - başarısız oldu
  3. Genel Gradle önbelleklerini sil ( /User/username/.gradle/cachesmacOS için) - başarısız oldu
  4. Komutla : terminal aracılığıyla ./gradlew app:dependencies veya Gradle araç penceresi aracılığıyla uygulama bağımlılıklarını araştırma : project->Tasks->android->androidDependencies- şüpheli bir şey yok
  5. Sil .gradleve .ideakök projemden - başarı (her ikisini de silmem gerekip gerekmediğinden emin olmasam da. Belki sadece birini silip çalışıyor)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.