2011-03-22 53 views
5

我做了一个邮件客户端,使用javamail api for android,并且该应用在模拟器或设备上运行良好...现在我想使用eclipse导出该项目,但出现以下错误:android:proguard迷惑问题

 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库...我怎么可以添加他们在我的项目,所以我可以导出我的项目,混淆呢?

非常感谢!

UPDATE:

我试图导入JRE库在我的项目,这些错误都消失了,但新的apeared:

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 

我能做些什么?

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

希望这有助于人::P

回答

12

所列出的Java类

+0

这可行,但我没有找到任何有关Android构建脚本不支持过滤器的信息。你有链接吗? – phunehehe 2013-06-19 10:58:34

+0

@phunehehe从理论上讲,你可以添加过滤器到Ant构建文件android-sdk/tools/ant/build.xml中,在'injars'行上。正如你在那里可以看到的那样,默认情况下它没有定义任何过滤器。 – 2013-06-20 01:34:53

4

我已经在项目中加入JRE库和十个添加此COMAND到proguard.cfg文件解决了这个问题不是Android运行时的一部分。最简洁的解决方案是从javamail库中删除引用它们的类,因为它们在这种环境下永远不能工作。

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

作为一个简单的替代方法,可以抑制警告:然后

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

的ProGuard将继续毫无怨言。