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

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

文章目录

一、资源混淆效果

二、APK 构建流程简介

三、资源 ID 组成

四、参考资料





一、资源混淆效果


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



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


image.png



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


image.png






二、APK 构建流程简介


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



image.png


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


源码文件 ( Source Code )

资源文件 ( Resource Files )

AIDL 文件 ( AIDL Files )

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


Android 依赖库模块 ( Library Modules )

Android 依赖库包 ( AAR Libraries )

Java 依赖库 ( JAR Libraries ) ;


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



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


image.png






三、资源 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 , 以 0 x 7 f 010000 \rm 0x7f0100000x7f010000 为例 , ID 的格式分为三部分 , 7f | 01 | 0000 ,


7 f \rm 7f7f 表示包 , 一般的程序的包都会被编译成 7 f \rm 7f7f 开头 ;

01 0101 对应资源类型 , 动画类型以 7f01 开头 ;

最后 2 22 字节 , 按照序号从 0 00 开始排序即可 ;





四、参考资料


参考官方文档 :


缩减、混淆处理和优化应用 : 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


下载地址 :


目录
相关文章
|
8月前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
277 3
|
8月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
840 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
存储 Java Android开发
探索安卓应用开发:构建你的第一个"Hello World"应用
【9月更文挑战第24天】在本文中,我们将踏上一段激动人心的旅程,深入安卓应用开发的奥秘。通过一个简单而经典的“Hello World”项目,我们将解锁安卓应用开发的基础概念和步骤。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供一次实操体验。从搭建开发环境到运行你的应用,每一步都清晰易懂,确保你能顺利地迈出安卓开发的第一步。让我们开始吧,探索如何将一行简单的代码转变为一个功能齐全的安卓应用!
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
282 10
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
294 32
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
1138 5
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
312 2
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
304 4

热门文章

最新文章