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()
  • 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()

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