将 'tools:replace="Android:value"' 添加到 AndroidManifest 中的 <meta-data> 元素
Posted
技术标签:
【中文标题】将 \'tools:replace="Android:value"\' 添加到 AndroidManifest 中的 <meta-data> 元素【英文标题】:add 'tools:replace="Android:value"' to <meta-data> element at AndroidManifest将 'tools:replace="Android:value"' 添加到 AndroidManifest 中的 <meta-data> 元素 【发布时间】:2017-08-25 16:31:49 【问题描述】:我正在关注 HeadFirst android 开发中的教程,添加后遇到问题: 私人 ActionBarDrawerToggle 抽屉切换;
该控件已弃用,因此我按照 Stack 上的说明通过将 com.android.support:appcompat-v7:26.0.0-alpha1 添加到应用模块依赖项来解决该问题
但现在我收到以下构建错误:
错误:任务 ':app:processDebugManifest' 执行失败。
清单合并失败:属性 meta-data#android.support.VERSION@value value=(25.3.1) 来自 [com.android.support:recyclerview-v7:25.3.1] AndroidManifest.xml:24:9- 31 也存在于 [com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml:27:9-38 value=(26.0.0-alpha1)。 建议:将 'tools:replace="android:value"' 添加到 AndroidManifest.xml:22:5-24:34 的元素以覆盖。
代码如下:
【问题讨论】:
我在我的清单中添加了以下内容:xmlns:tools="schemas.android.com/tools">问题是所有具有相同版本和主版本的支持库必须匹配编译SDK版本。
所以尝试强制使用特定的支持库版本。
把它放在你的应用模块的末尾build.gradle
。
configurations.all
resolutionStrategy.eachDependency DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support')
if (!requested.name.startsWith("multidex"))
details.useVersion '25.3.0'
【讨论】:
这对我有用。不知道为什么它不被接受为有效答案。 主版本和同版本是什么意思? +1 工作解决方案。 @sagar giri 我得到 can't resolve symbol 'DependencyResolveDetails' 错误。你能告诉我解决办法吗 @D.hodges 这是可行的解决方案。请接受它作为答案。 谢谢,这行得通。应该被接受为有效答案【参考方案2】:如果您还没有,请先将此行添加到您的清单标记中:
xmlns:tools="http://schemas.android.com/tools"
例子:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.winanainc"
android:versionCode="3"
android:versionName="1.2"
xmlns:tools="http://schemas.android.com/tools">
然后在您的应用程序中添加此元标记以覆盖您的构建工具版本,在这种情况下,例如我选择了版本 25.3.1
<application>
...
..
<meta-data
tools:replace="android:value"
android:name="android.support.VERSION"
android:value="25.3.1" />
</application>
【讨论】:
正是需要的【参考方案3】: <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
>
<meta-data
tools:replace="android:value"
android:name="android.support.VERSION"
android:value="26.0.0" />
</application>
【讨论】:
【参考方案4】:将所有支持库版本更改为 25.3.1 并像魅力一样工作:
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
您还需要将以下参数更改为25:
compileSdkVersion 25
targetSdkVersion 25
【讨论】:
【参考方案5】: Add <meta-data> tag in manifest.xml file as below...
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.demo"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
**<meta-data
tools:replace="android:value"
android:name="android.support.VERSION"
android:value="25.3.1" />//this 25.3.1 version should be same which we defined in the build.gradle file. i am using compileSdkVersion 25**
</application>
</manifest>
它会工作@Ambilpura....
【讨论】:
【参考方案6】:打开Android Studio -> 打开清单文件
添加<uses-sdk tools:overrideLibrary="android.support.v17.leanback"/>
。不要忘记在<application>
标签之前也包含xmlns:tools="http://schemas.android.com/tools"
替换
compile 'com.android.support:recyclerview-v7:+'
通过
compile 'com.android.support:recyclerview-v7:25.3.1'
并添加
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
【讨论】:
【参考方案7】:我已经尝试了所有解决方案,但没有任何效果。阅读谷歌文档后,我找到了解决清单合并问题的解决方案。
只需在清单文件中添加这个简单的行:
<application
...
tools:node="replace"
...
</application>
这解决了我的问题。
如果这不起作用,请尝试这些,
tools:node="merge-only-attributes"
tools:node="removeAll"
tools:node="replace"
您可以从此链接找到谷歌文档。 Merge multiple manifest files
【讨论】:
【参考方案8】:-
在 Android Studio -> 打开清单文件
切换到合并清单并检查其他清单文件。
就我而言,我使用的是 26.1.0 支持文件,但发现 support-v13 是 26.0.1
所以我在 Gradle 文件中添加了 implementation 'com.android.support:support-v13:26.1.0'
并解决了问题
【讨论】:
【参考方案9】:@sagar giri 的回答是临时解决办法。最后解释了我为解决这个问题所做的工作。
如果您在最新的 android studio 中安装了最新的支持库,并且如果您在 build gradle 的 app 模块中有旧的支持库版本,那么 android studio 由于版本不匹配而失败。
因此,请将您的支持库版本更新为最新版本,并修复最新的支持库更改(例如图标重命名等)并重建它。
希望对你有帮助……
【讨论】:
【参考方案10】:这段代码解决了我的问题
“问题是所有版本和主版本相同的支持库必须匹配编译SDK版本。
所以尝试强制一个特定的支持库版本。将它放在 build.gradle 中应用模块的末尾。”
谢谢
【讨论】:
【参考方案11】:当您遇到此问题时,最好的方法是运行 Rebuild Project
- 这会告诉您发生这种情况的确切原因。
在我的情况下,meta-data
出现在 module
和 app
中
【讨论】:
【参考方案12】:将 'tools:replace="android:value"' 添加到 AndroidManifest.xml:22:5-24:34 的元素以覆盖。 添加到行 AndroidManifest.xml:22
【讨论】:
以上是关于将 'tools:replace="Android:value"' 添加到 AndroidManifest 中的 <meta-data> 元素的主要内容,如果未能解决你的问题,请参考以下文章
Android AAR的tools:replace冲突解决方案(转载)
Android X:tools:replace 在 line: for 属性中指定,但没有指定新值
错误记录Android Studio 集成 ARoute 编译报错 ( 兼容 support 库和 androidx 库 | add ‘tools:replace=“android:appCo )