我喜欢创建备份的想法,而不需要任何其他工具,也不需要根-所以"adb备份"似乎是完美的解决方案。
但由于一些奇怪的原因,它只为一些应用程序创建了几乎空的备份。
我使用的命令是:
adb backup -f ${APP}.ab -apk -share -nosystem ${APP}
我的应用程序中大约有50%受到了影响。我看不到任何规律。这既不是付费应用程序,也不取决于它们是来自playstore还是FDroid。这可能是什么原因?
我在我的ubuntu linux机器上使用了这个:Android调试桥版本1.0.39版本1:8.1.0 + r23 - 5ubuntu2安装为/usr/lib/android-sdk/平台工具/adb
测试不同参数-无变化。
我创建了一个脚本,为每个用户应用程序创建备份(所以跳过这些在priv-app和系统文件夹)。也许这对其他人有用。一个完整的备份不是很有用,因为没有命令来恢复备份的选择-全部或什么都没有。脚本有两个问题:
- 并非所有应用程序都有备份
- 每个应用程序都需要解锁(手机提示确认)
为了创建一个列表,我使用了以下命令:
adb shell pm list packages -f | grep -v priv-app | grep -v '/vendor' | grep -v '/system' | rev | cut -d = -f 1 | rev | sort
编辑:
我想我可以找到原因。在每个APK中都有一个AndroidManifest.xml文件,可以/必须(?)有一个设置:* * 安卓系统:允许备份**
是否允许应用程序参与备份和还原基础结构。如果将此属性设置为false,则永远不会执行应用程序的备份或还原,即使执行完整系统备份也是如此,否则将导致通过adb保存所有应用程序数据。此属性的默认值为true。
真扫兴!我认为有两种方法可以解决这个问题。要么在手机上修改(这可能是不可能的,或者需要root),要么在安装前修改。如果能成功的话,我想每次更新后都要重复。
有人有解决方案吗?没有root/google云的备份是可能的吗?
2条答案
按热度按时间sqxo8psd1#
您可以按照以下步骤操作:
1.复制应用程序的apk从设备到你的计算机
1.使用apktool(使用"d"选项)反编译apk
1.修改
AndroidManifest.xml
中的allowBackup
属性并将其设置为true1.再次使用
apktool
重新编译应用程序(这次使用"b"选项)1.安装重新编译的应用程序
1.使用您发布的
adb
命令执行备份q5iwbnjs2#
我花了很多时间在寻找一种方法来做到这一点,可以肯定地说:
在2023年的最新android版本(12和13)中,没有root用户就无法备份应用数据,甚至前面提到的apktool方法也不起作用,因为android现在使用的是签名apk。
即使您尝试使用自定义证书/密钥库绕过此问题,您也需要卸载原始应用程序,然后应用程序数据肯定会消失。