【问题标题】:Issues with Android ADT, Proguard and External JarsAndroid ADT、Proguard 和外部 Jar 的问题
【发布时间】:2011-01-24 19:50:51
【问题描述】:

所以,我正在尝试让 ADT 的内置 proguard 实现适用于我的应用程序。不幸的是,它似乎对我引用的第三方库中的各种类感到窒息。 我已经尝试了各种(如果不是全部)我能想到的 -libraryjars 和 -keep 公共类行的组合,但这一切都不好。我对 Proguard 没有那么丰富的经验,所以老实说,我不知道我哪里出错了。我试过 google,但大部分信息都与 Ant 脚本有关。

我尝试过的一些事情:

  • 文件顶部或底部的 -libraryjars C:\Users\Dave\workspace\Dropbox_Sync_for_Tasker_and_Locale\lib\apache-mime4j-0.6.jar 行

  • 试图相对地创建通往 jar 的路径的行,但根本没有成功。

  • 像 -keep public class org.apache.commons.logging.LogFactory 这样的行

  • 引用错误行其他部分的行,如 -keep public class org.apache.james.mime4j.field.MailboxListField

不管怎样,错误日志是一堵巨大的文字墙,所以我把它放在了一个pastebin here

【问题讨论】:

  • 看起来您可能遇到了 Android 所做的平台假设之一。您可能希望将库 jar 放入 Android 项目根目录中的 libs/ 中。似乎 android 假设外部 jar 库将位于此目录中。
  • 库位于该文件夹中。我尝试通过相对路径引用它们,并不断从 Proguard 获取 IOExceptions。编辑:我刚刚注意到我使用的是 lib 文件夹,而不是 libs。当我回到我的电脑前,我会看看是不是这个问题......
  • 所以,是的,这样做曾经奏效。然后,我做了一个小改动并重新构建,它停止工作。我不知道现在该怎么办。
  • 将它们放在“libs”中并使用相对路径效果很好(对我来说)

标签: android eclipse adt proguard


【解决方案1】:

所以,如果你碰巧找到了这个答案,并且就像,嗯,我也有这个问题,我希望他发布他的解决方案,你有一半的运气。

我修复它的方法是将 -libraryjars 行粘贴在那里,然后

-dontwarn org.apache.commons.logging.LogFactory
-dontwarn net.jcip.annotations.NotThreadSafe
-dontwarn net.jcip.annotations.ThreadSafe
-dontwarn net.jcip.annotations.Immutable

而且效果很好。这是一个黑客,它很脏,但它为我解决了它。不幸的是,如果你也有这个问题,你仍然需要靠自己。

【讨论】:

    【解决方案2】:

    在我的项目中添加“apache-mime4j-0.6.1.jar”和“httpmime-4.0.1.jar”后,我完全遇到了同样的问题。 (用于将二进制数据多部分 POST 到我的服务器)。

    我也不熟悉 pro-guard,但至少我已经设法将我的自定义小部件添加到 proguard.cfg - 不幸的是,事实证明 apache 库更难添加!

    这是我的修复...我已将其添加到 proguard.cfg 的底部:

    #APACHE LIBRARY
    -libraryjars /libs/apache-mime4j-0.6.1.jar
    -libraryjars /libs/httpmime-4.0.1.jar
    -keepnames class org.apache.** {*;}
    -keep public class org.apache.** {*;}
    -dontwarn org.apache.commons.logging.LogFactory
    -dontwarn org.apache.http.annotation.ThreadSafe
    -dontwarn org.apache.http.annotation.Immutable
    -dontwarn org.apache.http.annotation.NotThreadSafe
    

    我希望前 4 行能够解决问题。不幸的是,需要不要警告才能真正“修复”它。

    如果我错了,请纠正我(因为我不是 proGuard 专业人士),但我相信前 4 行可确保按原样使用库。四行的第二部分(dontwarn)只是掩盖了剩余的废话,并没有纠正一些潜在的问题。 我不知道根本问题是什么。

    【讨论】:

    • -keepnames 命令救了我的命,也救了我的项目!谢谢! +1!
    【解决方案3】:

    尝试下载commons-logging.jar,将其放入您的库中,并将-libraryjars 添加到您的proguard 配置中。

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 2011-06-22
      • 2011-10-15
      • 2012-12-02
      • 1970-01-01
      • 2014-09-16
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多