Android Studio показывает методы из более нового API
Я заметил, что мой проект Android Studio предлагает методы и типы, которые недоступны для использования в моем минимальном SDK. Я использую Android Studio версии 1.1.0.
Я вижу, что моя минимальная версия SDK установлена правильно в файле build.gradle:
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.pythagoras.sunshine"
minSdkVersion 18
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
...
}
но я заметил, что функция "автозаполнения" в Android Studio по-прежнему предлагает методы, которые недоступны в API 18. При сборке проекта я не получаю никаких ошибок при использовании этих более новых методов, а также с устройства, которое я тестирую использует целевой API, я не вижу проблем в моем приложении.
Есть ли в Android Studio параметр, позволяющий удалять параметры автозаполнения из API больше моего минимума? Или, по крайней мере, есть способ получить ошибку сборки, если используется слишком новый метод? Я пытался нажать кнопку "Синхронизировать проект с файлами Gradle", но все еще не получал сообщение об ошибке при перестройке.
Спасибо!
2 ответа
Такое поведение я вижу в Android Studio 1.3.2, используя вашу конфигурацию: compileSdkVersion=21 minSdkVersion=18 targetSdkVersion=21
Вы увидите все методы до уровня API 21, так как вы компилируете с SDK 21.
Если вы установите targetSdkVersion равным 18, то вы также можете понизить compileSdkVersion до 18, удалив методы из API 19, 20, 21. Но это означает, что вы не сможете использовать более новые методы / классы на устройствах, которые используют новые SDK. Снижение targetSdkVersion также сообщает устройству Android, что вы не тестировали его, и обеспечивает совместимость, которая может соответствовать вашим требованиям или не соответствовать им.
Если вы решите, что хотите использовать расширенные функции API 19/20/21 на устройствах, которые его поддерживают, а также не активировать режимы совместимости на этих новых устройствах, вам следует оставить для targetSdkVersion значение 21.
Теперь Android Studio должна выдавать предупреждение при использовании метода уровня API 19+. Это связано с тем, что метод завершится с ошибкой NoSuchMethodError на устройствах с уровнем SDK 18, поскольку он не существует. Теперь вы можете проверить версию SDK устройства и использовать только определенный метод на его основе (сравните, используя версию SDK).
Примечание: при использовании Android Studio я заметил, что при использовании метода API уровня 23 предупреждение о задержке не отображается. Например: если я использую compileSdkVersion=23, targetSdkVersion=23, minSdkVersion=19, Android Studio показывает ошибки, когда я использую метод API уровня 21 finishAndRemoveTask или метод API уровня 22 getReferrer. Тем не менее, он не показывает ошибку для API уровня 23 метода getSearchEvent. Может быть, Android Lint не обновляется для API уровня 23.
Android Studio компилирует ваш код против compilesdkversion
android {
compileSdkVersion 18
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.pythagoras.sunshine"
minSdkVersion 18
targetSdkVersion 18
versionCode 1
versionName "1.0"
}
...
}