安卓面经_安卓面试题(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 湖北

相关推荐

点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
7
21
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务