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

时间:2014-11-23 22:23:29

标签: android gradle android-tv

我使用的是需要Android 17或更高版本的leanback库。但是我的应用程序支持16的minSDK,所以我从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

当我查看build tools documentation时,我看到如何将overrideLibrary标记添加到我的清单中,但问题是我在gradle文件中声明了我的minSdk而不是我的清单。

如果在build.gradle中而不是在AndroidManifest.xml中声明minSdk,我如何使用overrideLibrary

9 个答案:

答案 0 :(得分:504)

打开Android Studio - >打开清单文件

添加 <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/>  不要忘记在xmlns:tools="http://schemas.android.com/tools"代码

之前添加<application>

enter image description here

答案 1 :(得分:152)

在build.gradle中声明你的minSdk并不重要。您必须在overrideLibrary中复制AndroidManifest.xml,如文档here所示。

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

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

我希望这可以解决你的问题。

答案 2 :(得分:4)

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

我遇到了不同的min sdk版本之间的冲突问题。  所以这个解决方案对我有用。

答案 3 :(得分:1)

我刚刚更改了@Before public void initMocks() { MockitoAnnotations.initMocks(this); } 中的minSdkVersion="7",但它确实有效。

步骤:

  1. 路径:C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. 价值:C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  3. 在新的cmd提示符中执行Ran命令:

    <uses-sdk android:minSdkVersion="7"/>

答案 4 :(得分:1)

由于库需要minSdkVersion 17,您可以在build.gradle(模块:应用程序)文件中更改相同内容:

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

在该构建之后,项目不应抛出任何构建错误。

答案 5 :(得分:0)

在manifest.xml中使用此代码

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

答案 6 :(得分:0)

仅更改了android:minSdkVersion =“ 16”,并且工作完美 C:\ MyApp \ platforms \ android \ CordovaLib \ AndroidManifest.xml

答案 7 :(得分: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数据匹配

答案 8 :(得分:0)

overrideLibrary中而不是build.gradle中声明minSdk时,请使用AndroidManifest.xml

如果您使用的是Android Studio:

<uses-sdk tools:overrideLibrary="android.support.v17.leanback"/>添加到清单中,不要忘记也包含xmlns:tools="http://schemas.android.com/tools"