2013-06-12 1 views
8

Я создаю приложение для Gingerbread и с minSdkVersion=10 и targetSdkVersion=17 в своем AndroidManifest.xml.Как я могу убедиться, что в Android не вызывается неподдерживаемый (более высокий уровень) API?

Я знаю, что я должен проверить, если API поддерживается, прежде чем я это называю, например:

private void removeRule(RelativeLayout.LayoutParams params, int rule) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // API 17 
     params.removeRule(rule); 
    } else { 
     params.addRule(rule, 0); 
    } 
} 

Но иногда я забываю/или не знаю, что я звоню более высокий уровень API, а иногда сбой моей программы с исключением NoSuchMethodError.

Итак, перед публикацией моего приложения я всегда устанавливал свой проект на использование Android SDK 2.3.3 и следил за тем, чтобы я не совершал незаконные вызовы методов (например, все ошибки, которые я получаю, завернуты в оператор if, проверяющий андроид SDK), затем установите SDK обратно в 4.2.2.

Есть ли лучший способ убедиться, что неподдерживаемый API не вызывается без переключения SDK?

(P.S. Я использую IntelliJ)

+2

Правильный ответ: «Использовать Lint» (http://developer.android.com/tools/debugging/improving-w-lint.html), поскольку он расскажет вам, когда вы используете что-то более новое, чем ваш 'android: minSdkVersion ', но я не уверен, есть ли интеграция IntelliJ для этого. Если нет, вам нужно будет запустить его из командной строки. – CommonsWare

ответ

7

Вы можете (должны) запускать Android Lint, чтобы проверить, что:

правой кнопкой мыши на проекте (или пакет, класс)> Analyze> Проверить код.

enter image description here

+0

Спасибо! Я не знал об Android Lint. Но я просто попробовал, кажется, что он не поймал неправильные вызовы API (используя приведенный выше пример, но удалите проверку оператора if). :( –

+0

удалите '@SuppressLint (« NewApi »)' из вашего кода, посмотрите, где находятся ошибки Lint, затем верните подавление и добавьте операторы if, если это необходимо. – LuckyMe

+0

Возможные причины Lint не улавливает ошибку «NewAPI» - https://code.google.com/p/android/issues/detail?id=56427 –

2

В Eclipse Properties -> Android Настройки Lint -> NewApi и изменить Строгость к ошибке.

Смежные вопросы