#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. В любом случае, спасибо за ваши ответы. Я только что нашел решение.