【问题标题】:Can't get library jar to work with Android and Proguard无法让库 jar 与 Android 和 Proguard 一起使用
【发布时间】:2012-10-08 20:24:07
【问题描述】:

我在 Eclipse 中有一个 Android 库项目 (A) 和 Android 应用程序 (B)。对于这个设置,我使用 Proguard,到目前为止没有问题。现在我想将 Flurry 库 (.jar) 添加到我的库项目中,它在模拟器上的调试模式下工作正常。

但是,当我想使用 Proguard 导出我的应用程序的最终和签名 apk 时,我收到许多“找不到引用的类...”警告并且无法创建 apk。

其中一些类是:

org.joda.time.LocalDateTime  
org.joda.time.format.DateTimeFormatter
org.xerial.snappy.Snappy
com.jumptap.adtag.JtAdView
...

好的,所以我在 proguard.cfg 文件中添加了以下内容:

...
-dontskipnonpubliclibraryclassmembers
-libraryjars ../libproj/libs/FlurryAgent.jar
...
-keep public class com.flurry.android.FlurryAgent { *; }
-keep class com.flurry.** { *; }
-keep class org.codehaus.jackson.** { *; }
-keep class org.apache.avro.** { *; }
-keep interface com.flurry.** { *; }
-keep public class org.joda.time.** { public protected *; }
...

但是,我仍然收到相同的错误:(
有什么我在这里想念的想法吗?

【问题讨论】:

  • 如果我有自动构建,我会遇到使用 Proguard 构建的问题。我必须将其关闭以进行发布构建。可能不相关但值得尝试...
  • 好吧,我最终用 Google Analytics 替换了 Flurry - 更小的 JAR 文件,Proguard 完全没有问题 :)
  • 谢谢你!在将谷歌播放器服务添加为库项目后,从 Eclipse 导出 Proguard 时,我一直在与不可重复的构建失败作斗争。修复:关闭自动构建;清理所有项目;构建 google-play-services_lib(右键单击 -> 构建项目),然后通过通常的流程导出 ... 主项目以进行签名的 proguard 构建。在我关闭自动构建之前,我遇到了许多奇怪的错误——缺少类错误、不完整的 mapping.txt、没有控制台错误的错误构建 (!) 等等。

标签: android proguard flurry


【解决方案1】:

显然,flurry jar 具有对其他一些库(joda-time、snappy、...)的可选引用。

为缺少的引用添加-keep 选项根本没有帮助,因为它只会保留指定的类,但它们会丢失。相反,您应该添加适当的 -dontwarn 指令:

-dontwarn com.flurry.**

应该忽略任何来自flurry类的警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多