什么是“android:allowBackup”?
自从新的ADT预览版本(版本21)以来,它们有一个新的lint警告,告诉我清单文件(在应用程序标签中)的下一件事情:
应该明确地将android:allowBackup设置为true或false(默认情况下是true,并且可以对应用程序的数据有一些安全性影响)
在官方网站上 ,他们写道:
几个新的检查:你必须明确地决定你的应用程序是否允许备份和标签检查。 有一个新的命令行标志来设置库path。 在编辑时增加lint分析的许多改进。
这是什么警告? 什么是备份function,我如何使用它?
另外,为什么警告告诉我它有安全隐患? 禁用此function的缺点和优点是什么?
清单的备份有两个概念:
- “android: allowBackup ”允许通过adb进行备份和恢复,如下所示:
是否允许应用程序参与备份和还原基础架构。 如果此属性设置为false,那么即使执行全系统备份,也不会执行应用程序的备份或还原,否则会导致所有应用程序数据通过adb保存。 此属性的默认值为true。
这被认为是一个安全问题,因为人们可以通过ADB备份您的应用程序,然后将您的应用程序的私人数据存入PC。
不过,我认为这不是问题,因为大多数用户不知道adb是什么,如果他们这样做,他们也会知道如何根设备。 ADBfunction只有在设备启用了debuggingfunction的情况下才能工作,这需要用户启用它。
因此,只有将其设备连接到PC并启用debuggingfunction的用户才会受到影响。 如果他们在使用ADB工具的PC上有恶意应用程序,这可能会造成问题,因为应用程序可能读取私有存储数据。
我认为Google应该在开发者类别中添加一项默认禁用的function,以允许通过ADB备份和恢复应用程序。
- “android: backupAgent ”允许使用云的备份和还原function,如下所示:
实现应用程序的备份代理的类的名称,它是BackupAgent的一个子类。 属性值应该是完全限定的类名(例如“com.example.project.MyBackupAgent”)。 但是,如果名称的第一个字符是一个句点(例如,“.MyBackupAgent”),则会将其附加到元素中指定的包名称。 没有默认。 该名称必须指定。
这不是一个安全问题。
对于这个lint警告以及所有其他的lint警告,请注意,您可以得到比单行错误消息中的内容更全面的解释; 你不必在网上search更多的信息。
如果您通过Eclipse使用lint,请打开lint警告视图,您可以在其中selectlint错误并查看更长的解释,或者在错误行上调用quickfix(Ctrl-1),其中一个build议是“Explain这个问题“,这也将会出现一个更全面的解释。 如果您不使用Eclipse,则可以从lint(lint –html)生成HTML报告,其中包含警告旁边的完整说明,或者可以要求lint解释特定问题。 例如,与allowBackup相关的问题的ID为“AllowBackup”(显示在错误消息的末尾),所以更完整的解释是:
$ ./lint – 显示AllowBackup
AllowBackup
简介:确保在应用程序的清单中显式设置allowBackup
优先级:3/10严重性:警告类别:安全
allowBackup属性确定是否可以备份和还原应用程序的数据。 这里logging在案。
默认情况下,这个标志被设置为true。 当此标志设置为true时,应用程序数据可以由用户使用adb backup和adb restore进行备份和恢复。
这可能对应用程序有安全后果。 adb备份允许启用USBdebugging的用户将应用程序数据从设备中复制出来。 一旦备份,所有的应用程序数据可以被用户读取。 adb restore允许从用户指定的源创build应用程序数据。 还原之后,应用程序不应该认为数据,文件权限和目录权限是由应用程序本身创build的。
设置allowBackup="false"
备份和恢复中select一个应用程序。
要解决此警告,请确定您的应用程序是否应该支持备份,并明确设置android:allowBackup=(true|false)
“
点击这里获取更多信息
这就是这个意义上的备份真正的含义:
Android的备份服务允许您将持久性应用程序数据复制到远程“云”存储,以便为应用程序数据和设置提供还原点。 如果用户执行出厂重置或转换为新的Android设备,系统会在重新安装应用程序时自动恢复您的备份数据。 这样,您的用户就不需要重现以前的数据或应用程序设置。
〜取自http://developer.android.com/guide/topics/data/backup.html
您可以在此处以开发者身份注册此备份服务: https : //developer.android.com/google/backup/signup.html
可以备份的数据types是文件,数据库,sharedPreferences,caching和lib。 这些通常存储在设备的/data/data/[com.myapp]目录中,该目录是读保护的,除非拥有root权限,否则无法访问。
更新 :你可以看到这个标志列在BackupManager的api文档: BackupManager
这是没有明确提到,但基于以下文档,我认为这意味着应用程序需要声明和实现一个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 /引导/主题/数据/ backup.html
什么时候应该设置android:allowBackup = false
您不需要root用户将数据从android设备备份到PC,您只需要物理访问并在开发者菜单中启用debugging。 这使您可以从应用程序的内部存储中复制数据,这些数据可能包含您不想让别人盗取的敏感信息,如您的Facebook访问令牌。
我同意在大多数情况下这是相当微不足道的,但也有一些情况下需要额外的一层保护来抵御涉及物理访问的攻击。
请注意,为了解决这个问题,您需要对手机进行根目录,在这种情况下,出厂重置时内部存储器中的敏感数据将被清除。
build议禁止用户备份应用程序,如果它包含敏感数据。 有权访问备份文件,可以修改非根设备上的应用程序的内容。
解决方法 – 在清单文件中使用android:allowBackup="false"
。