Могу ли я использовать виджеты из библиотеки поддержки Android L Preview в текущей версии Android?

#android #gradle #android-studio #android-5.0-lollipop

#Android #gradle #android-studio #android-5.0-lollipop

Вопрос:

Я пытаюсь использовать RecyclerView amp; CardView в существующей версии Android. Они сказали, что это в библиотеке поддержки. Итак, я должен иметь возможность использовать те, для которых «compileSdkVersion» заменен на «Android-L». Правильно?

Я пытаюсь использовать эти виджеты без устройства предварительного просмотра Android L или эмулятора.Я проверил другие вопросы по этому вопросу. Но, похоже, все они пробуют Android-L с версией Android-L.

Вот мои зависимости.

скомпилируйте ‘com.android.support: support-v4: 13.0. ‘
скомпилируйте ‘com.android.support: recyclerview-v7: ‘

Вот моя целевая конфигурация

minSdkVersion 15
targetSdkVersion 20

Заранее спасибо за любую идею.

Ответ №1:

Я только что нашел решение.
Причина, по которой я не могу создать приложение с помощью RecyclerView amp; CardView, в то время как targetSdkVersion и minSdkVersion не являются «Android-L», заключается в том, что внутри Google разработано для обработки предварительной версии ОС по-другому по сравнению с оригинальными выпусками.

Когда я компилирую приложение, содержащее компоненты из Android-L, инструменты сборки заблокировали minSdkVersion и targetSdkVersion на одном уровне. Новые библиотеки поддержки (RecyclerView, CardView, Palette и т.д.) Также заблокированы на уровне L API.

Такое поведение происходит только в этом выпуске Android-L preview.

Исправление для этого заключается в том, чтобы поместить следующее в AndroidManifest.xml.
Мне не нужно было ничего менять в моем скрипте gradle.

 <uses-sdk
  tools:node="replace" />
  

Начиная с версии 0.11 плагина Android Gradle, по умолчанию было включено слияние новых манифестов. Это позволяет нам вносить некоторые изменения. Эта конкретная конфигурация предписывает процессору манифеста заменить любые атрибуты из узлов uses-sdk в манифесте с более низким приоритетом (например, в данном случае библиотечный манифест) на эти атрибуты.

Поскольку Gradle также вставляет minSdkVersion и targetSdkVersion из вашего build.gradle в этот узел uses-sdk , это все, что нам действительно нужно добавить.

Проверьте здесь для получения дополнительной информации, связанной с этой проблемой.
Проверьте здесь информацию, связанную с объединением манифеста.

Комментарии:

1. Не могли бы вы, пожалуйста, поделиться крошечным проектом, который использует RecyclerView и работает даже на версиях до Android-L.

2. Это не самая безопасная вещь. Реальная проблема в том, что вы можете случайно добавить зависимость, у которой действительно минимальная версия больше вашей, и без предупреждения. Затем вы могли бы опубликовать что-то, что просто взорвется, как только попадет в PlayStore.

Ответ №2:

Лучшим решением является RecyclerViewLib. Библиотека поддержки была перенесена в репозиторий и опубликована в maven central. Это будет безопасно даже после выпуска L, поскольку весь зависящий от L код был удален. Автор объясняет это здесь в своем сообщении в блоге.

Чтобы использовать это в своем проекте, просто добавьте следующую строку в свою сборку.зависимости gradle:

 compile 'com.twotoasters.RecyclerViewLib:library:1.0. @aar'
  

Удачи!

Ответ №3:

Нет, вы должны установить targetSdkVersion выше 7. Вы можете использовать библиотеку поддержки Android v7 с проектами, которые поддерживают Android выше 7 уровня api. И еще один. Android L имеет уровень api ‘android-L’, а не 20. Под капотом у него 21-й уровень api (20 — это 4,4 Вт, KitKat для носимых устройств).

Комментарии:

1. Итак, если я присвою targetSdkVersion значение «7», предполагается, что RecyclerView и CardView будут работать на устройстве, на котором не установлен Android-L?

2. Это то, что говорит скрипт gradle. Ошибка: не удалось выполнить задачу ‘: app: processDebugManifest’. > Ошибка слияния манифеста: использует-sdk: minSdkVersion 7 не может быть меньше версии L, объявленной в библиотеке com.android.support: поддержка-v4: 21.0.0-rc1

3. @AungPyae Вы не можете опубликовать приложение с Android-target sdk android-L в Google Play сейчас. Итак, вы не можете использовать версию-кандидат библиотеки поддержки Android в вашем проекте. RecycleView содержится в библиотеке поддержки v7. Используйте ли что-нибудь из support-v4: 21?

4. @AungPyae Если вы используете, so, вы можете установить targetSdkVersion в «android-L», и он будет работать на Android без установленного android-L, но вы не сможете использовать функции из android-L, потому что ваш старый Android будет зависать на нем

5. Я понимаю, что не могу опубликовать приложение с «L» в GooglePlay сейчас. Характер виджета в библиотеке поддержки заключается в том, что targetSdkVersion или minSdkVersion не обязательно должны соответствовать версии, выпущенной виджетом. Даже если я использую targetSdkVersion до 7 и minSdkVersion до 7, предполагается, что RecyclerView и CardView будут работать идеально. Даже на устройстве с такой низкой ОС, как Gingerbread. В любом случае, спасибо за ваши ответы. Я только что нашел решение.