4

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

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

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

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

谢谢

4

2 回答 2

5

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

-keep,allowshrinking class com.example.SomeClass

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

于 2014-07-20T23:26:24.240 回答
1

埃里克的回答很好,还有另一种方法。

首先,有以下简写:

-keep,allowshrinking

您可以使用:

-keepnames

您也可以使用相反的方法来做到这一点:

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

所以这将混淆内部的所有类apackage,而不是其他任何东西,同时仍然允许对所有内容进行死代码剥离。

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

-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
于 2015-06-12T20:41:20.490 回答