Где я могу найти android.security.KeyStoreException?

В каком SDK, jar этот класс можно найти? Мне нужно проверить во время выполнения, является ли исключение его экземпляром.

Я знаю, что этот класс можно найти в источниках AOSP. Но во время выполнения это не очень помогает.

0
0
469
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Это скрытый класс в Android SDK (см. версия Android 8.1).

Марк, как скомпилировать скрытый класс в Android SDK?

Eugen Martynov 09.04.2018 17:58

Если я сделаю обходной путь, как stackoverflow.com/questions/28287570/…. Гарантировано ли, что приложение не выйдет из строя в процессе производства?

Eugen Martynov 09.04.2018 18:01

@EugenMartynov: "как скомпилировать скрытый класс в Android SDK?" - не можешь. «Гарантировано ли, что приложение не выйдет из строя в процессе производства?» - Я бы не стал этого делать. Вызовите Class.forName() и посмотрите его во время выполнения, помня, что это может сломаться на Android P. Или вызовите getClass().getName() для исключения и сравните его с android.security.KeyStoreException (хотя это не будет обрабатывать подклассы).

CommonsWare 09.04.2018 18:04

Спасибо! На самом деле я буду сравнивать имена классов, поскольку на данный момент это единственная доступная стратегия.

Eugen Martynov 09.04.2018 18:19

Или просто игнорируйте причину и в этом случае реле на ProviderException

Eugen Martynov 09.04.2018 18:36

Вы можете скачать исходный код android sdk по этой ссылке:

Исходный код 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.

Eugen Martynov 09.04.2018 17:57

Компилирует мне нормально. Однако это Kotlin, как я уже сказал в своем ответе, вам может потребоваться транскрибировать на Java, если вы пишете на Java.

Thomas Cook 09.04.2018 18:00

Это android.security.KeyStoreException или java.security.KeyStoreException?

Eugen Martynov 09.04.2018 18:02

java.security.KeyStoreException, для которого android.security.KeyStoreException является просто псевдонимом (насколько мне известно). Из официальных документов (обратите внимание на название пакета): developer.android.com/reference/java/security/…

Thomas Cook 09.04.2018 18:03

Нет, это не псевдоним. Пожалуйста, не ошибитесь :)

Eugen Martynov 09.04.2018 18:04

Том, извини, что мой вопрос выглядит расплывчатым. Проблема в том, что этот класс не отображается в Android SDK, и это совершенно другой класс, чем вы указали. Таким образом, вопрос заключался не в том, как написать код класса, который я не могу найти в моем пути компиляции.

Eugen Martynov 09.04.2018 18:17

Это скрытый класс в Android. Доступ к нему может получить только фреймворк или нижние уровни и системные приложения, они не могут использоваться сторонними приложениями. Вы можете проверить определение по ссылке ниже.

http://androidxref.com/8.0.0_r4/xref/frameworks/base/keystore/java/android/security/KeyStoreException.java.

В Android есть 3 таких класса. Все 3 находятся в разных пакетах и ​​используются в разном контексте.

http://androidxref.com/8.0.0_r4/search?q=&defs=&refs=&path=%22KeyStoreException.java%22&hist=&project=art&project=bionic&project=bootable&project=build&project=cts&project=dalvik&project=developers&project=developers&project=developers&project=developers&project=developers&project=developers&project=developers = external & project = frameworks & project = hardware & project = kernel & project = libcore & project = libnativehelper & project = packages & project = pdk & project = platform_testing & project = prebuilts & project = sdk & project = system & project = test & project = toolchain & project = tools

Спасибо, как во время выполнения проверить, имеет ли исключение именно этот класс?

Eugen Martynov 11.04.2018 10:47

единственный способ, о котором я могу думать, - это использовать отражение.

khetanrajesh 11.04.2018 10:58

Другие вопросы по теме