转载:http://bcoder.com/java/use-tools-replace-in-android
当我们的项目的某些属性和第三方库中的属性有冲突时或者我们想修改第三方库中某些资源的属性时,我们就需要使用tools:replace来处理。
比如第三方库中也定义了application@icon, application@label属性,则会与你的项目发生冲突,编译时报如下错误:
Error:(26, 9) Attribute application@icon value=(@drawable/logo) from AndroidManifest.xml:26:9
Error:(28, 9) Attribute application@theme value=(@style/ThemeActionBar) from AndroidManifest.xml:28:9
is also present at XXXX-trunk:XXXXLib:unspecified:15:9 value=(@style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:24:5 to override
Error:Execution failed for task ':XXXX:processDebugManifest'.
> Manifest merger failed with multiple errors, see logs
'tools:replace="android:theme"
'tools:replace="android:label"
'tools:replace="android:icon"
那么解决办法就是在你的Application节点中加入tools:replace来表示替换三方库中的相关属性,如下:
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@drawable/box_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme"
tools:replace="android:icon, android:label">
比如在使用二维码识别的支持库zxing-android-embedded时,需要自定义拍照Activity的屏幕方向,则在AndroidManifest.xml中加入相关的activity节点,并覆盖其属性,xml如下:
<!--二维码扫描界面 for zxing-android-embedded-->
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="portrait"
tools:replace="screenOrientation" />
注意:
使用tools:replace需要在manifest根节点加上相关的引用,如下xmlns:tools那一行:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.bcoder.app">