我知道规则是我们应该从ProGuard混淆中排除(例如不混淆)库,如果我们希望它能够正常工作的话。这就是所有教程停止的地方。
引擎盖下,这是什么原因?是因为它与我们的项目没有相同的包名吗?我知道这是强制性的,因为当我忘记从ProGuard混淆中排除这些库时,我遇到了恐怖故事。
此规则是否适用于我们自己的图书馆项目?它们也有不同的包名,但是当公共项目不需要混淆时,我们自己的库必须进行模糊处理。
显然,我有一个完整的ProGuard知识,无法制定质量混淆计划,因为我上面提到的问题并没有给我明确和可理解的答案。
答案 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