在Android库项目中设置ProGuard

34
我正在尝试为我的Android项目设置proguard。我的应用程序项目中几乎没有代码,但引用了一个库项目,该项目有绝大部分的代码和任何其他外部jar包。也就是说,我不确定如何设置proguard以考虑这一点。现在我的proguard配置文件只是来自ProGuard网站的Android示例。我一直在搜索,但没有找到关于使用库项目而不是jar包的proguard的文档或资料。我对proguard很陌生,所以任何指导都将是很好的。谢谢。
2个回答

20

对我来说,在库项目中指定proguard设置(例如不应混淆哪些库文件)是有意义的。我发现我还需要在我的应用程序中包含来自我的库模块的proguard配置。为此,我将以下内容添加到我的库的build.gradle中的defaultConfig部分。

apply plugin: 'com.android.library'

android {
    defaultConfig {
        consumerProguardFiles 'proguard-rules.pro'
    }
}

然后,我配置了我的库模块中的 proguard-rules.pro 文件,以保留重要序列化类的名称。

另请参阅consumerProguardFiles gradle 参考文档


19

编辑

正如@BornToCode所指出的那样,一篇不同的答案(最初发布在这里)更好地解释了库项目是如何被Proguard处理的。此外,这个问题比我最初回答时链接的问题更受关注并具有更高的声望。引用:

仅由库项目本身不运行ProGuard,因此它们不使用任何配置。

应用程序项目对整个代码库进行混淆,包括任何已引用的库,因此它们需要适当的配置来管理应用程序代码和库代码。


旧回答(并没有错,只是可能不是最好的方法)

库项目更多地是在Eclipse中将项目与其jar文件链接的一种方便方式。当您构建项目时,库项目的唯一可见组件是jar文件。

如果您想混淆该jar文件,请查看此帖子:

如何在Eclipse中使用Proguard混淆Android库(.jar文件)


嗨,看起来这个答案和这个不同。你能解释一下吗? - fikr4n
@BornToCode 你说得太对了。链接的回答显然比我的回答更有信誉。我在这里补充了一个链接和引用。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接