使用 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的主要内容,如果未能解决你的问题,请参考以下文章
Proguard 可以混淆 Android 库项目 (APKLIB) 吗?
在多模块 SDK Android 库项目中配置 proguard
Proguard 使用 DNSJava 库混淆 Android 代码