我在我的項目上運行了proguard,但它不會混淆我的活動名稱。我已經嘗試了幾個規則,它不工作。我不知道到底是什麼意思,例如下面的規則:Proguard混淆不適用於活動?
-keep public class models.* {
*;
}
和最新
-keepclassmembers class * {
}
和
-keepclasseswithmembers class * {
}
我對有困難的區別這些規則如何工作。請幫忙。
我在我的項目上運行了proguard,但它不會混淆我的活動名稱。我已經嘗試了幾個規則,它不工作。我不知道到底是什麼意思,例如下面的規則:Proguard混淆不適用於活動?
-keep public class models.* {
*;
}
和最新
-keepclassmembers class * {
}
和
-keepclasseswithmembers class * {
}
我對有困難的區別這些規則如何工作。請幫忙。
在構建過程中,proguard檢查AndroidManifest並保留所有活動類。這是您的應用程序運行所需的。您不應該混淆擴展android.app.Activity的類。
參見:
Why Proguard keeps Activity class in Android?
Why proguard processes AndroidManifest.xml
什麼...... keepclassmembers之間...區別keepclasseswithmembers
根據文檔:
-keepclassmembers
指定類成員被保留了,如果他們的類 保存爲好。例如,您可能想要保留實現Serializable接口的所有類的字段和方法。
-keepclasseswithmembers
指定類和類成員被保存,條件 所有指定的類成員都存在。例如, 可能希望保留所有具有主方法的應用程序,而不需要 必須明確列出它們。
據我所知,ProGuard的可以在Java代碼中(而不是在XML)唯一的工作,因此,如果他們混淆了活動的名稱,它會亂用清單。所以也許android插件會自動添加一些規則,以免弄髒聲明的東西,這是我們開發人員不應該搞砸的。所有這些只是假設和推論,而不是實際的知情答案。 – Budius