2016-09-14 55 views
0

我有一些通過反射使用的類。看來ProGuard在我發佈時會刪除這些內容。Proguard:將課程保留在特定的包中

當ProGuard運行時,是否有任何方法可以指定特定包中的所有類(而不是特定的類名)。作爲一個說明,混淆是需要的。作爲另一個說明,所有這些類都擴展了一個存在的類。

感謝

+0

你有沒有嘗試過提到的解決方案[Here](http://stackoverflow.com/questions/4447145/proguard-and-reflection-in-android)? – baskara

+0

我在看,但不明白。一方面,第一個例子說明如何避免混淆一個類,第二個例子是談論不混淆特定的方法。所以這和我的情況不一樣。我想要包含在構建和混淆的類。 – zundi

+0

好吧,帶反射的類不應該被混淆以使其工作。所以你可以在你正在使用反射的類上應用「-keep class your-package」。 – baskara

回答

0

使用-keep class com.yourpackage.name.** { *; }作品以及在我的情況。它基本上使用通配符來保存屬於該包的所有類。還請注意*;是必需的。

此外,爲了幫助調試您的問題,您應該檢查生成的seeds.txt,如果該類包含在其中,則保留它。

此外,它可能是另一個問題,如使用公共靜態內部類等等。調試的最佳方法是使用dex2jar和JD-GUI反編譯縮小的apk並手動瀏覽代碼以查看被剝離或保留的內容。不要忘記在之前使用-dontdeobfuscate。

+0

這確實保留了構建中的類,但是它們沒有被混淆(通過檢查mapping.txt來確定) – zundi

0

您是否試圖在您的proguard-rules.pro文件中添加此行?

-keep class com.company.application.PackagePrefix* 
{ 
*; 
} 

如果你不想使用包前綴,你可以使用**來代替。

希望它有幫助。

相關問題