IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> app不能备份数据,更改allowBackup为true,并重新打包apk -> 正文阅读

[移动开发]app不能备份数据,更改allowBackup为true,并重新打包apk

将apk中AndroidManifest.xml中的allowBackup属性改为true,重新打包并签名

有个手机单机游戏的安装包,想通关后保存游戏的本体和数据,就可以卸掉,来节省手机空间,若再想玩就不用从头开始,但手机没有备份应用数据的功能,于是尝试用adb备份。

文中用到的工具 android-studio 的 SDK 中大多都有,其他使用到的工具也有下载链接,或者直接打包下载(2022-02-25 暂未上传)。

备份测试

先将手机连接电脑后,打开USB调试。 (下载adb工具 for windows
查看adb连接的设备
adb devices
查看所有包名
adb shell pm list package
找到包名后备份应用数据
adb backup -f appbackup.ab -noapk 包名
备份下来的appbackup.ab为1KB的文件,显然没有成功。
尝试备份其他应用数据可以正常备份,说明是app的问题。

查看并修改 AndroidManifest

apk下 AndroidManifest.xml 中有个属性 allowBackup 是否允许 adb 备份。
AndroidManifest.xml 为二进制文件,不能直接查看修改内容。
用aapt工具可以查看。 (下载aapt工具
aapt dump xmltree AndroidManifest.xml > AndroidManifest.txt
但不知什么原因,我使用这条命令一直报错,便干脆寻找使用其他工具解决。
可以使用 AndroidManifest.xml 解码小工具md。 (去原网页下载:androidmanifest.xml 解码工具又来一发 md_v1.1.zip)
使用方法在命令行中输入 (会在命令行中输出解码后的 xml):
md.exe AndroidManifest.xml

可以看到allowBackup=“false”
allowBackup="false"

使用 AXMLEditor.jar 直接对二进制的 AndroidManifest.xml 进行修改,作者网页中有使用方法。

直接使用
java -jar AXMLEditor.jar -attr -r application allowBackup AndroidManifest.xml AndroidManifest_out.xml
删除属性失败,经过各种尝试后发现,只能修改最后一个属性。
删除 resizeableActivity
java -jar AXMLEditor.jar -attr -r application package resizeableActivity AndroidManifest.xml AndroidManifest_out.xml
修改 allowBackup
java -jar AXMLEditor.jar -attr -m application package allowBackup true AndroidManifest.xml AndroidManifest_out.xml
再把 resizeableActivity 插入就行了
java -jar AXMLEditor.jar -attr -i application package resizeableActivity true AndroidManifest.xml

allowBackup=“true” 成功修改。
allowBackup="true"

二次签名,并对齐优化

将 AndroidManifest.xml 直接替换是不能安装的,需要对修改后的 apk 文件进行二次签名。

首先使用 apktool 工具生成签名文件 my.keystore 。
下载apktool工具
keytool -genkey -alias alias.keystore -keyalg RSA -validity 30000 -keystore my.keystore

-alias alias.keystore 为签名文件的别名,后面会用到
-keyalg RSA 使用RSA算法对签名加密
-validity 30000 有效期限30000天
-keystore my.keystore 文件名

然后根据提示填写密码等即可。
查看签名文件:
keytool -list -v -keystore my.keystore -storepass password

删除apk中的 META-INF 目录,然后使用 apksigner.jar 工具,my.keystore 对 apk 签名
jarsigner -keystore my.keystore -storepass password -signedjar demo_signed.apk demo.apk alias.keystore

alias.keystore 为签名文件的别名,不是签名文件的名称,否则会出现找不到证书链的错误。

最后,用 zipalign 做对齐优化,不这么做也能用,影响不大。
zipalign -v 4 源文件名 生成的文件名

再次测试备份

更改后的app不能与原app同时安装,将原app使用 adb shell pm uninstall -k 包名 保留数据卸载后,也会安装失败,将原app完全卸载后才可安装。
备份数据
adb backup -f appbackup.ab -noapk 包名
恢复数据
adb restore appbackup.ab

参考资料

androidmanifest.xml 解码工具又来一发
AndroidManifest ARSC 二进制文件原始修改器
Android中对apk文件进行二次签名

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:41:20  更:2022-02-28 15:42:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:29:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码