2016-10-05 4 views
3

Я разрабатываю приложение для Android в Android Studio, и я вызываю метод из уровня API 19. Мой проект build.gradle выглядит вот так:«Вызов новых методов на старых версиях» проверка не обнаруживает более высокие, чем минимальные вызовы api в Android Studio

android { 
    compileSdkVersion 24 
    buildToolsVersion '24.0.2' 

    productFlavors { 
     // Define separate dev and prod product flavors. 
     dev { 
      // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin 
      // to pre-dex each module and produce an APK that can be tested on 
      // Android Lollipop without time consuming dex merging processes. 
      minSdkVersion 21 
     } 
     prod { 
      // The actual minSdkVersion for the application. 
      minSdkVersion 16 
     } 
    } 

    defaultConfig { 
     applicationId "com.myapp" 
     minSdkVersion 16 
     multiDexEnabled true 
     targetSdkVersion 24 
     versionCode 1 
     versionName "1.0" 
    } 
} 

У меня нет файлов lint.xml в моем проекте, поэтому никакие чеки lint не переоцениваются.

Проблема в том, что проверка ворса «Вызов новых методов в старых версиях». не находит вызов метода для уровня API 19. Если я открою панель вариантов построения и выберем prodDebug или prodRelease, то метод будет выделен красным цветом, но проект будет хорошо работать. Как я могу заставить Android Studio эффективно продемонстрировать вышеупомянутый метод в результате анализа или заблокировать меня от правильного построения проекта?

Редактировать Я нашел способ поиска методов, не соответствующих минимальному SDK. Перейдя на панель Gradle справа и запустив задачу lint, создается HTML-отчет, который, наконец, отображает вызов API 19 наряду с другими вызовами. Почему это не реализовано в Android Studio?

Поскольку это все еще не работает в Android Studio как таковой, но, скорее, в Gradle, я еще не закрываю вопрос.

+0

Дубликат https://stackoverflow.com/questions/39710692/how-to-enable-lint-error-in-android-studio-for-message-call-require-api-level – Flow

ответ

1

Gradle не сообщит вам, используете ли вы методы, которые не поддерживаются в вашем minSDK, если ваша скомпилированная версия SDK не является минимальной. read more about it

Так просто решение особенность использования ворса т.е. inspectcode

правой кнопкой мыши, либо по проекту/класс, то => анализ => inspectCode

+0

Если набор compileSdkVersion в build.gradle равен 16, то высокие ресурсы API, такие как 'android: Widget .Material.Spinner.Underlined' (объявлен в xil ресурсе таргетинга api level 21) не найдены. Более того, я думаю, что независимо от целевого SDK, если вы объявляете минимальный API, тогда проверки должны быть простыми, сравнивая уровень api каждого метода с объявленным минимумом и добавляя те, которые не соответствуют требованию к окончательному результаты проверки. Мне действительно интересно, как это работает неправильно до этой даты. – Gonzalo

+0

@Gonzalo вы правы, но это тот случай, когда вы использовали подавление аннотации или сборки проверок, которые помогают избежать ошибок времени компиляции, поэтому, когда в большом проекте добавлено много встроенных и аннотаций, тогда простой способ - использовать функцию анализа найти, где они находятся –