どうやら Spongy Castle は、Bouncy Castleのフルバージョンを使用する代わりのAndroidの代替です。
ただし、jarをインポートすると、Androidに含まれていないパッケージ、主にjavax.mail、javax.activation、およびjavax.awt.datatransferに依存しているため、あらゆる種類の「解決できない」エラーが発生します。
これを回避する最良の方法は何ですか? この質問 と これ への応答は、それらのパッケージをまったく使用してはならないことを示し、 この一般的な質問 は方法を見つけることさえ考慮していませんAWTを取り戻すため。では、海綿城はそれらにどのように依存していますか? 人々は海綿城を使用しています 、そうですか?
これらは、プロジェクトに海綿城を含める方法の2つの非常に単純な例です。
V1.47以降、Spongy Castleは、対応するBouncy Castleアーティファクト(sc-light-jdk15on.jar
、scpg-jdk15on.jar
など)を正確に反映する個別のサブjarに分割されており、含めることを確認することが重要ですallあなたがやっていることに必要な海綿城の瓶。
依存関係の完全な情報は、次の場所にあります。
http://rtyley.github.com/spongycastle/#downloads
最低でもsc-light-jdk15on.jar
(基本的な軽量API実装)と、おそらくscprov-jdk15on.jar
( [〜#〜] jce [〜#〜] のラッパーが必要です。軽量API)。 Mavenを使用している場合は、このすべての依存関係管理機能が処理されます。
javax.mail
、javax.activation
などに記述した問題のある依存関係は、誤ったjar(たとえば、「コアプロバイダー」のものではなく、every-single-library-componentのもの)を選択した可能性があることを示しています。 -scprov-jdk15on
jarは間違いなくこれらの奇妙な依存関係を持たず、Androidで問題なく実行されます。
(免責事項、私はSpongy Castleのメンテナーですが、他のユーザーからの成功報告もたくさんあります!)
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);
}
一方、BouncyCastleは直接使用できます。後のバージョンAndroidバージョンでは、内部BCパッケージ名が変更され、少なくともパッケージ名の衝突はもはや問題ではありませんが、依然として問題があります。解決策については、以下を参照してください。 https://stackoverflow.com/a/57897224/3351474