2015-06-04 3 views
2

Я заметил, что мой проект Android Studio предлагает методы и типы, которые недоступны для использования в моем минимальном SDK. Я использую Android Studio версии 1.1.0.Android Studio показывает методы от более нового API

Я вижу, что моя минимальная версия 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 больше моего минимума? Или существует ли хотя бы способ получить ошибку построения, если используется слишком недавний метод? Я попробовал кнопку «Sync Project with Gradle Files», но я до сих пор не получил ошибку при перестройке.

Спасибо!

+1

thats, потому что ваш compilesdkversion равен 21 – 3xplore

ответ

1

Android Studio компилирует код против compilesdkversion

android { 
    compileSdkVersion 18 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     applicationId "com.pythagoras.sunshine" 
     minSdkVersion 18 
     targetSdkVersion 18 
     versionCode 1 
     versionName "1.0" 
    } 
    ... 
} 
+0

Спасибо, поэтому, чтобы убедиться, что я понимаю, хотя на устройстве, на котором я тестирую, работает android 5.0.2 (API 21) Я еще должен компилировать API 18? – rose

+1

Какой смысл указывать минимальную версию SDK, если Android Studio не использует эту информацию? Это только, когда приложение распространяется в магазине приложений? – rose

+0

, если вы хотите запустить приложение на api 21, сохраните версию компиляции как 21 – 3xplore

4

Это поведение я вижу в Android Studio 1.3.2, используя конфигурацию: compileSdkVersion = 21 minSdkVersion = 18 targetSdkVersion = 21

Вы увидите все методы до уровня API 21, поскольку вы компилируете с SDK 21.

Если вы установите для targetSdkVersion значение 18, то y Кроме того, ou также может снизить значение compileSdkVersion до 18, удалив методы из API 19, 20, 21. Но это означает, что вы не сможете использовать более новые методы/классы на устройствах, использующих новые SDK. Уменьшение targetSdkVersion также говорит об устройстве Android, которое вы не тестировали для него, и допускает поведение совместимости, которое может быть или не быть тем, что вы хотите.

Если вы решили использовать расширенные функции из API 19/20/21 на устройствах, которые поддерживают его, а также не активируя поведения совместимости на этих новых устройств, вы должны держать targetSdkVersion установить до 21.

Теперь Android Studio должна дать вам предупреждение при использовании метода с уровня API 19+. Это связано с тем, что метод будет сбой с NoSuchMethodError на устройствах с уровнем SDK 18, поскольку он не существует. Теперь вы можете проверить device's SDK Version и использовать только данный метод на основе этого (сравните с помощью SDK Version).

Замечание: Что-то интересное, которое я заметил при использовании Android Studio, заключается в том, что предупреждение при использовании метода уровня 23 не отображается. Например: если я использую compileSdkVersion = 23, targetSdkVersion = 23, minSdkVersion = 19, Android Studio показывает ошибки, когда я использую метод уровня 21 API finishAndRemoveTask или метод уровня 22 уровня getReferrer. Однако он не показывает ошибку для метода API уровня 23 getSearchEvent. Возможно, андроид-линт не обновлен для API-уровня 23.