Поддержка Android Repo 46.0.0 с Android Studio 2.3
Я обновил сегодня мой репозиторий поддержки до 46.0.0, когда появилось уведомление Android Studio.
Ниже приведена ошибка:
Ошибка: выполнение выполнено для задачи ': app: processDevDebugManifest'.
Не удалось слияние манифеста: атрибут meta-data#[email protected] value = (25.3.0) из [com.android.support:support-v13:25.3.0] AndroidManifest.xml: 27: 9-31 также присутствует на [com.android.support:preference-v7:26.0.0-alpha1] AndroidManifest.xml: 24: 9-38 value = (26.0.0-alpha1). Предложение: добавить 'tools: replace = "android: значение" "для элемента в AndroidManifest.xml: 25: 5-27: 34 для переопределения.
Я обновил все свои зависимости, чтобы использовать Revision 26.0.0 Alpha 1 из 25.3.0, но, оказывается, мне нужно поднять compileSdk с 25 до 26.
Вы не можете этого сделать, если у вас есть AS 2.3, вам нужно получить нестабильную альфа/бета-версию от канарейки.
Эта ссылка показывает изменения:
https://developer.android.com/topic/libraries/support-library/revisions.html#26-0-0-alpha1
И что касается перехода на новый Android-O, то ссылка:
https://developer.android.com/preview/migration.html
Кажется, что использование стабильной версии AS не будет работать с новым репозиторием.
Как я могу вернуться в версию репозитория Android Studio версии 45 вместо новых 46?
** Обновление: объединенный манифест показывает, что один из сгенерированных манифеста библиотеки содержит
<meta-data
android:name="android.support.VERSION"
android:value="26.0.0-alpha1" />
Но так как это сгенерированное редактирование файлов бесполезно, вот почему я теперь придерживаюсь rev 45 до тех пор, пока новый AS не будет в стабильной структуре
Ответы
Ответ 1
Какая проблема
Некоторые библиотеки зависят от версии "X" или "Новее" от библиотек поддержки Android, поэтому разрешение зависимостей Gradle захватывает все, что является самым новым доступным, игнорируя, что у вас действительно есть точная версия, указанная в вашем блоке dependencies
.
Это не то, что вы хотите. Вы хотите, чтобы все библиотеки поддержки с одинаковой версией и основной версией соответствовали компиляции версии SDK.
Какое решение
К счастью, вы можете принудительно установить определенную версию библиотеки поддержки.
Поместите это в конец вашего модуля приложения build.gradle
:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.0'
}
}
}
}
Конечно, замените версию тем, что вы используете.
Значения версии для библиотек поддержки в блоке dependecies
теперь неактуальны.
Если у вас есть сомнения
Это хорошо документированный метод и он работает.
Что вы можете сделать, чтобы помочь
Найдите библиотеки, которые зависят от диапазона версий библиотеки поддержки
gradlew dependencies --configuration compile -p <module name> | grep ,
и пусть авторы указанных библиотек знают, что они должны транзитивно зависеть от самых старых библиотек поддержки, с которыми может работать их библиотека.
Цель состоит в том, чтобы избежать проблемы вообще.
Ответ 2
Это решение для исправления:
- Перейти к представлению проводника проекта
- Дойти до их внешних библиотек
- Посмотрите, какая библиотека использует 26.0.0-alpha6
- Теперь напишите это в app.gradle на основе библиотеки на шаге 3
Ex. в моем случае:
configurations.all {
resolutionStrategy.force 'com.android.support:appcompat-v7:25.3.0'
resolutionStrategy.force 'com.android.support:support-v13:25.3.0'
}
Это заставит проект использовать указанную библиотеку.
Ответ 3
Я думаю, что лучшим решением является просто вернуть библиотеку поддержки Android до версии 45.
Для этого откройте эту ссылку (измените версию на то, что вам подходит)
https://dl-ssl.google.com/android/repository/android_m2repository_r45.zip
При загрузке распакуйте и скопируйте m2repository в android-sdk-root-folder\extras\android. Обязательно удалите существующий m2repository перед распаковкой, чтобы избежать проблем.
Ответ 4
Шаг 1
Чтобы избежать Gradle проверки несовместимых версий com.android.support
, быстрое исправление заключается в добавлении следующего кода в модуль приложения build.gradle
.
dependencies {
//noinspection GradleCompatible
}
Это временное решение, которое не решает основные проблемы! Это помогло продолжить разработку вашего приложения с минимальными изменениями.
Шаг 2
Добавьте это в основной файл манифеста AndroidManifest.xml
.
<meta-data
tools:replace="android:value"
android:name="android.support.VERSION"
android:value="25.3.1" />
Эта запись будет удалена, если доступно одно из следующих обновлений репозитория поддержки.
Шаг 3
Добавьте следующий код в конец файла модуля приложения build.gradle
:
configurations.all {
resolutionStrategy.eachDependency { details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.1'
}
}
}
}
NB. Рекомендуется убедиться, что ваши библиотеки Gradle обновлены и совместимы, чтобы избежать ошибок времени выполнения.
Ответ 5
Это временное решение, которое не решает основные проблемы! Это помогло мне продолжить разработку программного обеспечения с минимальными изменениями. Просто добавьте это в основной манифест:
<meta-data
tools:replace="android:value"
android:name="android.support.VERSION"
android:value="25.3.0" />
Эта запись, можно надеяться, снова будет удалена с одним из следующих обновлений репозитория поддержки.
РЕШЕНИЕ:
Помеченное решение работало для меня, добавив следующие 4 из моих 10 файлов build.gradle:
configurations.all {
resolutionStrategy.eachDependency { details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.0'
}
}
}
}
Ответ 6
просто сделайте так, чтобы все: -
compile 'com.android.support:appcompat-v7:25.3.1'
здесь v7: 25.3.1 - это моя текущая версия, которую вы просто положили urs.
в приложении gradle файл