使用 Android 库项目设置 ProGuard

Posted

技术标签:

【中文标题】使用 Android 库项目设置 ProGuard【英文标题】:Setting up ProGuard with Android Library Projects 【发布时间】:2013-02-16 11:09:06 【问题描述】:

我正在尝试为我的 android 项目设置 proguard。我的应用程序项目中的代码很少,但引用了一个包含绝大多数代码和任何其他外部 jar 的库项目。话虽如此,我不确定如何设置 proguard 以考虑到这一点。现在我的 proguard 配置文件只是来自the ProGuard site 的 Android 示例。我一直在四处寻找,但没有找到很多或任何关于在库项目中使用 proguard 的文档,只是 jars。我是proguard的新手,所以任何朝着正确方向的推动都会很棒。谢谢。

【问题讨论】:

【参考方案1】:

编辑

正如@BornToCode 指出的那样,一个不同的答案(最初发布在here)更好地解释了Proguard 如何处理库项目。此外,这个引用的问题比我原来的回答中链接的问题更有趣,整体声誉也更高。 引用:

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

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


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

库项目更像是一种在 Eclipse 中将项目链接到其 jar 的便捷方式。构建项目时,库项目中唯一对编译器可见的组件是 jar 文件。

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

How to obfuscate an Android library (.jar file) using Proguard in Eclipse

【讨论】:

嗨,这个答案似乎与this 不同。你能解释一下吗? @BornToCode 你是绝对正确的。链接的响应显然比我的回答更有信誉。我在此处的回答中添加了此链接和引用。【参考方案2】:

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

apply plugin: 'com.android.library'

android 
    defaultConfig 
        consumerProguardFiles 'proguard-rules.pro'
    

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

另见consumerProguardFiles gradle reference

【讨论】:

以上是关于使用 Android 库项目设置 ProGuard的主要内容,如果未能解决你的问题,请参考以下文章

Android 库中的 Proguard

Proguard 可以混淆 Android 库项目 (APKLIB) 吗?

在多模块 SDK Android 库项目中配置 proguard

Proguard 使用 DNSJava 库混淆 Android 代码

多库项目中的 Android Studio proguard 处理

Android 库项目:混淆并保留资源