文章目录

  • 一、资源混淆效果
  • 二、APK 构建流程简介
  • 三、资源 ID 组成
  • 四、参考资料

一、资源混淆效果


资源混淆 , 将资源名称与目录进行混淆 , 提高了反编译的难度 , 同时也减小了 APK 文件的大小 ;

下面的 APK 安装文件就是进行资源混淆 , 其中的 r 文件 , 就是混淆后的资源文件 ;

进入 r 文件内部 , 可以看到很多无意义无规则的目录 , 这是混淆后的资源文件 ;

二、APK 构建流程简介


APK 构建流程 官方文档参考 : https://developer.android.google.cn/studio/build

应用模块 ( Application Module ) 中包含 :

  • 源码文件 ( Source Code )
  • 资源文件 ( Resource Files )
  • AIDL 文件 ( AIDL Files )

等 , 还有各种引入的依赖库 ( Dependencies ) , 包括 :

  • Android 依赖库模块 ( Library Modules )
  • Android 依赖库包 ( AAR Libraries )
  • Java 依赖库 ( JAR Libraries ) ;

应用模块 和 依赖库 放在一起进行编译 , 先编译成 class 字节码文件 , 然后使用 dex 工具 , 编译成 DEX 文件 , 同时也会对 资源文件 ( Resources ) 进行编译 , 最后打包成 APK 文件 ;

资源文件在打包时会进行编译 , 将资源文件编译成二进制文件 , 直接打开资源文件都是二进制乱码 ;

三、资源 ID 组成


Android 应用编译时会生成 R 文件 , 在代码中 , 也使用 R 文件 , 引用相关的资源 ;

每个资源的值 , 存在子 app\build\intermediates\runtime_symbol_list\debug\R.txt 中 , 现在在 build 目录中不生成 R.java 了 ;

int anim abc_fade_in 0x7f010000
int anim abc_fade_out 0x7f010001
int anim abc_grow_fade_in_from_bottom 0x7f010002
int anim abc_popup_enter 0x7f010003
int anim abc_popup_exit 0x7f010004
int anim abc_shrink_fade_out_from_bottom 0x7f010005
int anim abc_slide_in_bottom 0x7f010006
int anim abc_slide_in_top 0x7f010007
int anim abc_slide_out_bottom 0x7f010008
int anim abc_slide_out_top 0x7f010009
int anim abc_tooltip_enter 0x7f01000a
int anim abc_tooltip_exit 0x7f01000b

每个资源都对应着 R 文件中的一个 ID , 以 0x7f010000\rm 0x7f0100000x7f010000 为例 , ID 的格式分为三部分 , 7f | 01 | 0000 ,

  • 7f\rm 7f7f 表示包 , 一般的程序的包都会被编译成 7f\rm 7f7f 开头 ;
  • 010101 对应资源类型 , 动画类型以 7f01 开头 ;
  • 最后 222 字节 , 按照序号从 000 开始排序即可 ;

四、参考资料


参考官方文档 :

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

参考之前的博客资源 :

  • 【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

  • 下载地址 :

【Android 安装包优化】资源混淆 ( 资源混淆效果 | APK 构建流程简介 | 资源 ID 组成 )相关推荐

  1. 【Android 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )

    文章目录 一.开启 ProGuard 混淆 二.混淆文件编写 三.混淆前后对比 四.build.gradle 完整配置文件 五.参考资料 一.开启 ProGuard 混淆 在 build.gradle ...

  2. 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )

    文章目录 一.开启资源压缩 二.启用严格模式的资源引用检查 三.自定义保留/移除资源配置 四.资源压缩效果 五.完整配置 1.keep.xml 配置 2.build.gradle 构建脚本 六.参考资 ...

  3. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )

    文章目录 一.resources.arsc 资源映射表文件格式 二.头文件 数据格式 三.全局字符串池 数据格式 四.包数据 数据格式 1.包头 数据格式 2.资源类型字符串池 数据格式 3.资源名称 ...

  4. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

    文章目录 一.resources.arsc 资源映射表 混淆 二.resources.arsc 资源映射表二进制格式分析 三.参考资料 资源混淆时 , 需要修改混淆 resources.arsc 资源 ...

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

    文章目录 一.AAPT2 资源编译工具 二.resources.arsc 资源映射表 工作机制 三.参考资料 一.AAPT2 资源编译工具 资源的编译 , 生成 R.java 文件 , 都是通过 AA ...

  6. 【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )

    文章目录 一.Android Studio 导入可执行 7zr 程序 二.从 Assets 资源文件拷贝 7zr 到内置存储空间 三.参考资料 一.Android Studio 导入可执行 7zr 程 ...

  7. 【Android 安装包优化】Android 中使用 SVG 图片 ( Android 5.0 以下的矢量图方案 | 矢量图生成为 PNG 图片 )

    文章目录 一.Android 5.0 以下的矢量图方案 二.矢量图生成为 PNG 图片 三.完整的 build.gradle 构建脚本 四.编译效果 五.参考资料 一.Android 5.0 以下的矢 ...

  8. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...

  9. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

最新文章

  1. 《HeadFirst设计模式》笔记
  2. windows10如何删除文件时提示?(回收站--右键属性--显示删除确认对话框)
  3. javscript对cookie的操作,以及封装
  4. CodeIgniter中运用composer安装依赖包
  5. HDU 1556 Color the ball (数状数组)
  6. 【招聘内推】阿里高德地图招聘应用算法专家(P7,含推荐算法方向)
  7. 网络蜘蛛采用三种策略来决定抓取网页的先后顺序
  8. React学习之旅Part7:React绑定事件和使用setState()修改state的数据、React实现双向数据绑定
  9. jq将php时间戳转化日期格式,JQuery将时间戳转换为时间
  10. GAMES101现代计算机图形学入门-闫令琪-随堂笔记-Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)
  11. 如何清理卸下应用的残余文件_怎么清理手机卸载残留 需要技巧
  12. 分段式多级离心泵_分段式多级离心泵的组装与调整
  13. Windows 系统优化 - 查看并清理临时文件,释放磁盘空间,提高系统运行效率
  14. HTML层级设置,HTML----元素层级
  15. 华为云--云平台部署管理架构图
  16. 记一次锐捷网络虚拟化(VSU)故障处理
  17. mysql+分表+1168,MySQL使用MERGE進行分表實現
  18. 一个简单的 jQuery 图片裁剪插件----cropper
  19. 异常处理:.net.UnknownHostException nodename nor servname provided, or not known
  20. Opensips搭建

热门文章

  1. 恢复SQL Server被误删除的数据
  2. myeclipse2014新感悟
  3. ibm服务器imm管理方式简介
  4. C# 操作redis
  5. 下拉框处理(select)
  6. git 版本操作命令大全
  7. C#枚举类型和结构体
  8. C++ 画星号图形——空心矩形(核心代码记录)
  9. 对天天开心消消乐(订餐系统)的建议
  10. flask数据库迁移理解及命令