mva
@mva
CEO, CTO, Lua/Gentoo/IPv6 Pioneer

Как правильно import'ить conscrypt в android-приложении?

Здравствуйте.
Я никак не могу понять, как правильно import'нуть классы из conscrypt'a в своём приложении.
Изначально, я вообще не использовал его, и до недавнего всё работало так:

static Func (PrivateKey privkey) throws NoSuchAlgorithmException, InvalidKeySpecException {
		if (privkey instanceof RSAPrivateCrtKey) {
<...>
			RSAPrivateCrtKey rsaPriv = (RSAPrivateCrtKey) privkey;
// использование rsaPriv.getModulus() и rsaPriv.getPublicExponent();
<...>
		} else if (privkey instanceof DSAPrivateKey) {
<...>
		} else if (privkey instanceof ECPrivateKey) {
<...>
		} else {
			throw new NoSuchAlgorithmException("Ключ не является ни RSA, ни DSA, ни EC");
		}
}


И что-то вдруг на 4.4.2 Андроиде работа с RSA-ключом сломалась. После почти суток дебага я обнаружил, что в рантайме PrivateKey privkey, на поверку имеет класс com.android.org.conscrypt.OpenSSLRSAPrivateKey (равно как и dsa/ec соотвествующие им классы из conscrypt, но там это не мешает, а тут, вот, мешает).

В итоге, в рантайме андроида при коде подобном приведённому выше, у меня вылетает ошибка что:
java.lang.ClassCastException: com.android.org.conscrypt.OpenSSLRSAPrivateKey cannot be cast to java.security.interfaces.RSAPrivateCrtKey

а в компайл-тайме при попытке использовать conscrypt, чтобы избежать этого — я не могу объяснить сборщику где брать conscrypt.
Потому что он у меня лежит (как впрочем, и должен) в $ANDROID_HOME/sources/<ИМЯ_TARGET'а>/org/conscrypt. (т.е. в конкретном моём случае конкретной сборки конкретного тестирования это /opt/android-sdk-update-manager/sources/android-19/org/conscrypt. Для android-21 тоже лежит соответсвенно.
Казалось бы, никаких проблем: берёшь и импортишь, но почему-то на:
import org.conscrypt.OpenSSLRSAPrivateKey;
я получаю:

[javac] /home/mva/.vcs_repos/foo/Bar.java:74: error: package org.conscrypt does not exist
[javac] import org.conscrypt.OpenSSLRSAPrivateKey;


в local.properties путь до sdk как и положено, указан (впрочем, ничего больше не указано)

Пробовал и как com.android.org.conscrypt импортить и по-всякому. И всё никак не получается.

Подскажите, пожалуйста, как быть и по какому вообще пути лучше идти? :(
  • Вопрос задан
  • 2791 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы