安卓面经_安卓面试题(27/30)APK打包流程和反编译
牛客高级系列专栏:
安卓(安卓系统开发也要掌握)
- 想通关安卓面试,请看(承诺免费售后答疑):《150道安卓高频面试题目录及答案链接》
- 想通关安卓系统面试,请看:《140道安卓系统Framework面试题目录及答案链接》
- 想进阶安卓开发,请看(承诺免费售后答疑):《Android进阶知识体系解析_15大安卓进阶必备知识点》
- 想了解安卓APP完整开发流程,请看(承诺免费售后答疑):《安卓APP完整开发流程》
- 想掌握安卓App性能优化,请看(承诺免费售后答疑):《安卓性能优化讲解和实战专栏》
- 想掌握Gradle语法和配置,制作Gradle插件,请看(承诺免费售后答疑):《安卓Gradle语法解析和实践大全》
嵌入式
- 想通关嵌入式面试,请看: 《111道嵌入式面试题目录及答案链接》
- 想多掌握几个嵌入式项目,请看:《6个嵌入式项目交流分享(附源码)》
本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对常见安卓高频开发面试题的理解;
网上安卓资料千千万,笔者将继续维护专栏,一杯奶茶价格不止提供答案解析,承诺提供专栏内容免费技术答疑,直接咨询即可。助您提高安卓面试准备效率,为您面试保驾护航!
正文开始⬇
反编译在日常开发中经常会用到,了解APK打包流程,掌握APK反编译的工具,是必不可少的技能。我们看看面试官可能会问什么吧:
- 请讲述一下APK打包的流程? ⭐⭐⭐⭐
- 使用过哪些反编译的工具?⭐⭐⭐
看完以下的解析,一定可以让面试官眼前一亮。
目录
- 1、APK打包
- 1.1 整体流程
- STEP1:打包资源文件
- STEP2:处理AIDL文件
- STEP3:.java文件转换为.class文件
- STEP4:.class文件转换为classes.dex文件
- STEP5:打包生成APK文件
- STEP6: 对APK文件进行签名
- STEP7:对签名后的APK文件进行对齐处理
- 2、反编译
- 2.1 反编译的概念
- 2.2 反编译的三大工具
- 2.3 其他反编译工具
- 2.4 在线反编译网址
1、APK打包
1.1 整体流程
安卓官网给出了apk打包的基本流程图,全面的介绍了APK打包的流程:
打包APK,主要就是打包代码和资源,上图可以概括为以下7个步骤:
- 打包资源文件;
- 处理AIDL文件;
- 编译Java文件,生成对应的.class文件;
- 把.class文件转化成Davik VM支持的.dex文件;
- 打包生成未签名的.apk文件;
- 将未签名.apk文件进行签名生成一个签名apk文件;
- 将签名后的.apk文件进行对齐处理;
STEP1:打包资源文件
APK的资源主要包括:
- res目录下的文件
- assets目录下的文件
- AndroidManifest.xml文件
打包资源文件的工具是aapt(The Android Asset Packaing Tool),目录 sdk\build-tools\25.0.0\aapt,APK在编译过程中,aapt工具会对资源文件进行编译,编译的步骤可以拆分为两个步骤:
- 将资源文件编译为二进制格式:把所有的Android资源文件进行解析,生成扩展名为.flat的二进制文件。比如是png图片,那么就会被压缩处理,采用.png.flat的扩展名。可以在app\build\intermediates\res\merged\debug文件下查看生成的中间产物
- 链接:合并所有已编译的文件并将它们打包到一个软件包中 首先,这一步会生成辅助文件,生成一个resource.arsc文件和R.java文件,resource.arsc文件是资源索引表,记录资源文件和资源ID之间的映射关系,R.java文件则定义了各个资源的常量值
最后,会将R.java文件,ressources.arsc文件和之前的二进制文件进行打包,打包到一个软件包中,各个资源文件的打包具体为:
- AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java
- res目录下的资源:该类资源在APP打包前大多会被编译,变成二进制xml文件,并会为每个该类文件赋予一个resource id,对于该类资源的访问,应用层代码则是通过resource id进行访问的
- assets和res/raw资源:不会被编译,将原封不动的打包进APK
STEP2:处理AIDL文件
处理AIDL文件的工具是aidl(Android Interface Definition Language),即Android接口描述语言,目录 sdk\build-tools\25.0.0\aidl。aidl工具就是将aidl.java文件解析为java文件。如果APK中没该使用到AIDL文件,则可以跳过这一步。
STEP3:.java文件转换为.class文件
编译项目源代码阶段,目前APK开发可以使用Java或者Kotlin,编译Java源代码使用工具是Ja
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
#提供免费售后答疑!!花一杯奶茶的钱获得安卓面试答疑服务,稳赚不赔# Android发展已经很多年,安卓资料网上千千万,本专栏免费提供专栏内容技术答疑!!私聊当天必回。在阅读过程或者其他安卓学习过程有疑问,都非常欢迎私聊交流。