【发布时间】:2012-09-10 11:28:49
【问题描述】:
我正在准备重新分发 Android 库,它的代码必须经过混淆处理。我读过一些关于这个主题的东西,我决定使用 Android Library Project。它将作为 jar 分发(在 /bin 目录中自动创建(我正在使用带有最新 ADT 的 eclipse)。所有资源(布局、drawable 等)将分发在单独的包中,开发人员必须将其添加到他的项目中手动(与清单权限等相同)。所以到目前为止一切正常 - 添加到我的干净项目中的 jar 做了它应该做的事情,它看到资源添加到我的基础项目中。但问题是当我想混淆这个库 jar 时(一个在Library项目的/bin目录中自动生成的)。由于Eclipse仅在常规Android项目中支持Proguard混淆(构建APK时),它不为Android Library Project提供混淆(jar没有混淆,即使行“proguard .config=proguard.cfg”被添加到 project.properties 文件中)。我认为混淆这样一个 jar 的最好方法是在 Eclipse 之外使用 Proguard,但我不知道为什么我总是得到“空输出 jar " - 即使使用我的参数在我决定从中提取库之前,总是在我的常规项目中使用。使用 proguard 4.6、4.7、4.8 测试,效果相同。如果有人可以向我展示允许混淆 android 库项目的示例 proguard.conf,我将不胜感激(例如,基于 facebook Android 库项目,可在此处下载:https://github.com/facebook/facebook-android-sdk/zipball/master)。每一步的指导将不胜感激。
提前致谢!
【问题讨论】:
-
"自动在 /bin 目录中创建" -- JAR 对于分发是不安全的。
-
为什么不呢?如果你的意思是它没有被混淆——我知道,这正是我想要做的。但没有混淆它可以正常工作。
-
“为什么不呢?” ——因为谷歌是这么说的。目前不支持从 Android 库项目创建可再分发的 JAR。该 JAR 是构建过程的副作用; Google 不打算支持重新分发。
-
@CommonsWare:谷歌也不支持非法活动,但他们仍然可以使用他们提供的工具。您能否澄清一下为什么那个罐子“不适合分发”?如果未来的 SDK 更改使类似的过程变得不可能,可能会找到另一种创建 jar 的方法,但我认为当前方法不会创建有缺陷或不安全的 jar。
-
@CommonsWare:另外,您写的内容似乎与此相反:developer.android.com/tools/projects/index.html#LibraryProjects(“(...)将每个库项目生成到自己的 JAR 文件中的新库项目功能”)。诚然,它没有“可再发行”一词,但为什么不呢?
标签: android jar obfuscation android-library