AndroidStuduio项目报错
今天AndroidStudio项目中引入一个AAR后一直报错:
Manifest merger failed : Attribute application@allowBackup value=(false) from AndroidManifest.xml:9:9-36
is also present at [com.XXXXXXX] AndroidManifest.xml:37:18-44 value=(true).`
Suggestion: add 'tools:replace="android:allowBackup"' to < application> element at AndroidManifest.xml:8:5-26:19 to override.
//[com.XXXXXXX]导入的AAR的包名
解决方法
根据报错提示解决方法:
在mainfest的更文件下添加:
xmlns:tools="http://schemas.android.com/tools";
并且在mainfest的Application下添加:
tools:replace="android:allowBackup"
【如果在Application中已经有replace的话就在replace中加上“,android:allowBackup”即可,例如
tools:replace="android:icon, android:theme,android:allowBackup"
】
然后再rebuild一切就OK了。
为什么会出现这个错误
如果你只是想简单的解决问题不想所以然的话,那就OK啦,如果是想进一步搞清楚问题的根源的话,还可以继续。
直接看报错就可以知道是由于到导入的AAR
中的mainfest中的allowBackup 的value=(false)
,但是在主Project
【即我们自己的Project】中的mainfest的allowBackup
的value
不为false
二者不一致导致的,建议在主Project中添加tools:replace=”android:allowBackup”用于override
父工程【导入的AAR】中mainfest
中的allowBackup
属性即可;
大多数小伙伴的情况可能是并没有在Application中设置android:allowBackup这个属性,所以可能会有疑问是我都没有设置android:allowBackup为什么还会有冲突呢,那就进入下个标题吧。
allowBackup是什么鬼
在Android API Level 8及其以上版本
中Android系统提供了为应用程序数据的备份和恢复
功能,此功能的开关
决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值
,其属性值默认属为True
。
看到这里我想很多小伙伴就明白了,为什么即使没有在AndroidManifest.xml中设置allowBackup[Android默认apk的allowBackup为ture],但出现冲突是因为我们导入的第三方代码时,第三方开发人员为了提高安全性将allowBackup设置为false引起的上述报错;
当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险
这个命令的参数如下:
adb backup [-f < file>] [-apk|-noapk] [-shared|-noshared] [-all] [-system|nosystem] [< packages…>]
你可以使用的最基本的命令是很简单的
adb backup -all
它将使用默认方式备份应用和设备的数据(不包含apk)到当前目录下并保存为文件backup.ab
这个命令有可能不对每个设置都有效,如果你出现像这种 “adb: cannot open file ./backup.ab”的错误,使用 adb backup -all -f C:\backup.ab来代替,其中路径C:\可根据喜好替换
对各个参数的解释:
-f < file>
用这个来选择备份文件存储在哪里,例如-f /backup/mybackup.ab将会使文件存储在根磁盘(Windows的C盘等等)下一个名为backup的文件夹里,并且备份文件名为mybackup.ab
-apk|-noapk
这个决定是否在备份里包含apk或者仅仅只备份应用数据,个人推荐使用-apk以免有的应用在应用市场找不到,如果不使用则默认的是-noapk
-shared|-noshared
这个参数用于决定是否备份设备共享的SD card内容,默认是-noshare,主要包括内部存储中的音乐、图片和视频,因此为保险起见,建议加上-share
-all
这个参数是一种简单地表达“所有应用”的说法,package参数可以选择备份单独的应用,如果你不是备份某个应用,使用-all备份整个系统
-system|-nosystem
这个参数决定-all标签是否包含系统应用,默认的是-system,根据情况可选择是否用-nosystem
< packages…>
如果你知道应用安装包的名称(例如com.google.android.apps.plus),就可以使用该参数备份特定应用。
3.当决定如何执行备份后,输入你喜欢的命令,在华为G700上测试,使用命令
adb backup -apk -all
会弹出如下窗口:
如果需要加密数据,输入密码即可,然后点击备份
备份时间大约2min,在电脑C:\Users\acer下产生backup.ab文件,大小有650M
4.如果要恢复数据,将设备连接电脑,打开命令行,输入:
adb restore < your backup file dir>