ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在使用需要 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 只是删除了警告,它不会更改任何其他内容。

G
Govind Parmar

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

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

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


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

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

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

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

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


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

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


B
BIRJA KUMAR

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


S
Smar

我刚刚在 C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml 中更改了 minSdkVersion="7",它起作用了。

脚步:

路径:C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml 值: 在新的 cmd 提示符下运行命令:C:\MyApp>phonegap build android --debug [ phonegap] 执行 'cordova build android --debug'... [phonegap] 完成 'cordova build android --debug'


这并没有回答问题,即在 build.gradle 中声明 minSdk 时如何使用 overrideLibrary
a
ali bagheri

在 manifest.xml 中使用此代码

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

M
Mohammad f

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


g
goto

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

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

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


虽然这可行,但它实际上并不能回答这个问题。 OP 询问如何使用 overrideLibrary。在某些特定情况下,您希望覆盖它而不是遵守(因为可以覆盖它)

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅