我正在努力提高我对ProGuard for Android版本使用的理解。我不太确定要准确保留什么(不要混淆)以及要混淆什么。
我的应用程序中正在使用几个库,其中一些列在下面
com.android.support:appcompat
com.android.support:design
io.reactivex:rxandroid
io.reactivex:rxjava
com.jakewharton.rxbinding
com.trello:rxlifecycle
问题1:
我应该对上面的库进行模糊处理吗?它们已经是开源的。使用proguard规则保留所有支持库是不明智的:
keep class android.support.** { *; }
我可以用io.reactivex和jakewharton库做同样的方式
问题2
除了支持和外部库之外,我还有针对此应用程序编写的特定于应用程序的类。是否可以保留AndroidManifest.xml中提到的类名,特别是他们的公共成员,并混淆代码的其余部分。
如果我遗失了某些内容或者我的理解不正确,请告诉我。重复一下这不是一个关于如何在技术上做到这一点的问题,而是关于如何包含什么以及为了混淆/优化/缩小而排除什么......以及更具体的理由背后的问题....绝对会在之后进行浓缩咖啡测试建立。
答案 0 :(得分:2)
问题1:我应该对上面的库进行模糊处理吗?
是。如果您添加-keep <library>
规则,那么整个图书馆都会包含在您的APK中,这可能会导致问题,例如让您的应用超出64k方法限制并需要Multidex。应用库提供的ProGuard规则始终是个好主意。您通常可以在库源代码或https://github.com/krschultz/android-proguard-snippets等网站中找到.pro
个文件。
问题2:可以保留AndroidManifest.xml中提到的类名,特别是他们的公共成员,并混淆代码的其余部分。
Android插件已经为您做到了。该插件扫描所有需要保留其名称的类(例如,活动,服务,BroadcastReceivers,视图等),并且不会对它们进行模糊处理。这包括您在AndroidManifest.xml
中声明的所有内容。