安卓面经_安卓面试题(27/30)APK打包流程和反编译

牛客高级系列专栏:

安卓(安卓系统开发也要掌握)

嵌入式

本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对常见安卓高频开发面试题的理解;

网上安卓资料千千万,笔者将继续维护专栏,一杯奶茶价格不止提供答案解析,承诺提供专栏内容免费技术答疑,直接咨询即可。助您提高安卓面试准备效率,为您面试保驾护航!

正文开始⬇

反编译在日常开发中经常会用到,了解APK打包流程,掌握APK反编译的工具,是必不可少的技能。我们看看面试官可能会问什么吧:

  1. 请讲述一下APK打包的流程? ⭐⭐⭐⭐
  2. 使用过哪些反编译的工具?⭐⭐⭐

看完以下的解析,一定可以让面试官眼前一亮。

目录

  • 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打包的流程:

alt

打包APK,主要就是打包代码和资源,上图可以概括为以下7个步骤:

  1. 打包资源文件;
  2. 处理AIDL文件;
  3. 编译Java文件,生成对应的.class文件;
  4. 把.class文件转化成Davik VM支持的.dex文件;
  5. 打包生成未签名的.apk文件;
  6. 将未签名.apk文件进行签名生成一个签名apk文件;
  7. 将签名后的.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高频面试题全解析 文章被收录于专栏

#提供免费售后答疑!!花一杯奶茶的钱获得安卓面试答疑服务,稳赚不赔# Android发展已经很多年,安卓资料网上千千万,本专栏免费提供专栏内容技术答疑!!私聊当天必回。在阅读过程或者其他安卓学习过程有疑问,都非常欢迎私聊交流。

全部评论
哇。我喜欢反编译这个
1 回复 分享
发布于 2023-03-05 13:03 湖南
谢谢大佬整理,马克了
点赞 回复 分享
发布于 2023-03-05 13:09 湖北

相关推荐

ALEX_BLX:虽然说聊天记录不可信,不过这个趋势确实如此但我觉得也要想到一点就是卷后端的人里真正有“料”的人又有多少,我说的这个料都不是说一定要到大佬那种级别,而是就一个正常的水平。即使是现在也有很多人是跟风转码的,2-3个月速成后端技术栈的人数不胜数,但今时不同往日没可能靠速成进大厂了。这种情况就跟考研一样,你能上考场就已经打败一半的人了
点赞 评论 收藏
分享
评论
7
20
分享

创作者周榜

更多
牛客网
牛客企业服务