1

Мы отбрасываем поддержку устройств Android 2.3 (API уровня 9), поскольку большинство наших пользователей имеют новую версию Android на своих телефонах. Я обновил минимальную версию SDK до уровня апи 14.Android: возможность установки приложения для неподдерживаемой версии Android

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 23 
    } 
} 

Однако я все еще в состоянии установить приложение на Android 2.3 устройств вручную (не магазин). Является ли это ожидаемым поведением или я делаю что-то неправильно? Я не мог найти ответ где-то еще.

Еще одна странная проблема заключается в том, что Lint не обнаруживает правильный уровень api.

listView.setFastScrollAlwaysVisible(true); 

Это приводит к предупреждению: для вызова требуется уровень АИ 11 (текущий мин равен 9). Однако мой текущий минимум сейчас 14. Таким образом, это указывает на то, что я сделал что-то неправильно. Я попробовал очистить и восстановить проект, перезапустив Android Studio. Все это не сработало.

Может ли кто-нибудь помочь мне?

Редактировать

на основе Sufians комментарий Я начал возиться с моими Gradle файлами, и я пришел к следующему решению. Однако некоторые вопросы остаются. Моей структура проекта выглядит следующим образом:

  • android.gradle (файл сборка верхнего уровня, который содержит версии SDK)
  • основного модуля (содержит базовый код для других модулей)
    • сборки. Gradle (применяются с: '../android.gradle')
  • подмодуль A (модуль специфические изменения)
    • build.gradle (имеет зависимость от основного модуля)
  • суб модуль B (модуль специфических изменений)
    • build.gradle (имеет зависимость от основного модуля)

У меня есть файл сборки верхнего уровня android.gradle, который содержит версии SDK. Затем мои модули включают файл сборки по apply from: '../android.gradle'. Если я помещаю minSdkVersion непосредственно в основной модуль, предупреждения исчезают. Так оно и должно быть? или мне нужно установить minSdkVersion для каждого подмодуля? Или есть другой способ, чтобы версии SDK могли оставаться в файле android.gradle?

+1

что у вас есть на манифесте? – JMR

+0

Я не поставил минимальную или целевую версию SDK в манифесте. – Wirling

+0

попытайтесь найти, если у вас в вашем проекте что-то, что определяет 9 с помощью «grep», например ... – JMR

ответ

1

Хорошо ... Я наконец понял, что в моей структуре проекта нет ничего плохого. Единственное, что мне нужно было сделать, это нажать маленькую кнопку «Sync Project with Gradle Files». После этого все ошибки исчезают.

Также я пришел к выводу, что можно установить неподдерживаемые приложения вручную. Однако Google Play Store запрещает пользователям устанавливать или обновлять приложение.

+0

Android Studio показывает этот параметр в верхней части открытых файлов, всякий раз, когда происходит изменение или вокруг 'build.gradle'. Странно, что вы не заметили достаточно рано. – Sufian

0

У меня лично ничего не было создано для Android, но при установке приложений устройство никогда не жаловалось на установку .apk, которая не поддерживалась версией ОС.
, даже если в магазине сказано, что он не поддерживается. Я всегда могу установить его как .apk, поэтому я думаю, что он не может быть заблокирован.

+0

таким образом приложение может потерпеть крах. – JMR

+0

Ну, я знаю, что Google Play Store запрещает пользователям устанавливать несовместимые приложения. Большую часть времени даже не показывает вам приложение вообще. Но он, вероятно, работает только в том случае, если я правильно установил минимальную версию, которой я не уверен сейчас. – Wirling

+0

Если минимальный уровень API APK не предназначен, он не может быть установлен. – Sufian

0

Да, вы можете установить приложение вручную на своем устройстве, так как минимальный уровень API, указанный в вашем манифесте, меньше уровня API вашего устройства.

Когда вы загружаете приложение в магазин, магазин не будет показывать ваше приложение пользователям с устройствами, имеющими версию Android, меньшую, чем указанный минимальный уровень API (уровень API 9 в вашем случае).

Что касается предупреждений Lint, убедитесь, что минимальные/максимальные версии SDK в вашем файле манифеста соответствуют тем, которые указаны в файле build.gradle.

и вы также можете убедиться, что новые API-интерфейсы не выполняются на более старых уровнях API, проверяя версию ОС в коде. http://developer.android.com/reference/android/os/Build.VERSION.html

0

Если я поместил minSdkVersion непосредственно в основной модуль, предупреждения исчезнут. Так оно и должно быть?

Минимальные и целевые SDK вашего основного модуля (т. Е. Внутри модуля build.gradle) будут соответствовать вашим приложениям.

Проект build.gradle не должен содержать никакой информации.

или мне нужно установить minSdkVersion для каждого подмодуля? Или существует другой способ, чтобы версии SDK могли оставаться в файле android.gradle?

Каждый модуль определяет свой собственный минимальный SDK. Если вы используете сторонний модуль/библиотеку, лучше не изменять его, если вы не знаете, что делаете.

+0

Версии SDK находятся в android.gradle и включены в отдельные модули. Файл build.gradle моего проекта не содержит этих версий SDK. Мне просто нужно было синхронизировать мой проект с файлами Gradle, и теперь он работает нормально. По-видимому, это не вызвано чисткой или восстановлением вашего проекта. Проверьте мой ответ. – Wirling

+0

@ Виллинг не показывал ваше сообщение для шоу Studio, когда вы вносили изменения? – Sufian

+0

Нет, это не показало сообщение, что очень странно. Мои другие коллеги могут это подтвердить. – Wirling

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