Android - Proguard doppelte zip-Eintrag Fehler - Android Support-Bibliothek
Ich versuche, mit Proguard in einem android Anwendung, die verwendet android-library-Projekten.
Meine core-android-Projekt hängt von zwei android-library-Projekten bereit. Der Kern und die Bibliothek Projekte haben Abhängigkeiten auf android support library (in meinem Fall: android-support-v4.jar).
Wenn ich versuche, zu verschleiern, es mit ProGuard, dann bekomme ich immer die folgende Fehlermeldung (Wenn die Proguarg deaktiviert ist, in der Gradle-Skript, dann ist die Zusammenstellung gut funktioniert.):
:MYANDROIDPROJECT:proguardDemoRelease FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':MYANDROIDPROJECT:proguardDemoRelease'.
> java.io.IOException: Can't write [MYANDROIDPROJECT_PATH\build\intermediates\classes-proguard\demo\release\classes.jar] (Can't read [MYANDROIDPROJECT_PATH\build\intermediates\exploded-aar\com.android.support\support-v4\21.0.3\classes.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [classes.jar:android/support/v4/graphics/drawable/DrawableCompat$HoneycombDrawableImpl.class]))
Den Gradle-build-Skript für meinen core Projekt:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.2+'
}
}
apply plugin: 'android'
android {
buildToolsVersion "19.1.0"
compileSdkVersion 19
lintOptions {
abortOnError false
}
signingConfigs {
localks {
storeFile file("keystore/keystore")
storePassword "xx"
keyAlias "xx"
keyPassword "xx"
}
}
buildTypes {
debug {
debuggable true
runProguard false
zipAlign true
signingConfig signingConfigs.localks
}
release {
debuggable false
zipAlign true
proguardFile 'proguard.txt'
runProguard true
signingConfig signingConfigs.localks
}
}
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
ndk{
moduleName "S3DClient"
abiFilter "armeabi-v7a"
stl "gnustl_static"
}
}
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
resources.srcDirs = ['src/main/java']
aidl.srcDirs = ['src/main/java']
renderscript.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
jni.srcDirs = []
}
paid {
manifest.srcFile 'src/paid/AndroidManifest.xml'
java.srcDirs = ['src/paid/java']
res.srcDirs = ['src/paid/res']
jni.srcDirs = []
}
demo {
manifest.srcFile 'src/demo/AndroidManifest.xml'
java.srcDirs = ['src/demo/java']
res.srcDirs = ['src/demo/res']
jni.srcDirs = []
}
}
productFlavors {
paid {
applicationId = "hu.myprojectpackage1"
}
demo {
applicationId = "hu.myprojectpackage2"
}
}
}
dependencies {
compile files('src/main/libs/sqliteassethelper-2.0.1.jar',
'src/main/libs/S3DXAndroidTools.jar',
'src/main/libs/roboguice-2.0.jar',
'src/main/libs/open-javageom.jar',
'src/main/libs/openawt.geom.jar',
'src/main/libs/libGoogleAnalyticsServices.jar',
'src/main/libs/javax.inject-1.jar',
'src/main/libs/guice-3.0-no_aop.jar',
'src/main/libs/commons-lang3-3.1.jar',
'src/main/libs/bugsense-3.6.jar')
compile fileTree(dir: "$buildDir/native-libs", include: '*.jar')
compile 'com.android.support:support-v4:21.0.+'
compile project(":lib/SlidingLayer")
compile project(':lib/BlutoothCommunicationHandler')
paidCompile project(':lib/Licencing')
}
Den Gradle-build-Skript für eine von der Bibliothek Projekte:
apply plugin: 'android-library'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.2+'
}
}
dependencies {
compile "com.android.support:support-v4:19.0.+"
}
android {
buildToolsVersion "19.1.0"
compileSdkVersion 19
defaultConfig {
minSdkVersion 4
targetSdkVersion 18
}
dexOptions {
preDexLibraries = false
}
lintOptions {
abortOnError false
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
}
}
}
Den (relevanten Teil -) ProGuard config ist:
-libraryjars src/main/libs/android-support-v4.jar
-keep class android.** { *; }
-keep class android.support** { *; }
-dontnote
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-dontwarn org.openawt.**
-dontwarn android.support.**
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-assumenosideeffects class android.util.Log {
public static *** e(...);
public static *** w(...);
public static *** wtf(...);
public static *** d(...);
public static *** v(...);
}
-keepattributes Signature
-keepattributes *Annotation*
Gradle
ändern Sie diese Abhängigkeiten zu maven depdencies. Dann nutzen Sie android.packagingOptions
ausschließen die Dateien, die Probleme verursachen.Danke für die schnelle commet. Können Sie bitte beschreiben Sie es tiefer, wie es zu implementieren, in diesem Fall?
Was ist der status?
InformationsquelleAutor BertZ | 2015-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Main Projekt
build.gradle
:Einige Zeit dauern, zu konvertieren, diese lokalen Gläser:
Zur Maven-Abhängigkeiten können einfach verwaltet werden(ich habe versucht, zu finden, die meisten von Ihnen für Sie!):
Danach sollten Sie in der Lage sein zu verwenden
android.packagingOptions
:- Bibliothek-Projekt
build.gradle
Ihre-Bibliothek-Projekt muss geändert werden:
:
Ihr Hauptproblem war, dass Sie hatte zwei verschiedene
com.android.support:support-v4
man in Ihrer Bibliothek-Projekt, und in Ihrem wichtigsten Projekt.Sie müssen hinzufügen, dass der "Einstieg" in die
packagingOptions
.Ich habe den folgenden code in das gradle-Skript, es enthält den Eintrag, aber es hat keine Auswirkung auf den doppelten zip-enty Fehler:
Ich habe versucht deinen letzten Vorschlag als gut, vielen Dank. Ich wirklich schätzen Ihre Unterstützung, aber die Fehler sind immer noch die gleichen.
ich habe die gleichen Fehler. haben Sie es behoben? danke.
InformationsquelleAutor Jared Burrows