【问题标题】:Java ProGuard. Class keep (do not delete) but yet allow to be obfuscatedJava ProGuard。类保留(不要删除)但允许被混淆
【发布时间】:2012-09-24 12:06:11
【问题描述】:

我想从删除中跳过一个特定的类。它通常不会在我的应用程序中的任何地方引用,而只能通过反射来引用,因此它确实会被收缩器删除。它被其包中的其他“相邻”类引用,但并未直接用于我的应用程序,而仅用于反射。

我决定专门为这个特定的类处理一个映射:

org.mypckg.Helper -> gh6

...然后我当然改变了我的应用程序的反射调用:

forName("gh6")

我的映射输入似乎没有问题,但映射规则本身不足以防止类被移除。此外,我仍然无法使用 -keep 开关保留该类,因为它确实使用其原始名称 (org.mypckg.Helper) 来保留它,这是我不想要的。

出于某种原因,我无法在项目中手动将类折射(重命名)为“gh6”。

【问题讨论】:

  • 写完这个问题后,我想到了一个非常简单的解决方案。在我的应用程序某处“假使用”该类,但直接,而不是通过反射。但是,我想知道是否可以使用 ProGuard 来保存它?
  • 为什么只保留这个类的原始名称会出现问题?代码中使用率高?
  • 不常用,但很重要。

标签: java class obfuscation proguard preserve


【解决方案1】:

ProGuard 识别结构 Class.forName("org.mypckg.Helper");然后它会保留并混淆org.mypckg.Helper,而无需进一步配置。

否则:

-keep,allowobfuscation class org.mypckg.Helper
-adaptclassstrings org.mypckg.AdjacentClass*

参照。 ProGuard 手册 > 使用 > Overview of Keep Options

参照。 ProGuard 手册 > 使用 > -adaptclassstrings

【讨论】:

  • 是的,这正是我想要的。干杯(y)
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 2016-07-04
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多