程序员如何解决中年危机?资深 Android 开发带你入门 Framework,醍醐灌顶!
前言
春招已经接近尾声了,不知道各位小伙伴有没有找到自己心仪的工作呢。
笔者前几天内推刚刚收获了腾讯高级开发岗的 offer,得益于内推朋友面试时的面试经验,照着他给的方向复习刷题,顺利的通过了面试。在这里也无偿分享给广大网友们,喜欢也能帮助到你们。如果觉得文章不错,烦请点个关注转发,谢谢!
今天本文主要讲解:
APK 文件反编译
什么是反编译
如何防止反编译
APK 文件的基本构造
APK 加固的方案原理
APK 加固总体架构
APK 打包基本流程
Dex 文件的意义
AES 加密项目实战
APK 加固项目实战
APK 脱壳技术实战
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
一.APK 文件反编译
1.什么是反编译
定义:利用编译程序从源语言编写的源程序产生目标程序的过程
2.怎么进行反编译?
先了解 apk 的文件构造结构
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
二.加固方案思想
一个程序员的故事:
辛辛苦苦找到一个对象,结婚后发现是个母夜叉。不给管钱就闹,晚上睡觉她趴着睡,导致这程序员无法去洗脚了。然而这个程序员很努力,平时除了上班,还能够做点外包,赚点外快。所以他就想到了把工资卡上交,而把赚到的外快放到了自己的小金库。从此过上了性福生活
一个加密的故事:
通过将非核心的 dex 文件进行暴露来达到保护核心 dex 文件的目的。
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
三.基本原理
3.1Apk 打包流程
加壳是在原来 apk 的基础上加一层保护壳,dex 文件修改了就需要重新打包,否则 apk 安装不了。这就需要我们详细学习 apk 如何打包的
3.2Dex 文件是什么
加固的目的是保护 dex,直接而言就是对 dex 文件进行操作,对 dex 文件动刀子,必须知道 dex 文件是什么,能否直接动刀子
3.3Dex 文件加载流程
加壳后的文件是不能直接用的,dex 文件是加密的,所以我们需要对他进行解密,解密后的 dex 文件如何加载?
3.4APK 文件是怎么生产的
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
四.加固总体框架
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
那么问题来了:
如何达到加密效果?
为什么是两个系列的 dex?
壳 dex 怎么来的
壳 dex 如何保护源 dex?
如何签名?
如何运行新 dex(如何脱壳)?
4.1 加密过程
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
4.2APK 文件如何签名
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
4.3APK 文件如何运行(脱壳)
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
4.4 如何制定某些类在 main dex 中
multiDexKeepFile
:手动加入要放到 Main.dex 中的类
multiDexKeepProguard
:以 Proguard 的方式手动加入要放到的 Main.dex 中的类
最后说一下我的学习路线
其实很简单就下面这张图,含概了 Android 所有需要学的知识点,一共 8 大板块:
架构师筑基必备技能
Android 框架体系架构(高级 UI+FrameWork 源码)
360°Androidapp 全方位性能调优
设计思想解读开源框架
NDK 模块开发
移动架构师专题项目实战环节
移动架构师不可不学习微信小程序
混合开发的 flutter
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
Android 学习的资料
我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。需要的小伙伴可以私信我【进阶】我免费分享给大家,或者直接点击下面链接领取,谢谢大家这么久以来的支持。
如果你有其他需要的话,也可以在 GitHub 上查看,下面的资料也会陆续上传到 Github
330 页 PDF Android 学习核心笔记(内含上面 8 大板块)
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
Android 学习的系统对应视频
![](https://static001.geekbang.org/infoq/a7/a7968c4cc1b12588e2a92d7fa45a96f6.png)
总结
我希望通过我自己的学习方法来帮助大家去提升技术:
1、多看书、看源码和做项目,平时多种总结
2、不能停留在一些基本 api 的使用上,应该往更深层次的方向去研究,比如 activity、view 的内部运行机制,比如 Android 内存优化,比如 aidl,比如 JNI 等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理
3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习
4、android 的方向也很多,高级 UI,移动架构师,数据结构与算法和音视频 FFMpeg 解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!
希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!
评论