How do I use tools:overrideLibrary in a build.gradle file?
Asked Answered
W

9

369

I'm using the leanback libraries, which require Android 17 or later. However my app supports a minSDK of 16, so I get a build error from gradle saying

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

When I look at the build tools documentation, I see how to add the overrideLibrary marker to my manifest, but the problem is that I'm declaring my minSdk in my gradle file instead of in my manifest.

How do I use overrideLibrary when the minSdk is declared in build.gradle instead of in AndroidManifest.xml?

Whelm answered 23/11, 2014 at 22:23 Comment(3)
Dont do this. Instead update minsdkversion in the build.gradleBurtonburty
There are legitimate reasons to do this, such as conditionally use a library by testing API level before using it.Harmful
For those who don't know what overrideLibrary does, "When the lower-priority manifest has a minSdkVersion value that's higher, an error occurs unless you apply the overrideLibrary merge rule." source. Effective, this overrideLibrary simply removes the warning, it does not change anything else.Adulterer
K
690

Open Android Studio -> Open Manifest File

add <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> don't forget to include xmlns:tools="http://schemas.android.com/tools" too, before the <application> tag

enter image description here

Kunming answered 5/12, 2014 at 6:52 Comment(5)
in my case tools:overrideLibrary="info.hoang8f.fbutton"Flunkey
Watch out for included libraries that contain <uses-sdk tools:ignore="GradleOverrides">. Those will cause your tools:overrideLibrary attribute to be ignored. See #31063393Gannon
My problem still exists after adding tools:overrideLibray="ca.barrenechea.widget.recyclerview.decoration". It was working but suddenly stopped working today after creating a new activity.Hyrup
@Hyrup : add <uses-sdk tools:overrideLibray="ca.barrenechea.widget.recyclerview.decoration"/> , If its not working check if your tools namespace is correct or not the correct namespace is xmlns:tools="schemas.android.com/tools"Bushire
what if i want more than overridelibraryNinnetta
C
229

it doesn't matter that you declare your minSdk in build.gradle. You have to copy overrideLibrary in your AndroidManifest.xml, as documented here.

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

The system automatically ignores the sdkVersion declared in AndroidManifest.xml.

I hope this solve your problem.

Caesura answered 27/11, 2014 at 17:13 Comment(4)
Do you have to specify any versions in the uses-sdk? It seems confusing to specify versions in AndroidManifest that are just going to be ignoredWhelm
You are right. Is not necessary, anyways if you set it in the AndroidManifest gradle will ignore it at compilation time.Caesura
+1 for display two libs in example. You can't use two seperate uses-sdk tag. so if you want to override two or more you can put comma in-between. Thanks!!Antecedency
but this didn't work for me to use two libraries separated by comma, any problem with my library?Flatways
K
20
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

I was facing the issue of conflict between different min sdk versions. So this solution worked for me.

Konstance answered 29/9, 2017 at 11:44 Comment(0)
C
3

just changed only android:minSdkVersion="16" and it's work perfect C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml

Cassiopeia answered 15/4, 2019 at 14:12 Comment(0)
S
1

use this code in manifest.xml

<uses-sdk
android:minSdkVersion="16"
android:maxSdkVersion="17"
tools:overrideLibrary="x"/>
Spendthrift answered 30/6, 2018 at 7:57 Comment(0)
H
0

I just changed minSdkVersion="7" in C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml and it worked.

Steps:

  1. Path: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Value: <uses-sdk android:minSdkVersion="7"/>
  3. Ran command in new cmd prompt:

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

Honghonied answered 29/5, 2015 at 21:21 Comment(1)
This doesn't answer the question, which is how to use overrideLibrary when the minSdk is declared in build.gradle.Acceptor
M
0

As soulution for all libraries we can match sdk version of them so no unexpected event may happen

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

Remove libraries that you do not use in your project (gms) and make sure that sdk version matches your app level gradle data

Meares answered 18/9, 2019 at 21:52 Comment(0)
Z
0

That work for me

<uses-sdk 
    android:minSdkVersion="16"
    android:maxSdkVersion="17"
    tools:overrideLibrary="pl.droidsonroids.gif" />
      


   
Zashin answered 22/10, 2022 at 11:36 Comment(0)
A
-1

As library requires minSdkVersion 17 then you can change the same in build.gradle(Module:Application) file:

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

and after that building the project should not throw any build error.

Anagram answered 5/2, 2017 at 7:6 Comment(1)
While this would work, it doesn't actually answer the question. OP asks how overrideLibrary is used. And there are specific cases where you'd want to override it instead of comply (as it's fine to override it)Horrocks

© 2022 - 2024 — McMap. All rights reserved.