【发布时间】:2014-08-30 13:12:01
【问题描述】:
我正在构建一个使用 Apache POI 库的应用程序。当我调试应用程序(在不运行 Proguard 的情况下编译它)时,一切正常,但是在导出 APK 后,当我运行应用程序并打开 Excel 文件时,出现以下异常:
RuntimeException - Caused by: java.lang.ExceptionInInitializerError at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:301)
这是我的 proguard 设置文件:
-injars bin/classes
-injars libs/android-support-v13.jar
-outjars bin/classes-processed.jar
-libraryjars /usr/bin/adt/sdk/platforms/android-19/android.jar
-libraryjars libs/poi-3.10.1.jar
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-dontwarn org.apache.poi.**
-dontwarn com.google.**
-dontwarn android.support.**
-keep public class * extends android.app.Activity
-keep public class * extends android.support.v4.app.FragmentActivity
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep class com.android.vending.billing.**
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
Proguard 中 Apache POI 的正确配置是什么?我使用 POI 仅读取旧 (Excel 97) 格式,因此我不需要所有其他 jar。
【问题讨论】:
-
stackoverflow.com/questions/25469560/… 对 org.apache.poi 执行相同的保持/忽略警告。
-
当我不使用混淆时它可以工作,但是我想要混淆
-
鉴于 Apache POI 是开源的,因此代码可供所有人免费使用,您到底为什么要混淆编译后的 POI 类?
-
我不需要混淆 POI,但是我需要它被 ProGuard 缩小,所以我别无选择,只能混淆它
标签: java android apache-poi proguard