【问题标题】:Is there any way to obfuscate just real code, and not ofuscate Libraries?有什么方法可以混淆真实的代码,而不是混淆库?
【发布时间】: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


【解决方案1】:

我能想到的防止 GSON 库被混淆的最简单方法是在您的 ProGuard 配置中添加类似这样的内容:

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

【讨论】:

  • 这个 keepnames 遗漏了一些东西。
【解决方案2】:

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

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

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

参见 ProGuard 手册 > 用法 > Overview of Keep Options

【讨论】:

【解决方案3】:

我也花了很多时间来解决这个问题。就我而言,它不是在 Gson 方面,而是它试图反序列化的枚举(在本例中为 MyClass.MyEnum)。我用这个:

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

添加上面的第二行导致我的代码解决了问题,应用程序再次正常运行。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多