【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

简介: 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

文章目录

一、AAPT2 资源编译工具

二、resources.arsc 资源映射表 工作机制

三、参考资料





一、AAPT2 资源编译工具


资源的编译 , 生成 R.java 文件 , 都是通过 AAPT 工具生成的 ;


AAPT2 工具官方文档 : https://developer.android.google.cn/studio/command-line/aapt2?hl=zh_cn



Java 文件是由 javac 工具编译成 .class 字节码文件 , 然后通过 dx 工具打包到 dex 文件中 ;


清单文件 AndroidManifest.xml , Drawable XML 图片资源 , 布局 XML 资源 , 都是由 AAPT2 工具将 XML 文本文件 编译成 二进制的资源文件 , 并打包到 APK 安装包 中 ;


image.png


AAPT2 工作原理 :


打包编译 :


assets 和 res/raw 目录下的文件虽然不需要编译 , 但是也会 被 AAPT2 工具 采集出来进行打包 ;


清单文件 , XML 资源文件 , 会被 AAPT2 工具编译成一个 " *.ap_ " 二进制文件 , 在 debug 模式下 , 在 " app\build\intermediates\processed_res\debug\out " 目录下生成 " resources-debug.ap_ " 文件 ;


res 目录下的其它文件 , 根据文件类型不同 , 进行不同的处理 , 如压缩 ;

image.png



该 " resources-debug.ap_ " 文件是一个压缩文件 , 可以使用 7-Zip 工具打开 ;


image.png



生成资源 ID 并赋值给资源 :


AAPT2 会对除 Assets 之外的其它资源 , 都生成一个对应的资源 ID , 该 ID 是一个 int 类型常量 , 占 4 44 字节 ;


这些生成的 ID 常量值 , 会存放在 resources.arsc 资源映射表 中 ,


参考 【Android 安装包优化】资源打包配置 ( resources.arsc 资源映射表 | 配置国际化资源 ) 一、resources.arsc 资源映射表 博客章节 ;






二、resources.arsc 资源映射表 工作机制


特别注意 AAPT2 工具编译生成的 resources.arsc 资源映射表 , Android 应用中查找资源 , 就是根据该 resources.arsc 资源映射表 查找资源 ;


resources.arsc 资源映射表 提供了 资源 ID 与 资源文件路径 之间的映射表 , 可以根据资源 ID 查询到对应的资源文件 ;

image.png




Android 应用中 , 调用 R.mipmap.ic_launcher 资源 , 假设 其对应的资源 ID 是 0x7f010000 , 对应的资源路径是 res/mipmap/ic_launcher.png ;


首先通过 ID R.mipmap.ic_launcher 到 resources.arsc 资源映射表 中查找对应的文件名称 , 然后找到对应的路径 ;

image.png




Android 通过 AssetManager 获取 assets 目录中的资源 , 具体是通过文件名来查找资源的 ;


Android 通过 Resources 获取 res 目录下的资源 , 通过资源 ID 查找资源 ; 传递一个 ID 给 Resources , Resources 根据该 ID , 从 resources.arsc 资源映射表 中获取具体的资源文件名称 , 路径 ;






三、参考资料


参考官方文档 :


缩减、混淆处理和优化应用 : https://developer.android.google.cn/studio/build/shrink-code

APK 构建流程 : https://developer.android.google.cn/studio/build

AAPT2 工具官方文档 : https://developer.android.google.cn/studio/command-line/aapt2?hl=zh_cn

参考之前的博客资源 :


【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )

【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )

【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat 命令执行目录 | 暴露更少信息 )

【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )


博客资源 :


GitHub 项目源码 : https://github.com/han1202012/SVG


下载地址 :


目录
相关文章
|
16天前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
53 3
|
16天前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
85 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
7月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1370 77
|
5月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
180 1
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
171 20
Android经典面试题之图片Bitmap怎么做优化
|
12月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
189 4
|
11月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
13天前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
176 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
23天前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
86 6
|
3月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
171 11

热门文章

最新文章