使用proguard在Android上使用ORMLite崩溃

时间:2013-01-10 17:54:45

标签: android obfuscation proguard ormlite

我们在Android应用中使用ORMLite。它工作正常,除非我们尝试在打开proguard的情况下进行构建。

我已经阅读了各种类似的帖子,到目前为止我已经进入了我的proguard-project.txt

-keep class com.j256.** {
   *;
}

如以下讨论http://sourceforge.net/p/proguard/discussion/182456/thread/6765bb69

中所述

我已经

-keepclassmembers class * { 
  public <init>(android.content.Context);
  public <init>(android.app.Activity,int);
}

正如另一个stackoverflow问题Proguard with OrmLite on Android

中所建议的那样

但它仍然无效。如果我添加

,我可以让它运行
-dontobfuscate

但是,这有点错过了使用proguard的重点。

当我跑步时,我得到一个

IllegalStateException: Could not find OpenHelperClass because none of the generic
parameters of class class <our.package.name>.LaunchActivity extends
OrmLiteSqliteOpenHelper.  You should use getHelper(Context, Class) instead.

哪里

public class LaunchActivity extends OrmLiteBaseActivity<DatabaseHelper>

public class DatabaseHelper extends OrmLiteSqliteOpenHelper

我添加了

-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper

-keep public class <our.package.name>.LaunchActivity

但仍然没有运气。这个问题似乎在之前被问过(Problems with OrmLite and proguard obfuscation),但我希望某人会知道解决方案是什么!

1 个答案:

答案 0 :(得分:6)

错误消息提到了泛型参数,因此ORMLite可能正在使用反射来检索泛型类型信息。此信息存储在ProGuard默认删除的可选签名属性(Java擦除泛型类型)中。你可以保留

-keepattributes Signature