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

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

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

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

скомпилировать 'com.android.support:support-v4:13.0.+'
скомпилировать 'com.android.support:recyclerview-v7:+'

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

minSdkVersion 15
targetSdkVersion 20

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


person Aung Pyae    schedule 03.07.2014    source источник


Ответы (3)


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

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

Такое поведение наблюдается только в этой предварительной версии Android-L.

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

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

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

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

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

person Aung Pyae    schedule 03.07.2014
comment
Не могли бы вы поделиться крошечным проектом, который использует RecyclerView и работает даже в версиях до Android-L? - person android developer; 20.08.2014
comment
Это не самое безопасное занятие. Настоящая проблема заключается в том, что вы можете случайно добавить зависимость, минимальная версия которой действительно больше вашей, и без предупреждения. Затем вы можете опубликовать что-то, что просто взорвется, как только попадет в PlayStore. - person MinceMan; 14.09.2014

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

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

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

Удачи!

person MinceMan    schedule 13.09.2014

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

person Alexander Mikhaylov    schedule 03.07.2014
comment
Итак, если я установлю targetSdkVersion на 7, RecyclerView и CardView предполагают, что они будут работать на устройстве, на котором не установлен Android-L? - person Aung Pyae; 03.07.2014
comment
Это то, что говорит скрипт gradle. Ошибка: не удалось выполнить задачу ':app:processDebugManifest'. › Ошибка слияния манифеста: использование-sdk:minSdkVersion 7 не может быть меньше, чем версия L, объявленная в библиотеке com.android.support:support-v4:21.0.0-rc1 - person Aung Pyae; 03.07.2014
comment
@AungPyae Сейчас вы не можете публиковать приложение с Android-целью SDK android-L в Google Play. Таким образом, вы не можете использовать кандидата на выпуск библиотеки поддержки Android в своем проекте. RecycleView содержится в библиотеке поддержки v7. Используете что-нибудь из support-v4:21? - person Alexander Mikhaylov; 03.07.2014
comment
@AungPyae Если вы используете, вы можете установить для targetSdkVersion значение android-L, и он будет работать на Android без установленного android-L, но вы не можете использовать функции из android-L, потому что ваш старый Android зависнет на нем. - person Alexander Mikhaylov; 03.07.2014
comment
Я понимаю, что сейчас не могу опубликовать приложение с буквой L в GooglePlay. Природа виджета в библиотеке поддержки — это targetSdkVersion или minSdkVersion, не обязательно совпадать с версией, которую выпустил виджет. Несмотря на то, что я использую targetSdkVersion до 7 и minSdkVersion до 7, эти RecyclerView и CardView должны работать идеально. Даже на устройстве с ОС ниже Gingerbread. В любом случае, спасибо за ваши ответы. Я только что нашел решение. - person Aung Pyae; 03.07.2014