У нас есть сторонний файл aar, который из соображений размера мы решили выделить в отдельную динамическую функцию (модуль). И основное приложение, и динамический модуль используют com.google.code.gson:gson
, когда они были в одном модуле, мы удалили нашу зависимость от gson
, но теперь нашему основному модулю это нужно.
Сборка проекта в порядке, но когда мы пытаемся собрать пакет (-ы), мы получаем
Ошибка "Тип программы уже присутствует: com.google.gson.FieldNamingPolicy $ 5"
Мы пытались исключить gson из модуля gradle: как в разделах dependencies, так и в android, но безуспешно. это сторонний aar, поэтому у нас нет доступа к его коду или зависимостям.
Главный градиент приложения:
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }
mavenCentral()
}
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 16
targetSdkVersion 26
versionCode 91
versionName "1.1.91"
multiDexEnabled true
}
buildTypes {
debug {
versionNameSuffix "-D"
matchingFallbacks = ['debug']
}
release {
matchingFallbacks = ['release']
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
packagingOptions {
pickFirst 'META-INF/license.txt'
pickFirst 'META-INF/DEPENDENCIES'
}
dexOptions {
javaMaxHeapSize "2g"
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
targetCompatibility JavaVersion.VERSION_1_8
}
flavorDimensions "permissions"
productFlavors {
}
dynamicFeatures = [":dynamic_feature"]
}
dependencies {
implementation files('libs/gcm.jar')
//...
implementation 'com.google.code.gson:gson:2.8.2'
//...
}
apply plugin: 'com.google.gms.google-services'
градиент динамической функции:
apply plugin: 'com.android.dynamic-feature'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
configurations {
//DOES NOT RESOLVE THE PROBLEM
all*.exclude group: 'com.google.gson'
all*.exclude group: 'com.google.code.gson'
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation project(':myapp')
//...
implementation files('libs/sdk.3rd-party.aar')
configurations {
//DOES NOT RESOLVE THE PROBLEM
all*.exclude group: 'com.google.gson'
all*.exclude group: 'com.google.code.gson'
}
}
Ошибка:
org.gradle.execution.MultipleBuildFailures: сборка завершена с 1 ошибкой. ... Вызвано: java.lang.RuntimeException: com.android.build.api.transform.TransformException: ошибка при создании основного списка dex: ошибка при слиянии архивов dex: тип программы уже присутствует: com.google.gson.FieldNamingPolicy 5 долларов
'libs/sdk.3rd-party.aar'
- это внешняя третья сторона, предоставленная «как есть», которая недоступна в maven. Мы можем построить его вместе или по отдельности. все работает нормально. но мы не можем собрать его как пакет, поэтому мы не можем опубликовать его в Google Play. - person Snufkin   schedule 22.06.2019runtime files('libs/sdk.3rd-party.aar')
дает нам ошибку (Не удалось найти метод runtime () для аргументов [сборник файлов]) относительно защиты: как мы защищаем конкретную библиотеку в aar? Спасибо!! - person Snufkin   schedule 26.06.2019