如何在 Android 中包含 Spongy Castle JAR?

Posted

技术标签:

【中文标题】如何在 Android 中包含 Spongy Castle JAR?【英文标题】:How to include the Spongy Castle JAR in Android? 【发布时间】:2011-10-17 10:44:53 【问题描述】:

显然Spongy Castle 是使用完整版 Bouncy Castle 的 android 替代方案。

但是,在导入 jar 时,我遇到了各种“无法解决”的错误,因为它依赖于 Android 未包含的包,主要是 javax.mail、javax.activation 和 javax.awt.datatransfer。

那么解决这个问题的最佳方法是什么?对this question 和this 的回复表明根本不应该使用这些包,this popular question 甚至没有考虑找到一种方法来恢复 AWT。那么海绵城堡是如何依赖他们的呢? People are using Spongy Castle,对吧?

【问题讨论】:

【参考方案1】:

如果您使用的是 gradle,那么您可以像这样在 build.gradle 文件中指定您的依赖项:

dependencies 
     ....
    compile 'com.madgag.spongycastle:core:1.54.0.0'
    compile 'com.madgag.spongycastle:prov:1.54.0.0'
    compile 'com.madgag.spongycastle:pkix:1.54.0.0'
    compile 'com.madgag.spongycastle:pg:1.54.0.0'

    

您可以找到最新版本的库here。

不要忘记将它作为安全提供程序插入到您的应用中。

    static 
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);

【讨论】:

在哪里添加安全提供者行?在自定义应用程序类中? 是的,我们已经在自定义类中添加了这个。每当引用该类实例时,都会插入提供程序。确保您要在其中插入它的类是您的加密操作的入口点。 就我而言,我已将静态块放入我的自定义应用程序类中,但噩梦发生了。该应用程序总是抱怨无效的 SSL 证书并弹出不受信任的连接对话框。我将静态块移至 Crypto utils 类,问题已修复。 谢谢@LoganGuo。我认为 AndyRoid 的问题被误解了。【参考方案2】:

这是两个非常简单的示例,说明如何在项目中包含 Spongy Castle:

github.com/rtyley/spongycastle-eclipse - 日食 github.com/rtyley/toy-android-ssh-agent - Maven

自 v1.47 起,Spongy Castle 已拆分为单独的子 jar,这些子 jar 完全反映了匹配的 Bouncy Castle 工件(例如 sc-light-jdk15on.jarscpg-jdk15on.jar 等),确保您包含 非常重要所有你正在做的事情所需的海绵城堡罐子。

有关依赖项的完整信息可以在以下位置找到:

http://rtyley.github.com/spongycastle/#downloads

您至少需要sc-light-jdk15on.jar(基本的轻量级API 实现)和可能的scprov-jdk15on.jar(轻量级API 的JCE 包装器)。如果您使用的是 Maven,那么所有这些依赖管理的东西都会为您处理好。

您在javax.mailjavax.activation 等上描述的有问题的依赖项表明您可能选择了不正确的 jar(例如,every-single-library-component 一个,而不是“核心提供者”一个)-因为scprov-jdk15on jar 绝对没有有任何这些奇怪的依赖项,并且在 Android 上运行愉快。

(免责声明,我是 Spongy Castle 的维护者,但我也收到了很多其他用户的成功报告!)

【讨论】:

问题是,我相信这正是我使用的 JAR 文件。我去了github.com/rtyley/spongycastle并点击了“下载”子标题下的“您可以直接在此处下载最新的jar”链接。不幸的是,我不再从事该项目,所以我不太可能有机会很快再试一次 - 但为了其他人,将您的 JAR 文件包含在 Android 项目中的推荐步骤是什么? 我添加了你的库,但它仍然抛出 bouncycastle.ans1 类没有找到的异常类加载。如何让它在 spongycastle 中搜索? 如何从这个链接github.com/rtyley/spongycastle添加lib ..没有jar文件...【参考方案3】:

同时可以直接使用BouncyCastle。在后来的 Android 版本中,内部 BC 包名称已更改,至少包名称冲突不再是问题,但仍然存在问题。如需解决方案,请查看:https://***.com/a/57897224/3351474

【讨论】:

以上是关于如何在 Android 中包含 Spongy Castle JAR?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 Android 中包含布局?

如何在 android 库 gradle 项目中包含依赖项?

Android 通知:如何在顶行中包含额外的文本

如何在我的 Android 库 (AAR) 中包含 proguard 配置

如何在 Android Studio 中包含 *.so 库?

如何在 Android NDK 项目中包含二进制文件?