Это скрытый класс в Android SDK (см. версия Android 8.1).
Если я сделаю обходной путь, как stackoverflow.com/questions/28287570/…. Гарантировано ли, что приложение не выйдет из строя в процессе производства?
@EugenMartynov: "как скомпилировать скрытый класс в Android SDK?" - не можешь. «Гарантировано ли, что приложение не выйдет из строя в процессе производства?» - Я бы не стал этого делать. Вызовите Class.forName() и посмотрите его во время выполнения, помня, что это может сломаться на Android P. Или вызовите getClass().getName() для исключения и сравните его с android.security.KeyStoreException (хотя это не будет обрабатывать подклассы).
Спасибо! На самом деле я буду сравнивать имена классов, поскольку на данный момент это единственная доступная стратегия.
Или просто игнорируйте причину и в этом случае реле на ProviderException
Вы можете скачать исходный код android sdk по этой ссылке:
Что касается проверки типа исключения во время выполнения, вы можете сделать следующее (в Kotlin - при необходимости транскрибировать на Java):
fun doSomething() {
try {
// Do something that may cause an exception
} catch (ex: KeyStoreException) {
}
}
или же:
fun checkType() {
try {
// Something that could throw an exception
} catch(ex: Exception) {
when (ex) {
is KeyStoreException -> {
// Handle
}
}
}
}
Я не могу скомпилировать этот код. Ты пробовал? Этот класс не отображается в Android SDK.
Компилирует мне нормально. Однако это Kotlin, как я уже сказал в своем ответе, вам может потребоваться транскрибировать на Java, если вы пишете на Java.
Это android.security.KeyStoreException или java.security.KeyStoreException?
java.security.KeyStoreException, для которого android.security.KeyStoreException является просто псевдонимом (насколько мне известно). Из официальных документов (обратите внимание на название пакета): developer.android.com/reference/java/security/…
Нет, это не псевдоним. Пожалуйста, не ошибитесь :)
Том, извини, что мой вопрос выглядит расплывчатым. Проблема в том, что этот класс не отображается в Android SDK, и это совершенно другой класс, чем вы указали. Таким образом, вопрос заключался не в том, как написать код класса, который я не могу найти в моем пути компиляции.
Это скрытый класс в Android. Доступ к нему может получить только фреймворк или нижние уровни и системные приложения, они не могут использоваться сторонними приложениями. Вы можете проверить определение по ссылке ниже.
В Android есть 3 таких класса. Все 3 находятся в разных пакетах и используются в разном контексте.
Спасибо, как во время выполнения проверить, имеет ли исключение именно этот класс?
единственный способ, о котором я могу думать, - это использовать отражение.
Марк, как скомпилировать скрытый класс в Android SDK?