android:allowBackup = false后编译报错

探讨Android系统中allowBackup属性的安全风险,此属性允许通过adb工具备份和恢复应用数据,可能导致信息泄露和财产损失。文章详细解释了风险原理,并提供了解决方案,包括如何正确设置AndroidManifest.xml文件以禁用备份功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.Android中的allowBackup属性
1、allowBackup安全风险描述

Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是true。当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。
Android属性allowBackup安全风险源于adb backup容许任何一个能够打开USB 调试开关的人从Android手机中复制应用数据到外设,一旦应用数据被备份之后,所有应用数据都可被用户读取;adb restore容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的创建。因此,当一个应用数据被备份之后,用户即可在其他Android手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态。
尤其是通讯录应用,一旦应用程序支持备份和恢复功能,攻击者即可通过adb backup和adb restore进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可通过此来进行恶意支付、盗取存款等;因此为了安全起见,开发者务必将allowBackup标志值设置为false来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。

2、allowBackup安全影响范围

Android API Level 8以及以上系统

3、allowBackup安全风险详情
1) allowBackup风险位置:

AndroidMannifest.xml文件android:allowBackup属性

2) allowBackup风险触发前提条件:

未将AndroidMannifest.xml文件中的android:allowBackup属性值设为false

3) allowBackup风险原理:

当allowBackup标志值为true时,即可通过adb backup和adb restore来备份和恢复应用程序数

二.设置android:allowBackup = false后编译报错
解决方法:
1.在Mainfest文件头加:
xmlns:tools="http://schemas.android.com/tools"

如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.trusfort.new_demo">
2.在application头里添加:
tools:replace="android:allowBackup"

如下:

<application
        android:name=".MyApp"
        tools:replace="android:allowBackup"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
3.如果有多个属性冲突时,可在tools:replace属性中添加多个值,用","分割

如下:

<application
        android:name=".MyApp"
        tools:replace="android:allowBackup, android:icon"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hik.netsdk.SimpleDemo"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- <uses-permission--> <!-- android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"--> <!-- tools:ignore="ProtectedPermissions" />--> <!-- <uses-permission--> <!-- android:name="android.permission.READ_LOGS"--> <!-- tools:ignore="ProtectedPermissions" />--> <application > <activity android:name=".View.MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".View.VideoDecoder" /> <!-- 其他活动声明 --> <!-- <activity android:name=".View.BusinessUI.Fragment.FragTest2.FragTest2Activity" />--> <!-- <activity android:name=".View.DevMgtUI.AddDevActivity" />--> <!-- <activity android:name=".View.DevMgtUI.DevInfoActivity" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.Preview.FragPreviewBySurfaceView" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.Preview.FragPreviewByTextureView" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.PlayBack.FragPlayBackByTime" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.PlayBack.FragPlayBackByFile" />--> <!-- <activity android:name=".View.BusinessUI.Fragment.PlayBack.FragPlayBackTheSelectFile"></activity>--> </application> </manifest> 解决报错:`VideoDecoder` must extend android.app.Activity
最新发布
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值