如何修复 Android 上 Spongy Castle 的错误:找不到类 java.awt.datatransfer.DataFlavor

2023-12-26

我使用 lib Spongy Castle 在 Android 上对邮件进行签名和加密这个例子 https://github.com/rtyley/spongycastle/blob/spongy-master/scmail-jdk15on/src/main/java/org/spongycastle/mail/smime/examples/SendSignedAndEncryptedMail.java.

            /* Add BC */
            Security.addProvider(new BouncyCastleProvider());
            /* Open the keystore */
            KeyStore keystore = KeyStore.getInstance("PKCS12", "SC");
            keystore.load(new FileInputStream(pkcs12Keystore),
                    password.toCharArray());
            Certificate[] chain = keystore.getCertificateChain(keyalias);

            /* Get the private key to sign the message with */
            PrivateKey privateKey = (PrivateKey) keystore.getKey(keyalias,
                    password.toCharArray());

            /* Create the SMIMESignedGenerator */
            SMIMECapabilityVector capabilities = new SMIMECapabilityVector();
            capabilities.addCapability(SMIMECapability.dES_EDE3_CBC);
            capabilities.addCapability(SMIMECapability.rC2_CBC, 128);
            capabilities.addCapability(SMIMECapability.dES_CBC);

            ASN1EncodableVector attributes = new ASN1EncodableVector();
            attributes.add(new SMIMEEncryptionKeyPreferenceAttribute(
                    new IssuerAndSerialNumber(new X500Name(
                            ((X509Certificate) chain[0]).getIssuerDN()
                                    .getName()), ((X509Certificate) chain[0])
                            .getSerialNumber())));
            attributes.add(new SMIMECapabilitiesAttribute(capabilities));

            SMIMESignedGenerator signer = new SMIMESignedGenerator();
            signer.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder()
                    .setProvider("SC")
                    .setSignedAttributeGenerator(new AttributeTable(attributes))
                    .build("DSA".equals(privateKey.getAlgorithm()) ? "SHA1withDSA"
                            : "MD5withDSA", privateKey,
                            (X509Certificate) chain[0]));

            /* Add the list of certs to the generator */
            List certList = new ArrayList();
            certList.add(chain[0]);
            Store certs = new JcaCertStore(certList);
            signer.addCertificates(certs);

            /* Sign the message */
            MimeMultipart mm = signer.generate(originalMessage, "SC");
            signedMessage = new MimeMessage(session);

            /* Set all original MIME headers in the signed message */
            Enumeration headers = originalMessage.getAllHeaderLines();
            while (headers.hasMoreElements()) {
                signedMessage.addHeaderLine((String) headers.nextElement());
            }

            /* Set the content of the signed message */
            signedMessage.setContent(mm);
            signedMessage.saveChanges();

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            signedMessage.writeTo(out);

            FileOutputStream f = new FileOutputStream(new File(
                    "/sdcard/MobilePKI/out.txt"));
            f.write(out.toByteArray());
            f.close();

当我运行我的应用程序时,它返回以下错误:

11-13 08:54:11.867: E/dalvikvm(13188): Could not find class '[Ljava.awt.datatransfer.DataFlavor;', referenced from method org.spongycastle.mail.smime.handlers.multipart_signed.<clinit>
11-13 08:54:11.890: E/AndroidRuntime(13188): FATAL EXCEPTION: main
11-13 08:54:11.890: E/AndroidRuntime(13188): java.lang.VerifyError: org.spongycastle.mail.smime.handlers.multipart_signed
11-13 08:54:11.890: E/AndroidRuntime(13188):    at java.lang.Class.newInstanceImpl(Native Method)
11-13 08:54:11.890: E/AndroidRuntime(13188):    at java.lang.Class.newInstance(Class.java:1409)
11-13 08:54:11.890: E/AndroidRuntime(13188):    at javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:609)
11-13 08:54:11.890: E/AndroidRuntime(13188):    at javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:563)
11-13 08:54:11.890: E/AndroidRuntime(13188):    at javax.activation.DataHandler.getDataContentHandler(DataHandler.java:626)
11-13 08:54:11.890: E/AndroidRuntime(13188):    at javax.activation.DataHandler.writeTo(DataHandler.java:329)
11-13 08:54:11.890: E/AndroidRuntime(13188):    at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403)
11-13 08:54:11.890: E/AndroidRuntime(13188):    at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1745)
11-13 08:54:11.890: E/AndroidRuntime(13188):    at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1721)

Spongy Castle lib的源代码似乎需要java.awt.datatransfer:

package org.spongycastle.mail.smime.handlers;

import org.spongycastle.mail.smime.SMIMEStreamingProcessor;

import javax.activation.ActivationDataFlavor;
import javax.activation.DataContentHandler;
import javax.activation.DataSource;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.internet.ContentType;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;

import java.awt.datatransfer.DataFlavor;

import java.io.BufferedInputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

(link: https://github.com/rtyley/spongycastle/blob/spongy-master/scmail-jdk15on/src/main/java/org/spongycastle/mail/smime/handlers/multipart_signed.java https://github.com/rtyley/spongycastle/blob/spongy-master/scmail-jdk15on/src/main/java/org/spongycastle/mail/smime/handlers/multipart_signed.java)

我认为它必须导入包 java.awt 并且我将 rt.jar (包括 java.awt.*)导入到我的项目中,但它仍然有这个错误。


我修正了我的错误:
+ 我下载了源代码海绵城堡库 https://github.com/rtyley/spongycastle
+ 替换行“import java.awt.datatransfer.DataFlavor;”通过“导入 myjava.awt.datatransfer.DataFlavor;” (包 myjava.awt.datatransfer 包含在附加库 http://code.google.com/p/javamail-android/downloads/list)
+ 重建 spongycastle 库
+ 使用新的 spongycastle 库

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修复 Android 上 Spongy Castle 的错误:找不到类 java.awt.datatransfer.DataFlavor 的相关文章

随机推荐

  • 获取C# WinForms App的应用程序图标

    我已使用 项目属性 选项卡为 C WinForms 应用程序分配了一个图标 该图标在构建时与程序清单一起提供 有没有办法获得System Drawing Icon在运行时获取此图标的对象 而无需再次将其嵌入资源中 我已经做了我的研究 有一种
  • Laravel Echo Server、Redis、Socket.IO:似乎无法使它们工作

    我正在使用 Laravel 开发实时应用程序 由于我不想使用 Pusher 所以我尝试使用 websockets 来工作Laravel 回声服务器 https github com tlaverdure laravel echo serve
  • firebase规则:如何根据用户角色限制访问

    我是 Firebase 新手 正在尝试了解安全规则 为此 我正在实现项目 团队成员 任务的典型功能 每个项目都会有一个团队负责人 多个成员和多个任务 这是我试图实现的结构和规则 也称为要求 Members each member has d
  • Rcpp 函数比 Rf_eval 慢

    我一直在开发一个包 它使用 Rcpp 在一组大型医学成像文件上应用任意 R 代码 我注意到我的 Rcpp 实现比原始的纯 C 版本慢得多 我追踪了通过 Function 调用函数与原始 Rf eval 的区别 我的问题是为什么性能会下降近
  • Python 中的成对集交集

    如果我有可变数量的集合 让我们称这个数字为n 最多有m每个元素 计算所有集合对的成对交集的最有效方法是什么 请注意 这与所有的交集不同n sets 例如 如果我有以下集合 A a b c B c d e C a c e 我希望能够找到 in
  • 在 Go 中执行 CMD 的 'cd' 命令

    我想使用 Go 和 exec 库转到某个路径 c 然后运行 exe 文件 当我运行 Go 代码时 它会给出 exec cd 文件不存在 The cdcommand 是 shell 的内置命令 无论是 bash cmd exe PowerSh
  • 如何在 JavaScript 中创建内存泄漏并监控内存使用情况

    我正在尝试使用下面的代码片段在 JavaScript 中分配内存来研究内存泄漏 消耗 然而 performance memory usedJSHeapSize 总是显示相同的数字 在我的例子中是 10000000 尽管动态创建元素并附加到
  • 有没有办法在调用诺基亚反向地理编码 API 时关联响应和查询?

    我在用着反向地理管理者的方法诺基亚 places 搜索 manager HERE API 检索有关坐标的信息 在我的情况下 当显示一点信息时 它工作得很好 但是 当我有多个点时 我的所有点都会获取最后一个点的信息 事实上 我不使用 info
  • codeigniter 3,文件上传给出 HTTP ERROR 500

    我是 CodeIgniter 3 框架的新手 所以我对这个错误有点了解 基本上 当我尝试上传图像时 它会抛出 HTTP ERROR 500 并且服务器上的错误日志中没有错误 这是控制器的功能 if POST config upload pa
  • 查全率与查准率图

    我正在尝试绘制精确度与召回率的图表 这是我的分类报告 我不知道如何绘制显示这些的图表 这是我的分类报告代码 from sklearn metrics import classification report print print Conf
  • Smalltalk 如何操作调用堆栈帧(thisContext)?

    Smalltalk 对象thisContext看起来奇怪又奇妙 我不明白它是什么以及它是如何工作的 甚至它如何实现延续 对于 C 的调用堆栈 我可以轻松想象它是如何实现和工作的 但对于这个 我不能 请帮助我理解它 我认为这不是一个简单的问题
  • GDB 中的 x86 标签和 LEA

    我正在学习用 x86 汇编 目前为 32 位 进行编码 并且正在努力完全理解内存模型 特别令人困惑的是标签的语义 LEA 指令以及可执行文件的布局 我编写了这个示例程序 以便我可以检查它在 gdb 中的运行情况 mem s SECTION
  • c# 检查文件是否打开

    我需要验证特定文件是否打开以防止复制该文件 我尝试了很多例子 但没有一个起作用 例如 我尝试这样做 protected virtual bool IsFileLocked FileInfo file FileStream stream nu
  • 如何在 Flutter 中像 Hamilton flutter 应用程序一样制作自定义 AppBar?

    像这样 https drive google com file d 1gbs1LAmEfD5NvPlUYlGrh2j9ZLv8ZFQu view usp sharing 我的方法 没有 AppBar 和 body 的脚手架 Stack gt
  • NodeJS 获取remoteAddress 使用的IP

    我有 3 个简单的 NodeJS 服务器 使用 NET HTTP 和 UDP 每个服务器都侦听端口 X 但有多个 IP 地址 我想在客户端连接到服务器时检索服务器的实际IP地址 客户端连接的IP 客户端必须写入才能连接到服务器的IP var
  • Facebook 登录后重定向活动

    我正在使用 Android Facebook SDK 4 01 通过 Facebook 登录我的应用程序 我的 MainActivity 的 facebook 登录成功 然后我使用 Intent 继续下一个活动 那部分有效 之后 在我的新活
  • valarrays 出现奇怪的 C++ 编译错误

    我在 C 中使用 valarrays 时遇到奇怪的编译错误 这是我的代码的精简版本 include
  • Spring MVC 既不是 BindingResult 也不是普通目标

    java lang IllegalStateException BindingResult 和 bean 名称 user 的普通目标对象都不能作为请求属性 所以当我尝试运行此网页时出现此错误 但我不知道为什么 我看到并阅读了很多有关此错误的
  • 检测是否有其他应用程序正在请求麦克风

    我在 SO 上看到了多个问题 这些问题说不可能看到另一个应用程序何时想要使用麦克风 当其他应用程序在 Android 中使用麦克风时 无法访问麦克风 https stackoverflow com questions 24170124 un
  • 如何修复 Android 上 Spongy Castle 的错误:找不到类 java.awt.datatransfer.DataFlavor

    我使用 lib Spongy Castle 在 Android 上对邮件进行签名和加密这个例子 https github com rtyley spongycastle blob spongy master scmail jdk15on s