Я пытаюсь сжать приложение для Android, которое потребляет ical4j.jar
.
Когда я создаю apk с помощью proguard, используя gradle proguardDebug
, я получаю
- Warning: net.fortuna.ical4j.model.CalendarFactory: can't find referenced method 'void finalize()' in library class java.lang.Object
- 6 additional similar warnings for
finalize()
- 6 additional similar warnings for
- Warning: net.fortuna.ical4j.model.CalendarFactory: can't find referenced method 'java.lang.Object clone()' in library class java.lang.Object
- 6 additional similar warnings for
clone()
- 6 additional similar warnings for
Я уже подтвердил, что android-7 поддерживает finalize()
и clone()
: "... \ Android ... \ sdk \ platform \ android-7 \ android.jar" имеет методы finalize()
и clone()
в классе java.lang.Object
.
Ты хоть представляешь, как это исправить?
Примечание: это не дубликат других вопросов «proguard не может найти ссылочный метод», потому что в моем конкретном случае я думаю, что отсутствующий метод должен быть там.
Я использую
- proguard-4.11 с
- gradle-1.11
- Groovy: 1.8.6
- Ant: Apache Ant (TM) версии 1.9.2, скомпилированный 8 июля 2013 г.
- Плющ: 2.2.0
- JVM: 1.7.0_25 (Oracle Corporation 23.25-b01)
- ОС: Windows 7 6.1 amd64
- ical4j.jar 1.0.5
это конфигурация proguard proguard-rules.txt
, которая, вероятно, нуждается в исправлении:
# 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.**
Это мой 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'
}
[Обновление 2014-12-20]
Я добавил свою рабочую конфигурацию в ответ ниже.
Примечание. В текущей версии Android Studio 1.0 (android.buildToolsVersion> = '20') вы должны заменить runProguard на minifyEnabled.
Пример
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}