6

我们在我们的 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

但仍然没有运气。这个问题似乎以前被问过(OrmLite 和 proguard 混淆问题),但我希望有人知道解决方案是什么!

4

1 回答 1

6

错误信息中提到了泛型参数,所以 ORMLite 可能是使用反射来检索泛型类型信息。此信息存储在可选的 Signature 属性中(Java 删除泛型类型),ProGuard 默认将其删除。您可以将它们与

-keepattributes Signature
于 2013-01-10T21:14:53.903 回答