【问题标题】:android: proguard obfuscating problemandroid:proguard混淆问题
【发布时间】:2011-03-22 08:13:24
【问题描述】:

我使用 javamail api for android 制作了一个邮件客户端,该应用程序在模拟器或设备中运行良好...现在我想使用 eclipse 导出项目,但出现以下错误:

     Warning: org.apache.harmony.awt.datatransfer.DataProxy: can't find superclass or interface java.awt.datatransfer.Transferable
 Warning: org.apache.harmony.awt.datatransfer.NativeClipboard: can't find superclass or interface java.awt.datatransfer.Clipboard
 Warning: javax.activation.CommandInfo: can't find referenced class java.beans.Beans
 Warning: com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.Sasl
 Warning: com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.SaslClient
 Warning: com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.SaslException
 Warning: org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.Point
 Warning: org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceContext
 Warning: org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceEvent

如我所见,javamail api 使用 java.awt 和 javax.security 库...如何将它们添加到我的项目中,以便导出我的项目并对其进行混淆处理?

非常感谢!

更新:

我尝试在我的项目中导入 jre 库,这些错误消失了,但出现了新错误:

Proguard returned with error code 1. See console
 Note: there were 4243 duplicate class definitions.
 Warning: library class com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler extends or implements program class javax.activation.DataContentHandler
 Warning: library class com.sun.xml.internal.ws.encoding.XmlDataContentHandler extends or implements program class javax.activation.DataContentHandler
 Warning: library class com.sun.xml.internal.messaging.saaj.soap.MessageImpl$1 extends or implements program class javax.activation.DataSource
 Warning: library class com.sun.xml.internal.ws.encoding.StringDataContentHandler extends or implements program class javax.activation.DataContentHandler 

我能做什么?

【问题讨论】:

    标签: android obfuscation proguard


    【解决方案1】:

    列出的 java 类不是 Android 运行时的一部分。最干净的解决方案是从 javamail 库中删除引用它们的类,因为它们永远无法在这种环境中工作。

    通常,您也可以在 ProGuard 配置中过滤掉它们,但 Android 构建脚本不支持过滤器。

    作为一种简单的替代方法,您可以取消警告:

    -dontwarn java.awt.**,javax.security.**,java.beans.**
    

    ProGuard 将继续进行而不会抱怨。

    【讨论】:

    • 这行得通,但我没有找到任何关于不支持过滤器的 Android 构建脚本的信息。你有那个链接吗?
    • @phunehehe 理论上,您可以在 Ant 构建文件 android-sdk/tools/ant/build.xml 中添加过滤器,与“injars”一致。如您所见,默认情况下它没有定义任何过滤器。
    【解决方案2】:

    我已经通过在项目中添加jre库并在proguard.cfg文件中添加十个这个命令解决了这个问题:

    -libraryjars <java.home>/lib/rt.jar(java/**,javax/security/**,javax/activation/**)
    

    希望这对某人有所帮助:P

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多