通常,使用 -keep 排除一个类可以防止该类被混淆
但是,它也可以防止它被缩小。
是否可以定义一个 proguard-project.txt 来缩小所有类,除了那些用 -keep 排除的类,但也只混淆类的特定子集?
目的是使用 proguard 保持低于 android 65k 方法限制,同时也仅在 APK 内混淆第一方代码。
谢谢
通常,使用 -keep 排除一个类可以防止该类被混淆
但是,它也可以防止它被缩小。
是否可以定义一个 proguard-project.txt 来缩小所有类,除了那些用 -keep 排除的类,但也只混淆类的特定子集?
目的是使用 proguard 保持低于 android 65k 方法限制,同时也仅在 APK 内混淆第一方代码。
谢谢
是的,您可以将修饰符添加allowshrinking
到-keep
仅适用于混淆(和优化)步骤的选项中。例如:
-keep,allowshrinking class com.example.SomeClass
如果指定的类在收缩步骤中显示为未使用,则可以将其删除,否则,其名称将在混淆步骤中保留。
埃里克的回答很好,还有另一种方法。
首先,有以下简写:
-keep,allowshrinking
您可以使用:
-keepnames
您也可以使用相反的方法来做到这一点:
-keepnames class !com.example.apackage.** {*;}
所以这将混淆内部的所有类apackage
,而不是其他任何东西,同时仍然允许对所有内容进行死代码剥离。
另一个注意事项是,如果您打开了混淆功能,它将删除所有元数据,例如文件名和行号,这将破坏调试器和堆栈跟踪。如果你想让它们工作,你可以添加这些行:
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable