【问题标题】:Can we shrink all classes but only obfuscate some with proguard?我们可以缩小所有类,但只用 proguard 混淆一些类吗?
【发布时间】:2014-09-08 16:15:29
【问题描述】:

通常,使用 -keep 排除一个类可以防止该类被混淆

但它也可以防止它被缩小。

是否可以定义一个 proguard-project.txt 来缩小所有类,除了那些用 -keep 排除的类,但也只混淆类的特定子集?

目的是使用 proguard 保持低于 android 65k 方法限制,同时也仅在 APK 内混淆第一方代码。

谢谢

【问题讨论】:

    标签: java android obfuscation proguard shrink


    【解决方案1】:

    是的,您可以将修饰符 allowshrinking 添加到仅适用于混淆(和优化)步骤的 -keep 选项中。例如:

    -keep,allowshrinking class com.example.SomeClass
    

    如果指定的类在收缩步骤中显示为未使用,则可以将其删除,否则,其名称将在混淆步骤中保留。

    【讨论】:

      【解决方案2】:

      艾瑞克的回答不错,还有办法。

      首先,有以下简称:

      -keep,allowshrinking
      

      你可以使用:

      -keepnames
      

      你也可以使用逆来做到这一点:

      -keepnames class !com.example.apackage.** {*;}
      

      因此,这将混淆 apackage 中的所有类,仅此而已,同时仍然允许对所有内容进行死代码剥离。

      另一个注意事项是,如果您打开了混淆功能,它将删除所有元数据,例如文件名和行号,这会破坏调试器和堆栈跟踪。如果你想让它们工作,你可以添加这些行:

      -renamesourcefileattribute SourceFile
      -keepattributes SourceFile,LineNumberTable
      
      猜你喜欢
      • 1970-01-01
      • 2013-07-26
      • 2016-07-04
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多