web-dev-qa-db-ja.com

Androidにスポンジ城のJARを含める方法は?

どうやら Spongy Castle は、Bouncy Castleのフルバージョンを使用する代わりのAndroidの代替です。

ただし、jarをインポートすると、Androidに含まれていないパッケージ、主にjavax.mail、javax.activation、およびjavax.awt.datatransferに依存しているため、あらゆる種類の「解決できない」エラーが発生します。

これを回避する最良の方法は何ですか? この質問これ への応答は、それらのパッケージをまったく使用してはならないことを示し、 この一般的な質問 は方法を見つけることさえ考慮していませんAWTを取り戻すため。では、海綿城はそれらにどのように依存していますか? 人々は海綿城を使用しています 、そうですか?

28
Nathan Fig

これらは、プロジェクトに海綿城を含める方法の2つの非常に単純な例です。

V1.47以降、Spongy Castleは、対応するBouncy Castleアーティファクト(sc-light-jdk15on.jarscpg-jdk15on.jarなど)を正確に反映する個別のサブjarに分割されており、含めることを確認することが重要ですallあなたがやっていることに必要な海綿城の瓶。

依存関係の完全な情報は、次の場所にあります。

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

最低でもsc-light-jdk15on.jar(基本的な軽量API実装)と、おそらくscprov-jdk15on.jar[〜#〜] jce [〜#〜] のラッパーが必要です。軽量API)。 Mavenを使用している場合は、このすべての依存関係管理機能が処理されます。

javax.mailjavax.activationなどに記述した問題のある依存関係は、誤ったjar(たとえば、「コアプロバイダー」のものではなく、every-single-library-componentのもの)を選択した可能性があることを示しています。 -scprov-jdk15on jarは間違いなくこれらの奇妙な依存関係を持たず、Androidで問題なく実行されます。

(免責事項、私はSpongy Castleのメンテナーですが、他のユーザーからの成功報告もたくさんあります!)

32
Roberto Tyley

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);
}
39
ua741

一方、BouncyCastleは直接使用できます。後のバージョンAndroidバージョンでは、内部BCパッケージ名が変更され、少なくともパッケージ名の衝突はもはや問題ではありませんが、依然として問題があります。解決策については、以下を参照してください。 https://stackoverflow.com/a/57897224/3351474

0
k_o_