【发布时间】:2014-02-18 20:45:02
【问题描述】:
我在使用 ProGuard 混淆代码时遇到了一些问题。基本上 GSON 库让我很痛苦。
所以我考虑只对 com.mypackages.* 进行混淆,而不对使用过的库进行混淆。
有可能吗?
这怎么称呼?我有点迷失在混淆 atm 上,我找不到任何关于它的例子。
非常感谢任何提示。
编辑:
java.lang.AssertionError
at com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter.<init>(Unknown Source)
at com.google.gson.internal.bind.TypeAdapters$26.create(Unknown Source)
at com.google.gson.Gson.getAdapter(Unknown Source)
添加后
-keepnames class com.google.gson.** {*;}
编辑2: 我一直在尝试新事物,例如:
-keep class com.google.**
-keepnames class com.google.** {*;}
-keepnames enum com.google.** {*;}
-keepnames interface com.google.** {*;}
到目前为止还没有运气。
【问题讨论】:
-
是的,虽然您必须研究细节,但这是可能的。但请注意,每次您通过明确的名称调用某些东西时,特别是如果它是像众所周知的库或平台 API 之类的东西,您会留下一个关于您的代码在做什么的重要提示。
-
这是 ProGuard 手册供参考:proguard.sourceforge.net/#manual/introduction.html
-
@Sergi 有任何解决方案吗?
-
@Radu 不是真的......我已经尝试了一切,但我仍然面临这个问题。几个月前我放弃了,这是我想很快再次尝试的东西,但是现在,代码在生产中是完全干净的:D
-
@kabuko 对我有用的是:-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID;私有静态最终 java.io.ObjectStreamField[] serialPersistentFields;私有无效 writeObject(java.io.ObjectOutputStream);私有无效读取对象(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } 更改为:-keepclassmembers 类 * 实现 java.io.Serializable { *; }
标签: android obfuscation proguard