使用Proguard模糊ORMLite模型类

mer*_*ica 5 android proguard ormlite

我有几个模型,我想在我的代码中混淆.我知道我可以忽略整个模型包但我不想这样做.我尝试了一些proguard调整并检查所有相关的帖子无济于事.ORMlite一直在投掷java.lang.RuntimeException: Unable to create application ...App: java.lang.IllegalArgumentException: Foreign field class ....f.p does not have id field.我检查了注释是否仍然存在dex2jarjd,它仍然存在.

我有这个proguard配置(以及更多混淆其他部分):

好斗的东西:

-mergeinterfacesaggressively
-allowaccessmodification
-optimizationpasses 5

-verbose
-dontskipnonpubliclibraryclasses
-dontpreverify
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
Run Code Online (Sandbox Code Playgroud)

保留各种框架所需的信息:

-keepattributes *Annotation*
-keepattributes Signature
-keepattributes EnclosingMethod
Run Code Online (Sandbox Code Playgroud)

ORMLITE相关:

-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
Run Code Online (Sandbox Code Playgroud)

我错过了什么,或者这是不可能的?

Viv*_*eja 5

由于ORMLite使用反射来保存或保留您的数据,因此他们需要未混淆的实体名称(即您用来保存或保留数据的类).

抛出此异常是因为ORMLite正在尝试查找其表的Entity类,并且无法找到具有相似名称的类和成员.

只需使用以下代码忽略您的实体类进行模糊处理:

-keep class com.xyz.components.**
-keepclassmembers class com.xyz.components.** { *; } 
Run Code Online (Sandbox Code Playgroud)

其中com.xyz.components是实体类的包.

我希望这有帮助!

  • 我知道我可以这样做,但我不想,也不理解为什么我必须这样做,因为注释仍然存在. (2认同)