comment fixer le proguard avertissement 'ne peut pas trouver référencé méthode de méthodes existantes "clone" et "finaliser" de la classe java.lang.Objet
J'essaie de compresser une application android qui consomme ical4j.jar
.
Quand j'construire l'apk avec proguard à l'aide de gradle proguardDebug
- je obtenir
- Avertissement: net.fortuna.ical4j.de modèle.CalendarFactory: vous ne trouvez pas référencé méthode " void finalize ()", dans bibliothèque de classe java.lang.Objet
- 6 des avertissements similaires pour
finalize()
- 6 des avertissements similaires pour
- Avertissement: net.fortuna.ical4j.de modèle.CalendarFactory: vous ne trouvez pas référencé méthode java.lang.Object clone ()", dans bibliothèque de classe java.lang.Objet
- 6 des avertissements similaires pour
clone()
- 6 des avertissements similaires pour
J'ai déjà vérifié que android-7 prend en charge les finalize()
et clone()
: "...\Android...\sdk\platforms\android-7\android.jar" a des méthodes finalize()
et clone()
dans la classe java.lang.Object
.
Avez-vous une idée de comment résoudre ce problème?
Remarque: ce n'est pas un doublon de l'autre "proguard ne trouvez pas référencé méthode" questions parce que dans mon cas précis, je pense que la méthode manquante devrait être là.
Je suis en utilisant
- proguard-4.11 avec
- gradle-1.11
- Groovy: 1.8.6
- Ant: Apache Ant(TM) version 1.9.2 compilé le 8 juillet 2013
- Ivy: 2.2.0
- JVM: 1.7.0_25 (Oracle Corporation 23.25-b01)
- Système d'exploitation: Windows 7 6.1 amd64
- ical4j.jar 1.0.5
c'est proguard config proguard-rules.txt
que probablement besoin de corrigé:
# proguard-rules.txt
## ical4j also contains groovy code which is not used in android
-dontwarn groovy.**
-dontwarn org.codehaus.groovy.**
-dontwarn org.apache.commons.logging.**
-dontwarn sun.misc.Perf
-dontnote com.google.vending.**
-dontnote com.android.vending.licensing.**
C'est mon build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
classpath 'net.sf.proguard:proguard-gradle:4.11'
}
}
allprojects {
repositories {
mavenCentral()
}
}
apply plugin: 'android'
configurations {
compile.exclude group: 'commons-logging' //referenced in some portable lib. use androids internal instead
}
android {
compileSdkVersion 19
buildToolsVersion '19.0.3'
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
//used for testing. remove if it works as expected
debug {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'org.mnode.ical4j:ical4j:1.0.5'
compile 'backport-util-concurrent:backport-util-concurrent:3.1'
compile 'commons-codec:commons-codec:1.8'
compile 'commons-lang:commons-lang:2.6'
}
[Mise à jour 2014-12-20]
J'ai ajouté mon travail de configuration comme réponse ci-dessous.
Remarque: avec Android Studio 1.0 (android.buildToolsVersion >= '20'), vous devez remplacer
runProguard avec minifyEnabled
Exemple
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
OriginalL'auteur k3b | 2014-05-27
Vous devez vous connecter pour publier un commentaire.
net.fortuna.ical4j.model.CalendarFactory
s'étendgroovy.util.AbstractFactory
qui s'étendjava.lang.Object
. Cependant, la classe moyenne est absent de votre entrée (vous êtes la suppression de la correspondante de la mise en garde -dontwarn). Avec une partie de la hiérarchie de classe manquante, ProGuard ne se rend pas compte que CalendarFactory peut accéder à l'protégé méthodesclone
etfinalize
, et il imprime ces avertissements.Depuis votre code n'a probablement pas d'utiliser la classe à tous, vous pouvez supprimer les avertissements:
Ou à couvrir l'ensemble des catégories similaires:
Vous ne devez pas ajouter de tout -options pour ce problème; le SDK Android précise déjà de l'Android de base liées à l'-options pour vous.
-keep class net.fortuna.ical4j.model.** { *; }
qui réduit davantage apk plus de 60 ko. furtunately mon application android ne marche pas à utiliser les groovy dépendant de classes. J'ai mis à jour ma propre réponse avec la solution finaleOriginalL'auteur Eric Lafortune
C'est mon proguard config-file. Essayez de le copier-coller
Puis ajouter votre code, comme suit:
Lors de l'utilisation de
également ajouter
Le faire pour toutes les bibliothèques externes.
-keep public class * extends android.app.Activity
doit venir deAndroid/.../tools/proguard/proguard-android(-optimize).txt
avez-vous essayé d'utiliser -garder la classe ? Je sais que mon dossier est à l'aide de tous de android des règles spécifiques. Vous pouvez essayer de tourner de ce système de règles en supprimant ${sdk.dir}/tools/proguard/proguard-android.txt de projet.fichier de propriétés (c'est-à lorsque vous utilisez eclipse)
je n'ai pas utilisé le garder pour le groovy partie parce que je ne veux garder le groovy partie de la lib. Cependant, je suis en utilisant le garder dans ma solution actuelle. Je upvoted cette réponse de -1 à 0, car il m'a beaucoup aidé même si elle n'était pas la solution
OriginalL'auteur Dawid C
[mettre à jour le 2014-05-30 reformuler ce texte]
Merci à @EricLafortune réponse qui m'a aidé à comprendre et à résoudre le problème.
Pour d'autres qui veulent compresser android ical4j apps voici mon travail soluntion:
de toutes les classes avec le
in library class java.lang.Object
- question sont de l'espace de nomsj'ai donc ajouté ces lignes à
proguard-rules.txt
statistiques:
OriginalL'auteur k3b