如何在build.gradle文件中使用tools:overrideLibrary?


295

我正在使用需要Android 17或更高版本的leanback库。但是我的应用程序支持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标记添加到清单中,但是问题是我在gradle文件中而不是清单中声明了minSdk。

overrideLibrary当在build.gradle中而不是在AndroidManifest.xml中声明minSdk时,如何使用?


不要这样做。而是在build.gradle中更新minsdkversion
Dr Deo

4
这样做有正当的理由,例如在使用API​​之前通过测试API级别有条件地使用该库。
Guillaume Perrot

Answers:


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/…–
Theo

1
添加工具后,我的问题仍然存在:overrideLibray =“ ca.barrenechea.widget.recyclerview.decoration”。它正在工作,但是在创建新活动后今天突然停止工作。
arjunkn

您保存了我的一天(y)
KunalK '17

@arjunkn:添加<uses-sdk tools:overrideLibray =“ ca.barrenechea.widget.recyclerview.decoration” />,如果它不起作用,请检查您的工具名称空间是否正确,即xmlns:tools =“ 模式。 android.com/tools
NIPHIN

170

在build.gradle中声明minSdk没关系。你要复制overrideLibrary你的AndroidManifest.xml,作为记录在这里

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

系统会自动忽略AndroidManifest.xml中声明的sdkVersion。

我希望这能解决您的问题。


1
您必须在uses-sdk中指定任何版本吗?在AndroidManifest中指定将被忽略的版本似乎令人困惑
emmby 2014年

1
你是对的。没必要,无论如何,如果您在AndroidManifest gradle中进行了设置,则会在编译时忽略它。
icastell 2014年

13
+1用于显示两个库。您不能使用两个单独的uses-sdk标签。因此,如果您要覆盖两个或多个,可以将逗号置于中间。谢谢!!
Hitesh Chavda'9

1
但这对我来说不能使用两个用逗号分隔的库,我的库有问题吗?
Zia Ur Rahman

7
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

我面临着不同的最小SDK版本之间的冲突问题。所以这个解决方案对我有用。


1

根据库的要求,minSdkVersion 17您可以在build.gradle(Module:Application)文件中进行更改:

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. 在新的cmd提示符中运行命令:

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


1
这不能回答问题,即overrideLibrary在build.gradle中声明minSdk时如何使用。
LarsH '18



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数据匹配

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.