Как использовать инструменты: overrideLibrary в файле build.gradle?

295

Я использую библиотеки с обратной связью, для которых требуется Android 17 или более поздняя версия. Однако мое приложение поддерживает minSDK 16, поэтому я получаю сообщение об ошибке сборки, сказав, что

Error:Execution failed for task ':Tasks:processPhoneDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library /Users/mike/Projects/android-for-dummies-v3/Tasks/build/intermediates/exploded-aar/com.android.support/leanback-v17/21.0.2/AndroidManifest.xml
    Suggestion: use tools:overrideLibrary="android.support.v17.leanback" to force usage

Когда я просматриваю документацию по инструментам сборки , я вижу, как добавить overrideLibraryмаркер в мой манифест, но проблема в том, что я объявляю свой minSdk в файле Gradle, а не в моем манифесте.

Как использовать, overrideLibraryкогда minSdk объявлен в build.gradle вместо AndroidManifest.xml?

emmby
источник
Не делай этого. Вместо этого обновите minsdkversion в build.gradle
Dr Deo
4
Для этого есть законные причины, например, использование библиотеки по условию путем тестирования уровня API перед ее использованием.
Гийом Перро

Ответы:

568

Откройте Android Studio -> Открыть файл манифеста

добавить <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> не забудьте включить xmlns:tools="http://schemas.android.com/tools", прежде чем <application>тег

введите описание изображения здесь

xDragonZ
источник
в моем случаеtools:overrideLibrary="info.hoang8f.fbutton"
Шариф
13
Не упустите включенные библиотеки, которые содержат <uses-sdk tools:ignore="GradleOverrides">. Это приведет tools:overrideLibraryк игнорированию вашего атрибута. См. Stackoverflow.com/questions/31062893/…
Тео
1
Моя проблема все еще существует после добавления инструментов: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Он работал, но внезапно перестал работать сегодня после создания нового вида деятельности.
arjunkn
Вы спасли мой день (у)
KunalK
@arjunkn: добавьте <using-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, если он не работает, проверьте правильность пространства имен инструментов или неверное пространство имен xmlns: tools = " schemas. android.com/tools "
NIPHIN
170

не имеет значения, что вы объявляете ваш minSdk в build.gradle. Вы должны скопировать overrideLibraryв свой AndroidManifest.xml, как описано здесь .

<manifest 
    ... >
<uses-sdk tools:overrideLibrary="com.example.lib1, com.example.lib2"/>
    ...
</manifest>

Система автоматически игнорирует sdkVersion, объявленный в AndroidManifest.xml.

Я надеюсь, что это решит вашу проблему.

icastell
источник
1
Нужно ли указывать какие-либо версии в использовании-SDK? Кажется запутанным указывать версии в AndroidManifest, которые просто будут игнорироваться
emmby
1
Ты прав. В этом нет необходимости, в любом случае, если вы установите его в граде AndroidManifest, он будет игнорироваться во время компиляции.
icastell
13
+1 для отображения двух библиотек в примере. Вы не можете использовать две отдельные метки-sdk. так что если вы хотите переопределить два или более, вы можете поставить запятую между ними. Спасибо!!
Hitesh Chavda
1
но это не сработало для меня, чтобы использовать две библиотеки, разделенные запятой, какие-либо проблемы с моей библиотекой?
Зия Ур Рахман
7
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

Я столкнулся с проблемой конфликта между различными версиями min sdk. Так что это решение сработало для меня.

Кулдип Саксена
источник
1

Поскольку библиотека требует, minSdkVersion 17вы можете изменить то же самое в build.gradleфайле (Модуль: Приложение):

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

и после этого построения проект не должен выдавать какую-либо ошибку сборки.

Арпит Намдев
источник
4
Хотя это сработает, на самом деле это не отвечает на вопрос. OP спрашивает, как используется overrideLibrary. И есть конкретные случаи, когда вы хотите переопределить это вместо соответствия (как это нормально переопределить)
Zoe
1

Я только что изменил minSdkVersion="7"в C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xmlи это сработало.

шаги:

  1. Дорожка: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Стоимость: <uses-sdk android:minSdkVersion="7"/>
  3. Выполните команду в новой командной строке:

    C:\MyApp>phonegap build android --debug [phonegap] executing 'cordova build android --debug'... [phonegap] completed 'cordova build android --debug'

Манджунат Мрутхунджая
источник
1
Это не отвечает на вопрос, как использовать, overrideLibraryкогда minSdk объявлен в build.gradle.
LarsH
1

только что изменился только android: minSdkVersion = "16" и он отлично работает C: \ MyApp \ platform \ android \ CordovaLib \ AndroidManifest.xml

БИРЖА КУМАР
источник
0

используйте этот код в manifest.xml

<uses-sdk
android:minSdkVersion="16"
android:maxSdkVersion="17"
tools:overrideLibrary="x"/>
Али Багери
источник
0

В качестве решения для всех библиотек мы можем сопоставить их версии SDK, поэтому не может произойти непредвиденное событие

subprojects { 
afterEvaluate {project -> 
    if (project.hasProperty("android")) { 
        android { 
            compileSdkVersion 28 
            buildToolsVersion '28.0.3'
            defaultConfig {
                //It's kinda tricking android studio but anyway it works
                minSdkVersion 17
            }
        } 
    } 
    if (project.hasProperty("dependencies")) {
        dependencies {
            implementation 'com.android.support:support-core-utils:28.0.0'
            implementation 'com.android.support:appcompat-v7:28.0.0'
            implementation 'com.google.android.gms:play-services-base:16.1.0'
        }
    }
} 
}

Удалите библиотеки, которые вы не используете в своем проекте (gms), и убедитесь, что версия sdk соответствует данным gradle уровня вашего приложения

Мохаммед Ф
источник