Я смотрел пакет Android javax.net.ssl, но я все еще запутался относительно того, как он работает с основным клеем JNI.
Из того, что я вижу, все классы в пакете javax.net.ssl (/libcore/x-net/src/main/java/javax/net/ssl) являются абстрактными и не реализуют функциональность напрямую.
Все функциональные возможности выше реализованы в папке org.apache.harmony.xnet.provider.jsse(/libcore/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse), и эта реализация делает вызовы для базового кода JNI C.
Кто-нибудь сможет рассказать мне, как провайдер связан с абстрактными классами, учитывая, что пользователь вызывает абстрактные классы непосредственно из своего кода. Я думал, что обычно пользователь будет вызывать подкласс, но в этом случае это выглядит наоборот.
Спасибо,
Крис
Хорошо, после некоторых исследований, я думаю, что у меня моя голова обернулась вокруг этого. Похоже, Apache Harmony выступает в качестве поставщика безопасности Java для пакета javax.net.ssl.
Поскольку OpenSSL используется под капотом, JNI должен использоваться, чтобы позволить Java разговаривать с кодом C OpenSSL.
Поставщик определяется в файле с именем "java.security", и хороший обзор добавления поставщика на Java можно найти по этой ссылке: http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.html