Android совместим с SDK_INT; это нормально?

Запуск следующего (note: target > 3.0)

ActionBar actionBar = getActionBar();

на Android с версией < 3.0 (SDK 11) приводит к NoSuchMethodError.

Существует несколько способов обойти это, включая отражение и ленивую загрузку классов. Однако, похоже, что работает на всех тестируемых устройствах (2.3.6, 3.0, 3.1, 4.0):

boolean hasActionBar = android.os.Build.VERSION.SDK_INT >= 11;

if (hasActionBar) {
    ActionBar actionBar = getActionBar();
} else {
    // create custom actionbar
}

Обратите внимание, что параметр SDK_INT равен static final, что, по-видимому, является причиной этого.

Является ли это допустимым способом решения проблемы совместимости?

Ответ 1

Похоже, это работает благодаря компилятору JIT. Этот код выходит из строя на SDK < 2.1, который поддерживает эту теорию. Несмотря на это, это, вероятно, не является надежным способом избежать отражения.