通常情况下,排除具有-keep的类可防止类被模糊化我们可以缩小所有类,但只能用proguard模糊一些类吗?
但是,它也可以防止它被缩小。
是否有可能定义一个proguard-project.txt,它会缩小除了用-keep排除的类以外的所有类,但也只是混淆了特定类的子集?
目标是使用proguard保持低于android 65k方法的限制,同时也仅在APK中混淆第一方代码。
感谢
通常情况下,排除具有-keep的类可防止类被模糊化我们可以缩小所有类,但只能用proguard模糊一些类吗?
但是,它也可以防止它被缩小。
是否有可能定义一个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