OrmLite和Proguard混淆的问题

4
当我在使用Proguard对包含OrmLite的项目进行处理时,我遇到了以下错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package.name/com.package.name.activities.StartActivity}:
java.lang.IllegalStateException: Could not find OpenHelperClass because none of the generic parameters of class class com.package.name.activities.StartActivity extends OrmLiteSqliteOpenHelper.  You should use getHelper(Context, Class) instead.

我已经尝试了来自Proguard with OrmLite on Android和其他资源的所有建议,但都没有结果。

4个回答

5

将以下内容放入您的proguard-project文件和proguard-optimization文件中(如果使用优化)。

 # Your application may contain more items that need to be preserved; 
 # typically classes that are dynamically created using Class.forName: 
 # ormlite uses reflection 
 -keep class com.j256.** { *; }
 -keep class com.j256.**
 -keepclassmembers class com.j256.**
 -keep enum com.j256.**
 -keepclassmembers enum com.j256.**
 -keep interface com.j256.**
 -keepclassmembers interface com.j256.**

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

-keepattributes *Annotation*

每个模型类都需要:
-keep class com.xyz.components.**
-keepclassmembers class com.xyz.components.** { *; } 

我一点也不喜欢最后一部分,但是我已经厌倦了试图找到更好的解决方案。


1

0

这是关于最新版本OrmLite 5的一个小改进。

您可能需要添加以下代码行来隐藏一些新警告:

-dontwarn com.j256.ormlite.android.**
-dontwarn com.j256.ormlite.logger.**
-dontwarn com.j256.ormlite.misc.**

在这个帖子中查找更多细节:“如何为ormlite编写proguard配置?

0
你可以使用以下的 Proguard 配置,保留所有被 OrmLite 使用的模型类。
-keep @com.j256.ormlite.table.DatabaseTable class * {
    @com.j256.ormlite.field.DatabaseField <fields>;
    @com.j256.ormlite.field.ForeignCollectionField <fields>;
    # Add the ormlite field annotations that your model uses here
    <init>();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接