I am trying to compress an android application that consumes ical4j.jar .
When I create apk with proguard using gradle proguardDebug I get
- Warning: net.fortuna.ical4j.model.CalendarFactory: cannot find the reference method 'void finalize ()' in the java.lang.Object library class
- 6 additional similar warnings for
finalize()
- Warning: net.fortuna.ical4j.model.CalendarFactory: cannot find the reference method 'java.lang.Object clone ()' in the java.lang.Object library class
- 6 additional similar warnings for
clone()
I have already confirmed that android-7 support supports finalize() and clone() : "... \ Android ... \ sdk \ platform \ android-7 \ android.jar" has finalize() and clone() methods in class java.lang.Object .
Do you have an idea how to fix this?
Note: this is not a duplicate of the other βproguard cannot find the reference methodβ questions, because in my particular case I believe that the missing method should be there.
I use
- proguard-4.11 s
- gradle -1.11
- Groovy: 1.8.6
- Ant: Apache Ant (TM) version 1.9.2, compiled July 8, 2013
- Ivy: 2.2.0
- JVM: 1.7.0_25 (Oracle Corporation 23.25-b01)
- OS: Windows 7 6.1 amd64
- ical4j.jar 1.0.5
this is the proguard configurator proguard proguard-rules.txt , which probably needs some correction:
# 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.**
This is my 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' }
[Update 2014-12-20]
I added my working configuration as an answer below.
Note: with current Android Studio 1.0 (android.buildToolsVersion> = '20') you must replace runProguard with minifyEnabled
Example
android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } }
java android gradle proguard ical4j
k3b
source share