Приложение: transformClassesWithJarMergingForDebug. TransformException: java.util.zip.ZipException: дублировать запись во время выполнения gradlew assembleDebug
Когда я запускаю команду gradlew assembleDebug
в корневом проекте студии Android. Процесс сборки не работает, я получаю это сообщение:
Что пошло не так:
Выполнение не выполнено для задачи ': app: transformClassesWithJarMergingForDebug'. com.android.build.api.transform.TransformException: java.util.zip.ZipException: дублировать запись: орг/SLF4J/осущ/StaticLoggerBinder.class
В моем проекте есть два файла jar: slf4j-android-1.6.1-RC1.jar и slf4j-log4j12-1.7.21.jar. И оба эти баночки содержат две банки, которые включают org.sl4j.impl.StaticLoggerBinder.
Вот мой контент файла gradle, который находится в папке приложения:
android {
compileSdkVersion 23
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.ias.caniasandroid"
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dexOptions {
jumboMode true
javaMaxHeapSize "4g"
}
productFlavors {
}
}
dependencies {
debugCompile fileTree(include: ['*.jar'], dir: 'libs')
debugCompile files('libs/commons-lang3-3.4.jar')
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
}
Как я могу исправить проблему и успешно запустить gradlew assembleDebug
без изменения содержимого файлов jar?
Ответы
Ответ 1
Просто удалите приведенные ниже классы из slf4j-android-1.6.1-RC1
jar
org/sl4j/impl/StaticLoggerBinder.class
org/sl4j/impl/StaticMarkerBinder.class
org/sl4j/impl/StaticMDCBinder.class
Вы можете исключить определенный класс из jar в зависимости от gradle.
Чтобы сделать это, разархивируйте банку с помощью задачи Copy
, исключите нужный класс и затем добавьте зависимость файла от извлеченных классов.
task unzipJar(type: Copy) {
from zipTree('slf4j-android-1.6.1-RC1.jar')
into ("$buildDir/libs/slf4j") //TODO: you should update this line
include "**/*.class"
exclude "org/sl4j/impl/StaticLoggerBinder.class"
exclude "org/sl4j/impl/StaticMarkerBinder.class"
exclude "org/sl4j/impl/StaticMDCBinder.class"
}
dependencies {
compile files("$buildDir/libs/slf4j") {
builtBy "unzipJar"
}
}
Примечание: каждый раз, когда ваши коды компилируются.
С другой стороны, если вы не хотите компилировать пакет, но если вы хотите скомпилировать их и исключить из своего JAR, вы можете использовать
jar {
exclude('org/sl4j/impl/**')
}