Здравствуйте.
Я никак не могу понять, как правильно 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 импортить и по-всякому. И всё никак не получается.
Подскажите, пожалуйста, как быть и по какому вообще пути лучше идти? :(