ProGuard - 如何正确使用Android?要保留哪些类和库?

时间:2017-03-16 18:30:10

标签: android android-proguard

我正在努力提高我对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中提到的类名,特别是他们的公共成员,并混淆代码的其余部分。

如果我遗失了某些内容或者我的理解不正确,请告诉我。重复一下这不是一个关于如何在技术上做到这一点的问题,而是关于如何包含什么以及为了混淆/优化/缩小而排除什么......以及更具体的理由背后的问题....绝对会在之后进行浓缩咖啡测试建立。

1 个答案:

答案 0 :(得分:2)

  

问题1:我应该对上面的库进行模糊处理吗?

是。如果您添加-keep <library>规则,那么整个图书馆都会包含在您的APK中,这可能会导致问题,例如让您的应用超出64k方法限制并需要Multidex。应用库提供的ProGuard规则始终是个好主意。您通常可以在库源代码或https://github.com/krschultz/android-proguard-snippets等网站中找到.pro个文件。

  

问题2:可以保留AndroidManifest.xml中提到的类名,特别是他们的公共成员,并混淆代码的其余部分。

Android插件已经为您做到了。该插件扫描所有需要保留其名称的类(例如,活动,服务,BroadcastReceivers,视图等),并且不会对它们进行模糊处理。这包括您在AndroidManifest.xml中声明的所有内容。