我会尽力帮助您翻译关于使用ProGuard进行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中提到的类名及其公共成员是否可以保留,让其他代码混淆。
如果我漏掉了什么或者我的理解不正确,请告诉我。重申一下,这不是关于如何在技术上做到这一点的问题,而更多地是关于混淆/优化/缩小的包括和排除什么以及更具体的原因....毫无疑问,在构建后将进行espresso测试。
com.android.support:appcompat
,不需要显式的规则来与ProGuard配合使用,因为Android插件指定的默认配置已经捕获了所有边缘情况(例如Views、Fragments),而其他库(如rxjava
)可能需要显式的规则。这种情况因情况而异,最好的做法是查看每个库的文档中关于ProGuard规则的部分。 - Mike LarenActivity.onCreate(Bundle)
总是会被调用,因为它是由外部调用的),因此您可以采取的一个技巧是尽可能将代码从活动/片段/视图中移出到单独的帮助器对象中,然后让ProGuard混淆它们 :) - Mike Laren