ChatGPT解决这个技术问题 Extra ChatGPT

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

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?

Dont do this. Instead update minsdkversion in the build.gradle
There are legitimate reasons to do this, such as conditionally use a library by testing API level before using it.
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.

G
Govind Parmar

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

https://i.stack.imgur.com/IiBwm.png


in my case tools:overrideLibrary="info.hoang8f.fbutton"
Watch out for included libraries that contain <uses-sdk tools:ignore="GradleOverrides">. Those will cause your tools:overrideLibrary attribute to be ignored. See stackoverflow.com/questions/31062893/…
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.
you saved my day (y)
what if i want more than overridelibrary
d
daka

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.


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 ignored
You are right. Is not necessary, anyways if you set it in the AndroidManifest gradle will ignore it at compilation time.
+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!!
but this didn't work for me to use two libraries separated by comma, any problem with my library?
L
LarsH
<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.


B
BIRJA KUMAR

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


S
Smar

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

Steps:

Path: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml Value: Ran command in new cmd prompt: C:\MyApp>phonegap build android --debug [phonegap] executing 'cordova build android --debug'... [phonegap] completed 'cordova build android --debug'


This doesn't answer the question, which is how to use overrideLibrary when the minSdk is declared in build.gradle.
a
ali bagheri

use this code in manifest.xml

<uses-sdk
android:minSdkVersion="16"
android:maxSdkVersion="17"
tools:overrideLibrary="x"/>

M
Mohammad f

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


g
goto

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.


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)