【问题标题】:How do I use tools:overrideLibrary in a build.gradle file?如何在 build.gradle 文件中使用 tools:overrideLibrary?
【发布时间】:2015-01-21 14:08:21
【问题描述】:

我正在使用需要 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。

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

【问题讨论】:

  • 不要这样做。而是在 build.gradle 中更新 minsdkversion
  • 这样做是有正当理由的,例如在使用之前通过测试 API 级别来有条件地使用库。
  • 对于那些不知道 overrideLibrary 做什么的人,“当较低优先级的清单具有更高的 minSdkVersion 值时,除非您应用 overrideLibrary 合并规则,否则会发生错误。” source。有效,此 overrideLibrary 只是删除警告,它不会更改任何其他内容。

标签: android gradle android-tv


【解决方案1】:

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

添加 <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> 不要忘记在<application> 标签之前也包含xmlns:tools="http://schemas.android.com/tools"

【讨论】:

  • 就我而言tools:overrideLibrary="info.hoang8f.fbutton"
  • 注意包含<uses-sdk tools:ignore="GradleOverrides"> 的库。这些将导致您的 tools:overrideLibrary 属性被忽略。见stackoverflow.com/questions/31062893/…
  • 添加工具后我的问题仍然存在:overrideLibray="ca.barrenechea.widget.recyclerview.decoration"。它正在工作,但在创建新活动后今天突然停止工作。
  • 你拯救了我的一天(y)
  • 如果我想要的不仅仅是 overridelibrary 怎么办
【解决方案2】:

在 build.gradle 中声明 minSdk 并不重要。您必须将overrideLibrary 复制到您的AndroidManifest.xml 中,如here 所记录的那样。

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

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

希望这能解决你的问题。

【讨论】:

  • 你必须在uses-sdk中指定任何版本吗?在 AndroidManifest 中指定将被忽略的版本似乎令人困惑
  • 你是对的。没必要,反正如果你在AndroidManifest gradle中设置它会在编译时忽略它。
  • +1 用于在示例中显示两个库。您不能使用两个单独的 uses-sdk 标签。所以如果你想覆盖两个或更多,你可以在中间放逗号。谢谢!!
  • 但这对我使用逗号分隔的两个库不起作用,我的库有问题吗?
【解决方案3】:
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

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

【讨论】:

    【解决方案4】:

    只更改了 android:minSdkVersion="16" 并且工作完美 C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml

    【讨论】:

      【解决方案5】:

      我刚刚将minSdkVersion="7" 更改为C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml 并且它起作用了。

      步骤:

      1. 路径:C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
      2. 值:&lt;uses-sdk android:minSdkVersion="7"/&gt;
      3. 在新的 cmd 提示符下运行命令:

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

      【讨论】:

      • 这并没有回答问题,即在build.gradle中声明minSdk时如何使用overrideLibrary
      【解决方案6】:

      在 manifest.xml 中使用此代码

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

      【讨论】:

        【解决方案7】:

        作为所有库的解决方案,我们可以匹配它们的 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】:

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

          如果您使用的是 Android Studio:

          &lt;uses-sdk tools:overrideLibrary="android.support.v17.leanback"/&gt; 添加到您的清单中,不要忘记也包括xmlns:tools="http://schemas.android.com/tools"

          【讨论】:

            【解决方案9】:

            由于库需要minSdkVersion 17,因此您可以在build.gradle(Module:Application) 文件中进行更改:

            defaultConfig {
                    minSdkVersion 17 
                    targetSdkVersion 25
            }
            

            之后,构建项目不应引发任何构建错误。

            【讨论】:

            • 虽然这可行,但它实际上并不能回答问题。 OP 询问如何使用 overrideLibrary。在某些特定情况下,您希望覆盖它而不是遵守(因为可以覆盖它)
            猜你喜欢
            • 2021-02-17
            • 2019-03-27
            • 1970-01-01
            • 2019-08-17
            • 2019-05-29
            • 2016-01-19
            • 1970-01-01
            • 1970-01-01
            • 2021-04-22
            相关资源
            最近更新 更多