Android - Proguard double zip erreur de saisie - Android Support Library
Je suis en train d'utiliser Proguard dans un application android qui utilise android de projets de bibliothèque.
Mon core android projet dépend de deux android bibliothèque de projets. Le noyau et la bibliothèque de projets ont des dépendances sur android support library (dans mon cas: android-support-v4.jar).
Quand j'essaie de le dissimuler avec ProGuard, puis je reçois toujours le message d'erreur suivant (Si le Proguarg est désactivé dans le Gradle script, puis de la compilation fonctionne très bien.):
: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-v41.0.3\classes.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [classes.jar:android/support/v4/graphics/drawable/DrawableCompat$HoneycombDrawableImpl.class]))
Le script de build Gradle pour mon projet de base:
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')
}
Le script de build Gradle pour l'un des projets de la bibliothèque:
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']
}
}
}
L' (partie) de ProGuard config est:
-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
, changer les dépendances de maven depdencies. Ensuite, utilisez android.packagingOptions
pour exclure les fichiers à l'origine de problèmes.Merci pour la rapidité de la commet. Pouvez vous s'il vous plaît décrire plus profondément, comment la mettre en œuvre dans ce cas?
Quel est le statut?
OriginalL'auteur BertZ | 2015-02-13
Vous devez vous connecter pour publier un commentaire.
Projet Principal
build.gradle
:Prendre un peu de temps pour convertir ces pots:
Pour les Dépendances Maven qui peut être facilement géré(j'ai essayé de trouver la plupart d'entre eux pour vous!):
Après cela, vous devriez être en mesure d'utiliser
android.packagingOptions
:Projet De Bibliothèque
build.gradle
Votre projet de bibliothèque doit être modifié à partir de:
:
Votre principal problème était que vous aviez deux différents
com.android.support:support-v4
, dans votre projet de bibliothèque et dans votre projet principal.Vous avez besoin d'ajouter que "l'entrée" de la
packagingOptions
.J'ai ajouté le code suivant dans la gradle script, il contient l'entrée, mais il n'a pas d'effet sur le double zip sortie d'erreur:
J'ai essayé votre dernière suggestion, merci. J'apprécie vraiment votre soutien, mais l'erreur est toujours la même.
j'ai la même erreur. avez-vous fixé? merci.
OriginalL'auteur Jared Burrows