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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android Targeting R+ requires the resources.arsc of installed APKs to be stored uncompressed and al -> 正文阅读

[移动开发]Android Targeting R+ requires the resources.arsc of installed APKs to be stored uncompressed and al

一、问题描述:

最近Apk适配了Android 11版本,在使用完乐固线上加固后,通过adb命令安装测试,安装失败,报出如下错误:

Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]

看下官方的说明如下:

Apps that target Android 11 (API level 30) or higher can’t be installed if they contain a compressed resources.arsc file or if this file is not aligned on a 4-byte boundary. This file cannot by memory-mapped by the system if either of these conditions is present. Resources tables that cannot be memory-mapped must be read into a buffer in RAM resulting in unnecessary memory pressure on the system and greatly increased device RAM usage.

翻译一下:

如果以 Android 11(API 级别 30)或更高版本为目标平台的应用包含压缩的 resources.arsc 文件或者如果此文件未按 4 字节边界对齐,应用将无法安装。如果存在其中任意一种情况,系统将无法对此文件进行内存映射。无法进行内存映射的资源表必须读入 RAM 中的缓冲区,从而给系统造成不必要的内存压力,并大大增加设备的 RAM 使用量。
?

二、解决方案

1.降级target版本到30以下

2.使用Windows上的软件加固,测试没问题

3.先使用Sdk\build-tools下的zipalign工具做对齐操作,再使用apksigner重签名

这里详细说一下第三种解决方案:

a.取出加固后的apk包(input.apk),使用Sdk\build-tools下的zipalign工具做对齐操作进行

先进入Sdk\build-tools\30.0.3目录下,如: cd C:\Sdk\build-tools\30.0.3

//对齐操作命令,4代表对齐为4个字节

?zipalign -p -f -v 4 input.apk output_unsigned.apk

//确认对齐结果命令,按需使用

?zipalign -c -v 4 output_unsigned.apk

//操作或验证成功后会看到 Verification succesful

b.使用apksigner对上面的apk进行重签名

//签名命令,需输入密码,无提示成功

//kotlinDemoKey.jks,output_unsigned.apk为待签名apk

//最后生成的签名apk会直接替换原来的这个apk

apksigner sign --ks kotlinDemoKey.jks output_unsigned.apk

/ /验证签名结果命令,,按需使用,操作结果如下

apk apksigner verify -v --print-certs output_unsigned.apk

?c.安装新生成的apk

adb install -r output_unsigned.apk

三、参考学习

解决过程中主要学习了一下 apksigner 和 zipalign的使用,链接如下

apksigner官方使用文档

zipalign官方使用文档

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:12:20  更:2021-08-07 12:13:31 
 
开发: 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年5日历 -2024/5/17 14:37:00-

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