Android Studio 如何解决java.lang.VerifyError当使用javamail在android上

agxfikkp  于 2022-11-16  发布在  Android
关注(0)|答案(1)|浏览(421)

给出错误的代码(简化):

store = session.getStore("imaps");
        store.connect();
        inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_ONLY);
        Message message = inbox.getMessage(1);
   -->  mailContent = message.getContent().toString();

错误信息

java.lang.VerifyError: Rejecting class com.sun.mail.handlers.text_plain that attempts to sub-type erroneous class com.sun.mail.handlers.handler_base (declaration of 'com.sun.mail.handlers.text_plain' appears in /data/app/~~Z3AcOYbtbz2T2e7VoPzr3w==/com.example.epistula-WhLKom1ZTZ24Nr1ACPcg8Q==/base.apk)
    at java.lang.Class.newInstance(Native Method)

...

Caused by: java.lang.VerifyError: Verifier rejected class com.sun.mail.handlers.handler_base: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors() failed to verify: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors(): [0x4]  can't resolve returned type 'Unresolved Reference: java.awt.datatransfer.DataFlavor[]' or 'Reference: javax.activation.ActivationDataFlavor[]' (declaration of 'com.sun.mail.handlers.handler_base' appears in /data/app/~~Z3AcOYbtbz2T2e7VoPzr3w==/com.example.epistula-WhLKom1ZTZ24Nr1ACPcg8Q==/base.apk)
    at java.lang.Class.newInstance(Native Method) 

...
我的相依性

implementation 'com.sun.mail:android-mail:1.6.4'
        implementation 'com.sun.mail:android-activation:1.6.4'

Evrything工作正常,直到我尝试获得实际的邮件内容。阅读文件夹和主题等好。我是新的Android工作室(和Java),但我可以猜测这是某种versoning冲突。
但是什么版本的东西应该在什么方向和如何改变我不能弄清楚。
目前的理论是,该问题是由接口DataContentHandler引起的。“错误的”类handler_base实现了该接口。Android Studio在javax. activation包中提供了该接口的预定义版本。android-activation重新实现了(并更改)此接口这对编译器来说是没有问题的,但是当子类型化在运行时发生时,就会有冲突。
但是我如何删除或者暂停旧版本的接口呢?我试过在jar文件中删除它,但是没有任何结果。我没有访问源代码的权限,所以我不能更改名称。我甚至不知道理论是否成立。
更新
现在我通过交换到另一个设备来“修复”错误。我不会添加这个作为答案,因为我不知道什么设备将允许代码运行以及为什么。

q3qa4bjr

q3qa4bjr1#

This answer适用于我。他使用1.6.6解决了目标SDK 30或更新版本的问题。

相关问题