什么是“ android:allowBackup”?


267

由于新的ADT预览版(版本21) ,他们有一个新的皮棉警告,告诉我在清单文件,接下来的事情(在应用程序标签):

应该将android:allowBackup显式设置为true或false(默认情况下为true,这可能会对应用程序的数据产生一些安全隐患)

他们在官方网站上写道:

进行了两项新检查:必须明确确定您的应用是否允许备份以及标签检查。有一个用于设置库路径的新命令行标志。编辑时对增量皮棉分析的许多改进。

这是什么警告?什么是备份功能,如何使用?

另外,为什么警告告诉我它具有安全隐患?禁用此功能有哪些不利和好处?


清单备份有两个概念:

  • “机器人:allowBackup ”允许备份和通过ADB恢复,如图所示在这里

是否允许应用程序参与备份和还原基础结构。如果将此属性设置为false,则即使通过全系统备份也不会执行应用程序的备份或还原,否则将导致所有应用程序数据通过adb保存。此属性的默认值为true。

这被认为是安全问题,因为人们可以通过ADB备份您的应用程序,然后将您应用程序的私有数据存储到他们的PC中。

但是,我认为这不是问题,因为大多数用户不知道什么是adb,如果这样做,他们也将知道如何对设备进行root操作。仅当设备启用了调试功能时,ADB功能才起作用,并且需要用户启用它。

因此,只有将其设备连接到PC并启用调试功能的用户才会受到影响。如果他们的PC上有使用ADB工具的恶意应用程序,则可能会出现问题,因为该应用程序可以读取私有存储数据。

我认为Google应该只在开发人员类别中添加默认情况下禁用的功能,以允许通过ADB备份和还原应用程序。

  • “ android:backupAgent ”允许使用云的备份和还原功能,如此此处所示:

实现应用程序的备份代理的类的名称,它是BackupAgent的子类。该属性值应该是完全限定的类名称(例如“ com.example.project.MyBackupAgent”)。但是,作为简写形式,如果名称的第一个字符是句点(例如,“。MyBackupAgent”),则会将其附加到元素中指定的包名称中。没有默认值。必须指定名称。

这不是安全问题。


我认为您应该在“编辑”中删除该其他信息,因为这是指备份云服务,而不是此问题实际引用的ADB备份工具(根据Tor Norbye的回答)
Tony Chan

@Turbo是的,您是正确的。我认为当我阅读它时并没有更新太多,但是现在很清楚了。我将更新问题。谢谢。我不知道adb备份功能是否可以在root用户的设备上使用,即使对于已将其设置为false的应用程序也是如此。
Android开发人员

2
@IgorGanapolsky,所以我现在完全感到困惑。他们为什么在两个完全不同的功能中提到它?同一标志可能同时负责这两个功能吗?还是这是一个错误?您认为我应该取消我勾选的答案吗?
Android开发人员

1
@androiddeveloper两个功能上都存在相同的完全相同属性的原因可能是因为它旨在实现相同的最终目的:备份数据。无论是在设备上还是在云中……
IgorGanapolsky 2013年

3
作为一名Android 用户,我想为发现此问题的任何人提供帮助,并说我不能忍受禁用备份的应用程序-还有很多。如果某人可以访问未锁定的手机,则他们应该能够从该手机中复制数据。那时任何“安全”措施都是没有意义的,因为他们总是可以扎根手机来获取数据。但是,作为用户,能够备份我的应用程序数据(无需生根和绊倒我的Knox位)是非常有价值的。如此多的应用程序不允许这样做实在令人沮丧,并且说实话,Android甚至完全具有此开关。
内森·舒特

Answers:


139

对于此棉绒警告,与所有其他棉绒警告一样,请注意,除了单行错误消息中的内容以外,您还可以获得更完整的解释;您无需在网络上搜索更多信息。

如果您是通过Eclipse使用棉绒,请打开棉绒警告视图,在其中可以选择棉绒错误并查看详细说明,或者在错误行上调用快速修复(Ctrl-1),其中一项建议是“解释此问题”,这还将弹出更详细的说明。如果您未使用Eclipse,则可以从lint(lint --html <filename>)生成HTML报告,该报告在警告旁边包含完整的说明,或者您可以要求lint解释特定问题。例如,与相关的问题allowBackup具有ID AllowBackup(显示在错误消息的末尾),因此更完整的解释是:

$ ./lint --show AllowBackup
AllowBackup
-----------
Summary: Ensure that allowBackup is explicitly set in the application's
manifest

Priority: 3 / 10
Severity: Warning
Category: Security

allowBackup属性确定是否可以备份和还原应用程序的数据,如此处所述

默认情况下,此标志设置为true。当此标志设置true为时,用户可以使用adb backup和备份和还原应用程序数据adb restore

这可能会对应用程序造成安全后果。adb backup允许启用USB调试的用户将应用程序数据复制到设备之外。备份后,用户可以读取所有应用程序数据。adb restore允许从用户指定的源创建应用程序数据。还原后,应用程序不应假定数据,文件权限和目录权限是由应用程序本身创建的。

设置allowBackup="false"使应用程序退出备份和还原。

要解决此警告,请确定您的应用程序是否应支持备份并明确设置 android:allowBackup=(true|false)

单击此处了解更多信息


35
用户通常甚至不知道什么是adb,如果他们知道的话,他们可能知道如何植根设备并自行获取数据,是吗?
android开发人员

1
@Tor当您说“从设备中复制应用程序数据”时,是指从data / data / com.myapp还是从sdcard复制?以前的目录受保护,除非设备已root,否则无法读取。
IgorGanapolsky

2
因此,为了澄清起见,Lint引用的备份是ADB工具,而不是云备份服务,对吗?似乎很多其他答案都令人困惑。
Tony Chan

1
@IgorGanapolsky我认为使用ADB将复制私人数据,这就是为什么会有警告的原因。我认为只有启用了调试功能并将其设备连接到PC的人才会受到影响。这样的人通常是高级用户或开发人员,因此他们应该知道自己在做什么。对于那些错误操作并在使用ADB工具进行这些操作的PC上安装了恶意应用的人来说,安全风险是存在的。有一个无需根目录即可备份和还原的应用程序,称为“ Helium”:play.google.com/store/apps/…–
android开发人员

“如果您正在通过Eclipse使用Lint,则应该这样做。”您可能应该迁移到AndroidStudio,因为不推荐使用ADT插件。
throws_exceptions_at_you

26

这就是这种意义上的备份的真正含义:

Android的备份服务允许您将持久性应用程序数据复制到远程“云”存储中,以便为应用程序数据和设置提供还原点。如果用户执行恢复出厂设置或转换为新的Android设备,则当重新安装该应用程序时,系统会自动还原您的备份数据。这样,您的用户无需重现以前的数据或应用程序设置。

〜来自http://developer.android.com/guide/topics/data/backup.html

您可以在此处以开发人员身份注册此备份服务:https : //developer.android.com/google/backup/signup.html

可以备份的数据类型是文件,数据库,sharedPreferences,缓存和lib。这些通常存储在设备的/data/data/[com.myapp]目录中,该目录已被读取保护,除非具有root特权,否则无法访问。

更新:您可以在BackupManager的api文档上看到此标志:BackupManager


4
我认为API级别23的变化表明这是正确的答案。以下是有关更改的培训文档:developer.android.com/training/backup/autosyncapi.html
南瓜p65 65

8

这没有明确提及,但是基于以下文档,我认为这意味着应用程序需要声明并实现BackupAgent才能使数据备份正常工作,即使allowBackup设置为true时(默认值)。

http://developer.android.com/reference/android/R.attr.html#allowBackup http://developer.android.com/reference/android/app/backup/BackupManager.html http://developer.android。 com / guide / topics / data / backup.html


如果应用程序没有与backupAgent相关的内容,该怎么办?Android是否会自动备份其数据?
android开发人员

1
在以下位置找到正确的答案:stackoverflow.com/a/13806946/878126。似乎与backupAgent无关。我也更新了我的问题,以显示所有内容。
Android开发人员

3

这是隐私问题。如果包含敏感数据的应用程序,建议禁止用户备份。有权访问备份文件(即,当时android:allowBackup="true"),即使在非root用户的设备上也可以修改/读取应用程序的内容。

解决方案- android:allowBackup="false"在清单文件中使用。

您可以阅读这篇文章以了解更多信息: 使用备份技术入侵Android应用程序


1
您在2017年认真对待这个答案吗?请在这里阅读developer.android.com/guide/topics/data/…–
batmaci

您可以通过将android:allowBackup设置为false来禁用备份。如果您的应用程序可以通过其他某种机制重新创建其状态,或者您的应用程序处理的是Android不应备份的敏感信息,则可能需要这样做。
Edgar Khimich

当前,您可以通过清单中的属性从备份中排除敏感数据。
Yousha Aleayoub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.