2012-03-24 48 views
21

Android上的ormlite库应该如何使用proguard?Android上的OrmLite Proguard

尝试这样的:

-keep class com.j256.** 
-keepclassmembers class com.j256.** 
-keep enum com.j256.** 
-keepclassmembers enum com.j256.** 
-keep interface com.j256.** 
-keepclassmembers interface com.j256.** 

,但我得到:

03-23 20:23:54.518:E/AndroidRuntime(3032):了java.lang.RuntimeException:无法启动活动ComponentInfo {cz.eman.android.cepro/cz.eman.android.cepro.activity.StationsOverviewActivity}:java.lang.IllegalStateException:找不到构造函数需要辅助类类的Context参数kb

我也试着补充一点:

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

但我得到另一个classmembers错误。

+1

难道我的回答帮助花花公子?如果是这样,请接受它。如果不是,请提供您自己的答案。 – Gray 2012-09-19 20:26:57

+1

如果您发现或标记答案是正确的,请发布答案它可以帮助他人找到答案 – 2012-09-20 04:36:29

+0

最终如何解决这个问题? – Frank 2012-10-22 09:16:29

回答

39

非常感谢你这样的帖子,帮助我们一步步地推进。

我和其他的解决方案上来我已经尝试了最后一个没有成功后:

# OrmLite uses reflection 
-keep class com.j256.** 
-keepclassmembers class com.j256.** { *; } 
-keep enum com.j256.** 
-keepclassmembers enum com.j256.** { *; } 
-keep interface com.j256.** 
-keepclassmembers interface com.j256.** { *; } 

我希望它可以帮助别人。

+0

对我来说还不够......它会抛出如下所示的错误: 字段java.lang.String字段FieldType:name = b,class = Location对于数据持久化者无效com.j256.ormlite.field .types.DateLongType @ 20f95c38 – 2014-06-03 10:21:23

-2

我这样的解决方案提出了(也许会为别人工作太)。

作出这样的变化proguard.cfg

  • 新增-dontobfuscate选项使用这样的配置,从580 KB降低到250 KB

  • 追加,!code/allocation/variable-optimization选项

APK文件大小。

虽然没有执行混淆处理。

3

一个小除了上述的配置 - 如果你想序列化/通过ORMLite反序列化Joda的DateTime对象,你可能需要这个还有:

-keepclassmembers class **DateTime { 
    <init>(long); 
    long getMillis(); 
} 

...因为ORMLite的DateTimeType做的一切通过反射。

+0

谢谢托马斯,有趣的是,我找到了我在这里寻找的答案:) – Tino 2016-05-01 19:56:17

+0

呵呵:)我甚至没有过度活跃在这里。 – 2016-05-03 07:18:35

12

接受的答案是不够的我的情况,让我增强了它,这是我结束了:

# OrmLite uses reflection 
-keep class com.j256.** 
-keepclassmembers class com.j256.** { *; } 
-keep enum com.j256.** 
-keepclassmembers enum com.j256.** { *; } 
-keep interface com.j256.** 
-keepclassmembers interface com.j256.** { *; } 

# Keep the helper class and its constructor 
-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper 
-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper { 
    public <init>(android.content.Context); 
} 

# Keep the annotations 
-keepattributes *Annotation* 

# Keep all model classes that are used by OrmLite 
# Also keep their field names and the constructor 
-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>(); 
} 
+0

经过大量搜索后,这是唯一对我有用的答案。我有“IllegalArgumentException:外地类x没有id字段”,我认为最后一个保持块解决它。谢谢。 – bradkratky 2016-08-23 20:34:39

+0

而另外一行修正了我的错误,同时尝试创建一个签名的apk文件是:-dontwarn com.j256.ormlite.android。**与最新的'com.j256.ormlite:ormlite-android:5.0',因为com.j256。 ormlite.android.OrmliteTransactionalProcessor扩展了Processor。 – 2016-10-04 14:52:59

+4

对于ORMLite 5.0,我必须添加 ' -dontwarn com.j256.ormlite.android。**' '-dontwarn com.j256.ormlite.logger。**' '-dontwarn com.j256.ormlite.misc。 **' – Diederik 2016-11-14 10:06:19

0

在我而言这并获得成功:

-keepattributes SourceFile,LineNumberTable,Signature,InnerClasses,*Annotation* 

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

随着obfucation和优化。

1

在addittion默认必要反思:

# OrmLite uses reflection 
-keep class com.j256.** 
-keepclassmembers class com.j256.** { *; } 
-keep enum com.j256.** 
-keepclassmembers enum com.j256.** { *; } 
-keep interface com.j256.** 
-keepclassmembers interface com.j256.** { *; } 

我需要把我所有的实体类:

-keep class com.example.db.Entities.** { *; } 

否则实体类被剥离出来。 我使用预定义的数据库(之前生成)。

有没有更容易/更好的混淆方法。也许我会保持太多班级?

0

最新版本的一小部分OrmLite 5

您可能要添加这些行到隐瞒了一些新的警告:

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

警告是这样的:

警告:com.j256.ormlite.android.OrmliteTransactionalProcessor:不能 找到引用的类javax.lang.model.SourceVersion

警告:com.j256.ormlite.logger.Slf4jLoggingLog:找不到引用 类org.slf4j.Logg erFactory

警告:com.j256.ormlite.misc.JavaxPersistenceImpl:找不到 引用的类javax.persistence.Column