通常情況下,排除具有-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