为什么我们必须从ProGuard混淆中排除库?

时间:2015-06-11 20:16:26

标签: android android-proguard

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

引擎盖下,这是什么原因?是因为它与我们的项目没有相同的包名吗?我知道这是强制性的,因为当我忘记从ProGuard混淆中排除这些库时,我遇到了恐怖故事。

此规则是否适用于我们自己的图书馆项目?它们也有不同的包名,但是当公共项目不需要混淆时,我们自己的库必须进行模糊处理。

显然,我有一个完整的ProGuard知识,无法制定质量混淆计划,因为我上面提到的问题并没有给我明确和可理解的答案。

2 个答案:

答案 0 :(得分:3)

可以对库项目进行模糊处理和最小化。没有必要将库完全排除在混淆或缩小之外。

某些库确实需要特殊规则才能确保它们正常工作,并且其原因可以扩展到您自己的库。这些问题并非源于它们是图书馆,这些问题与图书馆的工作有关。

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

-keepattributes Signature

他们sample proguard file方便地提供了这样的解释:

# 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的问题,但他们documentation currently explicitly states你不需要对Proguad做任何特别的事情。

答案 1 :(得分:1)

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

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