2012-02-07 3 views
0

Запуск следующего (примечание: целевой> 3,0)Android-совместимость с SDK_INT-хаком; это нормально?

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, который, как представляется, почему это работает.

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

+0

в соответствии с google: http://developer.android.com/resources/dashboard/platform-versions.html большинство пользователей не превышает 2.3. Поэтому вы можете пересмотреть свою стратегию. Внедрите решение, которое работает на устройствах <3.0. –

+0

@Paul, это действительно ради любопытства. –

ответ

1

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