【问题标题】:Android library project - obfuscationAndroid 库项目 - 混淆
【发布时间】: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


【解决方案1】:

"-dontshrink" 将保留所有类。要更有选择性,请使用各种“-keep”选项。

【讨论】:

  • 谢谢。 “-dontshrink”可以完成这项工作,但我也会尝试调整“保留”选项。
  • 我得到,"找不到超类或接口 android.app.Fragment","找不到超类或接口 android.app.ActionBar$TabListener","找不到引用类 ndroid.app.ActionBar$Tab" 就像很多警告一样。我在 Android 3.0 及更高版本中使用带有片段的 ActionBar。你能给我建议如何使用 Proguard 进行混淆吗?
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2013-04-11
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2022-06-09
  • 2013-07-24
  • 2012-03-03
相关资源
最近更新 更多