我们可以缩小所有类但只能用proguard来模糊一些吗?

时间:2014-07-17 17:04:01

标签: java android obfuscation proguard shrink

通常,使用-keep排除类会阻止类被混淆

然而,它也可以防止它缩小。

是否可以定义一个proguard-project.txt,它将缩小除-keep之外的所有类,但是只对这些类的特定子集进行模糊处理?

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

由于

2 个答案:

答案 0 :(得分:3)

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

-keep,allowshrinking class com.example.SomeClass

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

答案 1 :(得分:1)

Eric的回答很好,还有另一种方式。

首先,有简写:

-keep,allowshrinking

您可以使用:

-keepnames

您也可以使用反向来执行此操作:

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

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

另一个注意事项是,如果打开了模糊处理,它将删除所有元数据,如文件名和行号,这将破坏调试器和堆栈跟踪。如果您希望它们工作,您可以添加以下行:

-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable