java.lang.VerifyError IllformedLocaleException

У меня есть следующий родительский метод, который используется во всех случаях различными уровнями API:

public int setVoice (@NonNull final String language, @NonNull final String region){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        return setVoice21(language, region);
    } else {
        return setVoiceDeprecated(language, region);
    }
}

а такжеsetVoice21 делает что-то вроде этого:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public int setVoice21 ( @NonNull final String language, @NonNull final String region){

    try {
        // try some API 21 stuff
    } catch (final IllformedLocaleException e) {
        e.printStackTrace();
        return setVoiceDeprecated(language, region);
    }

setVoice21 содержит другой код, который требует API 21+TextToSpeech.Voice а такжеLocale.Builder

Когда я запускаю этот код на устройстве <API 21, я получаю следующую ошибку:

W / dalvikvm: VFY: невозможно разрешить класс исключений 6232 (Ljava / util / IllformedLocaleException;) W / dalvikvm: VFY: отклонение кода операции 0x0d в 0x0168 W / dalvikvm: VFY: отклонен Lcom / myapp / android / speech / MyTechoToSset (Ljava / lang / String; Ljava / lang / String;) IW / dalvikvm: верификатор отклонен, класс Lcom / myapp / android / speech / MyTextToSpeech;

E / AndroidRuntime: ФАКТИЧЕСКОЕ ИСКЛЮЧЕНИЕ: main java.lang.VerifyError: com / myapp / android / speech / MyTextToSpeech

Если я удалюIllformedLocaleException и просто замените его стандартным исключением, приложение работает нормально, несмотря на множество других ссылок на методы> API21 вsetVoice21

Чтобы запутать меня еще больше,setVoice21 вызывает следующий класс

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private class TTSVoice {

    public void buildVoice() {

        try {
            // Do some API 21 stuff
        } catch (final IllformedLocaleException e) {
        }

    }
}

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

Может кто-нибудь помочь мне понять, почему IllformedLocaleException вызывает эту ошибку? Исключения обрабатываются как-то иначе?

Я благодарю вас заранее.

Примечание - я не уверен, что это актуально, но я делаю подклассыТекст в речь стандартным способом. Боюсь, это может усложнить вопрос, но на всякий случай ...

public class MyTextToSpeech extends TextToSpeech {

    public MyTextToSpeech(final Context context, final OnInitListener listener) {
        super(context, listener);
    }
}

РЕДАКТИРОВАТЬ - Обходной путьпредоставлено razzledazzle ниже, позволяет приложению работать без сбоев, но я все еще не знаю, почему такой шаг необходим. Мне никогда раньше не приходилось принимать такие меры при работе с версиями API.

Ответы на вопрос(1)

Ваш ответ на вопрос