Як використовувати інструменти: overrideLibrary у файлі build.gradle?


295

Я використовую бібліотеки "Leanback", для яких потрібен Android 17 або новішої версії. Однак мій додаток підтримує minSDK 16, тож я отримую помилку збірки від висловлювань gradle

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?


Не роби цього. Замість цього оновіть minsdkversion у build.gradle
д-р Део

4
Для цього є законні причини, такі як умовне використання бібліотеки шляхом тестування рівня API перед її використанням.
Гійом Перро

Відповіді:


568

Відкрийте Android Studio -> Відкрити файл маніфесту

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

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


у моєму випадкуtools:overrideLibrary="info.hoang8f.fbutton"
shareef

13
Слідкуйте за включеними бібліотеками, які містять <uses-sdk tools:ignore="GradleOverrides">. Це призведе tools:overrideLibraryдо ігнорування вашого атрибуту. Дивіться stackoverflow.com/questions/31062893/…
Тео

1
Моя проблема все ще існує після додавання інструментів: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Він працював, але раптово перестав працювати сьогодні після створення нової діяльності.
arjunkn

ти врятував мій день (у)
KunalK

@arjunkn: додайте <use-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, якщо його не працює, перевірте, чи правильний простір імен ваших інструментів чи не правильний простір імен xmlns: tools = " схеми. 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.

Я сподіваюся, що це вирішить вашу проблему.


1
Чи потрібно вказати будь-які версії у use-sdk? Здається незрозумілим вказати версії в AndroidManifest, які просто ігноруються
emmby

1
Ти правий. Це не потрібно, інакше, якщо встановити його в AndroidManifest gradle, він буде ігнорувати його під час компіляції.
icastell

13
+1 для відображення двох прикладів у прикладі. Ви не можете використовувати два окремі теги use-sdk. тому, якщо ви хочете змінити два або більше, ви можете поставити між ними коми. Дякую!!
Hitesh Chavda

1
але це не допомогло мені використовувати дві бібліотеки, розділені комою, якісь проблеми з моєю бібліотекою?
Zia Ur Rahman

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. Команда Ran у новому записі cmd:

    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 \ platforms \ 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'
        }
    }
} 
}

Видаліть бібліотеки, які ви не використовуєте у своєму проекті (гмс), і переконайтеся, що версія sdk відповідає вашим даним градації даних рівня програми

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.