Я пытаюсь протестировать свое приложение для Android (на устройстве), но в процессе сборки сборки появляется сообщение об ошибке: «Тип программы уже присутствует: com.google.protobuf.AnyProto» (или другие классы).
Я использую Google Firebase-Firestore DB, которая реализует grpc и использует вложенную зависимость: com.google.protobuf: protobuf-lite: 3.0.1.
Кроме того, библиотека Google / Capillary использует вложенную зависимость: com.google.protobuf: protobuf-java: 3.4.0.
Если я исключаю com.google.protobuf из зависимости Capillary libтолько приложение будет запускаться, а затем аварийно завершать работу при создании экземпляра необходимого класса Capillary с ошибкой: "java.lang.NoClassDefFoundError: Не удалось разрешить: Lcom / google / protobuf / GeneratedMessageV3;"
Вот мое приложениезависимости без исключений:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-media-compat:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-auth:16.2.0'
implementation 'com.google.firebase:firebase-messaging:17.5.0'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
//HERE ARE THE PROBLEM DEPENDENCIES:
implementation('com.google.firebase:firebase-firestore:18.2.0', {})
implementation('com.google.capillary:lib-android:1.0.0', { })
//
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'
}
А вот (дерево) показания приложения gradlew: зависимости:
...{CONTENT ABOVE OMITTED}...
+--- com.google.firebase:firebase-firestore:18.2.0
| +--- com.google.android.gms:play-services-base:16.0.1 (*)
| +--- com.google.android.gms:play-services-basement:16.0.1 -> 16.2.0 (*)
| +--- com.google.android.gms:play-services-tasks:16.0.1 (*)
| +--- com.google.firebase:firebase-auth-interop:16.0.1 (*)
| +--- com.google.firebase:firebase-common:16.1.0 (*)
| +--- com.google.firebase:firebase-database-collection:16.0.1
| +--- com.google.firebase:protolite-well-known-types:16.0.1
| | \--- com.google.protobuf:protobuf-lite:3.0.1
| +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
| +--- com.squareup.okhttp:okhttp:2.7.5
| | \--- com.squareup.okio:okio:1.6.0 -> 1.13.0
| +--- io.grpc:grpc-android:1.16.1
| | \--- io.grpc:grpc-core:[1.16.1] -> 1.16.1
| | +--- io.grpc:grpc-context:1.16.1
| | +--- com.google.code.gson:gson:2.7
| | +--- com.google.errorprone:error_prone_annotations:2.2.0
| | +--- com.google.code.findbugs:jsr305:3.0.2
| | +--- org.codehaus.mojo:animal-sniffer-annotations:1.17
| | +--- com.google.guava:guava:26.0-android
| | | +--- org.checkerframework:checker-compat-qual:2.5.2
| | | \--- com.google.j2objc:j2objc-annotations:1.1
| | +--- io.opencensus:opencensus-api:0.12.3
| | | \--- com.google.errorprone:error_prone_annotations:2.2.0
| | \--- io.opencensus:opencensus-contrib-grpc-metrics:0.12.3
| | +--- com.google.errorprone:error_prone_annotations:2.2.0
| | \--- io.opencensus:opencensus-api:0.12.3 (*)
| +--- io.grpc:grpc-okhttp:1.16.1
| | +--- io.grpc:grpc-core:[1.16.1] -> 1.16.1 (*)
| | +--- com.squareup.okhttp:okhttp:2.5.0 -> 2.7.5 (*)
| | \--- com.squareup.okio:okio:1.13.0
| +--- io.grpc:grpc-protobuf-lite:1.16.1
| | +--- io.grpc:grpc-core:1.16.1 (*)
| | +--- com.google.protobuf:protobuf-lite:3.0.1
| | \--- com.google.guava:guava:26.0-android (*)
| \--- io.grpc:grpc-stub:1.16.1
| \--- io.grpc:grpc-core:1.16.1 (*)
\--- com.google.capillary:lib-android:1.0.0
+--- com.google.capillary:lib:1.0.0
| \--- com.google.protobuf:protobuf-java:3.4.0
+--- com.google.crypto.tink:tink-android:1.1.0
+--- com.google.crypto.tink:apps-webpush:1.1.0
+--- com.google.protobuf:protobuf-java:3.4.0
+--- joda-time:joda-time:2.9.9
\--- com.android.support:support-annotations:27.1.1 -> 28.0.0
Я пытался использовать несколько комбинаций исключений пакетов, включая полностью исключающиеcom.google.protobuf как из Firestore, так и из Capillary, и реализую либо отдельно:
implementation('com.google.protobuf:protobuf-java:3.4.0')
//{OR}
//implementation('com.google.protobuf:protobuf-lite:3.0.1')
implementation('com.google.firebase:firebase-firestore:18.2.0', {
exclude group: 'com.google.protobuf'//, module: 'protobuf-lite'
})
implementation('com.google.capillary:lib-android:1.0.0', {
exclude group: 'com.google.protobuf'//, module: 'protobuf-java'
})
^ Я пробовал несколько комбинаций этого, но безуспешно.
Когда я исключаю com.google.protobuf 'только из зависимости Capillary lib (я не использую функциональность grpc этой библиотеки), я могу запустить приложение, однако онопепел, когда создается необходимый объект из библиотеки Capillary, с ошибкой: "java.lang.NoClassDefFoundError: Не удалось разрешить: Lcom / google / protobuf / GeneratedMessageV3;"
Может ли кто-нибудь помочь мне разобраться с этимчтобы не было избыточных зависимостей или отсутствующих определений классов, не нарушая функциональность капиллярной зависимости?