第四章 常见的 Android 文件格式(四)(resources.arsc)

Android的resources.arsc文件是APK中管理资源的重要组成部分,它包含了资源的类型、名称、ID等信息。ARSC文件由ResTableHeader、ResStringPool和ResTablePackage三部分组成,其中ResTablePackage详细描述了资源包的内容。本文探讨了ARSC的结构,如ResTable_package的各个字段,并解释了如何修改ARSC文件以实现反编译防护和资源汉化。
摘要由CSDN通过智能技术生成

resources.arsc

  • Android 软件开发过程中有个重要的目录,即 app 工程下的 java/res 目录。这里存放了软件使用的各种类型的资源文件。这些资源文件在编译成 APK 时会被统一打包存放在 APK 的 res 目录。其中,jpg、png 图片文件按照原样存放,layout、drawbale、color 目录的 xml 配置文件会以 AXML 格式存放,所有的文件在打包时会以原来的文件名保存。连接程序代码和资源的桥梁是 R.java,该文件由编译器自动生成,里面保存的是不同类型的资源的 ID 值。这些 ID 值要以一种方式定位自己属于哪个资源,而这正是 res/values/public.xml 要解决的问题。第二章中就是通过 res/values/public.xml 文件定位字符串“unsuccessed”所对应的 ID 值的
  • 一个资源包含资源的名称、类型、值及所在的 Package。resources.arsc 包含不同语言环境中 res 目录下所有资源的类型、名称与 ID 对应的信息

ARSC 文件格式

  • resources.arsc 文件的格式称“ARSC 文件格式”,在 APK 中只有 resources.arsc 文件用这种格式
  • ARSC 使用的数据结构同样位于 ResourceTypes.h 文件中。和 AXML 一样,它表示数据块使用 chunk。ARSC 中也引用了不同的 AXML 中的数据结构。一个 ARSC 从整体结构上看,由文件头 ResTableHeader、资源项值字符串池 ResStringPool、Package 数据内容块 ResTablePackage 三部分线性地组成
  • 分析 ARSC 文件格式,同样用 010 Editor。使用模板库中的 AndroidResource.bt 模板。该模板同时支持 AXML 和 ARSC 文件的解析
  • 下面是一幅 ARSC 文件格式简图:
    在这里插入图片描述
  • ARSC 的内部细节比 AXML 复杂很多,主要体现在 Package 数据内容块部分,现在从头看起
  • 首先是文件头 ResTableHeader,它使用 ResTable_header 结构体表示,定义:
struct ResTable_header {
	struct ResChunk_header header;
	uint32_t packageCount;
};
  • header 字段:类型是 ResChunk_header,这在 AXML 时学过。header 的 type 字段指向的类型为 RES_TABLE_TYPE,表示这是一个 ARSC 文件

  • packageCount 字段:指明该 ARSC 中包含多少个 Package 的资源信息,它对应 ARSC 文件中 Package 数据内容块 ResTablePackage 的个数,目前它的取值通常为 1

  • 接着是资源值字符串池 ResStringPool,其中存放 APK 中所有资源项值的字符串内容。它的数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值