1

我知道规则是,如果我们希望 ProGuard 正常工作,我们应该从 ProGuard 混淆中排除(例如,不混淆)库。这就是所有教程停止的地方。

在引擎盖下,这是什么原因?是不是因为它没有和我们项目一样的包名?我知道这是强制性的,因为当我忘记从 ProGuard 混淆中排除此类库时,我遇到了可怕的故事。

这条规则是否适用于我们自己的图书馆项目?它们也有不同的包名,但是虽然公共项目不需要被混淆,但我们自己的库确实必须被混淆。

显然,我对 ProGuard 的了解很全面,无法制定高质量的混淆计划,因为我上面提出的问题并没有给我清晰易懂的答案。

4

2 回答 2

3

图书馆项目可以被混淆和最小化。无需将库完全排除在混淆或缩小之外。

一些库确实需要特殊规则来确保它们正常工作,并且其原因延伸到您自己的库。这些问题并非源于它们是图书馆这一事实,而是与图书馆的工作有关。

例如,GSON 要求您添加以下行:

-keepattributes Signature

他们的示例 proguard 文件方便地提供了以下解释:

# Gson uses generic type information stored in a class file when working with fields.
# Proguard removes such information by default, so configure it to keep all of it.

出于类似的原因,您需要告诉 proguard 忽略 GSON 将序列化或反序列化的模型。由于 GSON 使用反射工作,因此您需要确保成员字段没有被混淆,否则 GSON 将不知道要查找哪些字段。

虽然我似乎记得过去在 Facebook 上遇到过问题,但他们的文档目前明确指出你不需要对 Proguad 做任何特别的事情。

于 2015-06-11T20:32:17.273 回答
1

ProGuard 可以应用于任何库或模块

以下是有关 ProGuard 的更多信息:1) http://developer.android.com/tools/help/proguard.html 2) https://www.youtube.com/watch?v=PSpL2tShmaY

于 2015-06-11T20:22:17.923 回答