有没有办法混淆真正的代码,而不是混淆库?

时间:2014-02-18 20:45:02

标签: android obfuscation proguard

我在使用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.** {*;}

EDIT2: 我一直在尝试新的东西:

-keep class com.google.**
-keepnames class com.google.** {*;}
-keepnames enum com.google.** {*;}
-keepnames interface com.google.** {*;}

到目前为止没有运气。

3 个答案:

答案 0 :(得分:1)

我认为保持GSON库不被混淆的最简单方法是在ProGuard配置中添加类似这样的内容:

-keepnames com.google.gson.** {*;}

答案 1 :(得分:0)

使用-keepnames,ProGuard的混淆步骤会保留指定类,字段和方法的名称。 ProGuard的缩小步骤和优化步骤仍然可以删除类,字段和方法本身,如果它们看起来未使用。您想使用更常见的-keep选项:

-keep class com.google.gson.** { *; }

此行保留匹配的类,字段和方法及其原始名称。它还匹配接口类和枚举类。

请参阅ProGuard手册&gt;用法&gt; Overview of Keep Options

答案 2 :(得分:0)

我也花时间与此斗争。就我而言,在Gson方面它是,但是它试图反序列化的枚举(在这种情况下是MyClass.MyEnum)。我用过这个:

-keep class com.google.gson.** { *; }
-keep enum com.abc.MyClass$MyEnum { *; }

添加上面的第二行会导致我的代码超过问题并且应用程序再次正常运行。希望这有帮助!