Конфликт между protobuf-javalite (Firebase) и protobuf-java (google-cloud-datastore) в проекте Flutter/Android с внешнимAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Конфликт между protobuf-javalite (Firebase) и protobuf-java (google-cloud-datastore) в проекте Flutter/Android с внешним

Сообщение Anonymous »

Я работаю над проектом Flutter/Android, который интегрирует внешний модуль Java под названием dtp. В проекте возникает конфликт зависимостей между двумя версиями Protobuf: protobuf-javalite и protobuf-java.
Вот ситуация:
Flutter/Android: для взаимодействия с Firebase мне нужен protobuf-javalite, который необходим библиотеками Firebase, такими как firebase-auth, firebase-firestore и т. д.
Модуль Java (dtp): этот модуль использует protobuf-java, поскольку ему необходимо взаимодействовать с библиотекой com.google.cloud:google-cloud-datastore, для которой требуется эта версия Protobuf.
Проблема:
Две версии Protobuf (protobuf-javalite и protobuf-java) вызывают конфликты классов и ошибки во время компиляции, поскольку они используют схожие классы и API. Это приводит к дублированию классов и проблемам с генерацией кода.
/root-project

├── android/
│ ├── app/ (Application Android Flutter)
│ │ ├── build.gradle
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ ├── com/
│ │ │ │ │ └── mycompany/
│ │ │ │ │ └── mycode/
│ │ │ ├── res/ (Ressources Android)
│ │ │ ├── AndroidManifest.xml
│ │ │ └── ...
│ │ ├── dtp/ (Module Java )
│ │ │ ├── build.gradle
│ │ │ ├── src/
│ │ │ │ └── main/
│ │ │ │ ├── java/
│ │ │ │ └── ...
│ │ └── ... (

├── build.gradle
└── settings.gradle

Я пробовал использовать плагин com.google.protobuf в Gradle, чтобы принудительно использовать конкретную версию, но это не решило конфликт, поскольку Firebase специально требует protobuf-javalite и google- Cloud-datastore требует protobuf-java.
Я изучил варианты исключения в Gradle, чтобы исключить одну из версий Protobuf, но это нарушает определенные функции Firebase или google-cloud-datastore.
Я также пытался интегрировать свой Java-код (dtp) в виде файла jar, но у меня тот же повторяющийся класс или отсутствующий класс; В частности, этот класс:
java.lang.NoClassDefFoundError: Не удалось разрешить: Lcom/google/protobuf/GeneratedMessageV3;
Вот зависимости моего Android/app/build.gradle :

implementation 'androidx.core:core:1.13.1'
implementation ('androidx.appcompat:appcompat:1.6.0')
implementation ('com.google.http-client:google-http-client-jackson2:1.40.0')
implementation ('org.eclipse.jgit:org.eclipse.jgit:5.13.0.202109080827-r')
implementation ("org.datatransferproject:portability-spi-transfer:1.0.4")
implementation 'com.google.api-client:google-api-client:1.31.1'
implementation (project(":dtp")) {
exclude group: 'com.google.firebase', module: 'protolite-well-known-types'
}


И мой Android/dtp/build.gradle:
implementation platform ('com.google.cloud:libraries-bom:26.26.0'){
exclude group: 'com.google.protobuf', module:'protobuf-java'
}
implementation ("org.eclipse.jgit:org.eclipse.jgit:6.10.0.202406032230-r")
implementation ("com.google.protobuf:protobuf-java"){
exclude group: 'com.google.protobuf', module: 'protobuf-javalite'
}

implementation ('org.datatransferproject:portability-data-transfer-google:1.0.4'){
exclude group: 'com.google.protobuf', module: 'protobuf-javalite'
// exclude group: 'com.google.protobuf', module: 'protobuf-java'
}

implementation("org.datatransferproject:portability-types-common:1.0.4"){
exclude group: 'com.google.protobuf', module: 'protobuf-java'
}
implementation ("org.datatransferproject:portability-spi-transfer:1.0.4"){
exclude group: 'com.google.protobuf', module: 'protobuf-java'
}
implementation ("org.datatransferproject:portability-api-launcher:1.0.4"){
exclude group: 'com.google.protobuf', module: 'protobuf-java'
}
implementation('org.datatransferproject:portability-types-transfer:1.0.4'){
exclude group: 'com.google.protobuf', module: 'protobuf-java'
}
implementation ('org.datatransferproject:portability-cloud-google:1.0.4'){
exclude group: 'com.google.protobuf', module: 'protobuf-javalite'
// exclude group: 'com.google.protobuf', module: 'protobuf-java'
}
implementation ('com.google.cloud:google-cloud-datastore'){
exclude group: 'com.google.protobuf', module: 'protobuf-javalite'
// exclude group: 'com.google.protobuf', module: 'protobuf-java'
}

implementation 'com.google.api-client:google-api-client:1.31.1'
implementation 'com.google.http-client:google-http-client:1.40.1'
implementation 'com.google.oauth-client:google-oauth-client:1.4.0'
implementation 'com.google.guava:guava:31.1-jre'

implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.0'
implementation 'com.fasterxml.jackson.core:jackson-core:2.15.0'

implementation ('io.grpc:grpc-alts:1.18.0'){
exclude group: 'com.google.protobuf', module: 'protobuf-java'
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... e-cloud-da
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»