Android插件化进阶宝典,Android高级插件化强化实战!(附源码)

img

最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接。随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内满足需求和项目的增长,同时又能快速响应问题和迭代新需求,这就是一个矛盾点。此时,插件化技术正好风生水起,去了解各个主流框架实现思路,看看能对目前工作是否有帮助,是很有必要的。

插件化介绍

百度百科里是这么定义插件的:「 是一种遵循一定规范的应用程序接口编写出来的程序,只能运行在程序规定的系统平台下,而不能脱离指定的平台单独运行。」,也就是说,插件可以提供一种动态扩展能力,使得应用程序在运行时加载原本不属于该应用的功能,并且做到动态更新和替换。

那么在 Android 中,何为「 插件化 」,顾名思义,就是把一些核心复杂依赖度高的业务模块封装成独立的插件,然后根据不同业务需求进行不同组合,动态进行替换,可对插件进行管理、更新,后期对插件也可进行版本管理等操作。在插件化中有两个概念需要讲解下:

  • 宿主

所谓宿主,就是需要能提供运行环境,给资源调用提供上下文环境,一般也就是我们主 APK ,要运行的应用,它作为应用的主工程所在,实现了一套插件的加载和管理的框架,插件都是依托于宿主的APK而存在的。

  • 插件

插件可以想象成每个独立的功能模块封装为一个小的 APK ,可以通过在线配置和更新实现插件 APK 在宿主 APK 中的上线和下线,以及动态更新等功能。

那么为何要使用插件化技术,它有何优势,能给我们带来什么样好处,这里简单列举了以下几点:

  • 让用户不用重新安装 APK 就能升级应用功能,减少发版本频率,增加用户体验。
  • 提供一种快速修复线上 BUG 和更新的能力。
  • 按需加载不同的模块,实现灵活的功能配置,减少服务器对旧版本接口兼容压力。
  • 模块化、解耦合、并行开发、 65535 问题。

深入理解Android插件化技术

现在普通人一听“宿主”第一想到的就是欧美电影里的恐怖画面,甚至感觉瘆得慌。但是在移动开发领域,我们经常会提及的“宿主”却有完全不一样的意义,那就是支持插件的app主体。

从2012年插件化概念被提出,到2016年的时候,插件化技术百家争鸣,被一线大厂广泛使用,可以说成为了Android高级工程师所必须具备的技能之一,几乎引领了Android技术的进步!

近些年,一线互联网大厂几乎对移动互联网形成了垄断,app的功能越来越多,比如下面这些app(美团、支付宝等):

img

每个app都集成了许多功能入口,美团上有“美食”、“电影”、“外卖”、“打车”等,其实每个入口都是一个app,只不过被集成到这些入口里了。如果没有插件化技术,美团、淘宝这些app会有多大?几个G都有可能!

这些大型app是如何把第三方app作为插件集成到自己的app里的?

随便一个app就能随意调用其他app吗?

当然不能!

插件化技术最初源于免安装运行apk的想法,这个免安装的apk可以理解为插件,而支持插件的app 我们一般叫宿主。支持插件化的app可以在运行时加载和运行插件,这样便可以将app中一些功能独立的模块写成独立的插件,一方面减小了安装包的大小,另一方面可以实现app功能的动态扩展。想要实现插件化,主要是解决下面三个问题:

1、插件中代码的加载和与主工程的互相调用
2、插件中资源的加载和与主工程的互相访问
3、四大组件生命周期的管理

插件化技术涉及得非常广泛,其中最核心的就是Android的类加载机制和反射机制。

img

高级Android插件化强化实战(附源码)

虽然现在很多公司开源了插件化框架,但还有非常多的开发者对插件化一知半解。所以我特地给大家整理了167页的高级Android插件化强化实战(附源码),一共分为四个部分:

  • 第一章 插件化技术的前世今生
  • 第二章 插件化原理
  • 第三章 Android插件化初探
  • 第四章 架构演化(大厂篇)

从基础的插件化原理到Android插件化初探再到大厂架构演化实战应用,总结出了较为全面与完整的安卓插件技术与插件化对 Android开发的重要性。

一、插件化技术的前世今生

1.1 插件化提要
1.2 插件化发展历史

img

二、插件化原理

2.1 类加载
2.2 双亲委托机制
2.3 资源加载
2.4 四大组件支持
2.5 ProxyActivity代理
2.6 hook方式
2.7 其他组件
2.8 Android动态加载框架DL的架构与基本原理解析
2.9 Android 插件化框架 DynamicLoadApk 源码分析

img

三、Android插件化初探

3.1 从零开始实现一个插件化框架

3.1.1 概念
3.1.2 插件化解决的问题
3.1.3 各插件化框架对比
3.1.4 插件化实现
3.1.5 ClassLoader实现类

3.2 从零开始实现一个插件化框架

3.2.1 Activity的启动流程
3.2.2 寻找Hook点
3.2.3 撸码阶段
3.2.4 代理对象
3.2.5 偷天换日,替换原来的Intent
3.2.6 ActivityThread
3.2.7 将代理的intent替换回来
3.2.8 注意

3.3 从零开始实现一个插件化框架

3.3.1 插件资源加载
3.3.2 Android中资源加载流程
3.3.3 ActivityManager
3.3.4 ActivityThread
3.3.5 AppCompatActivity

img

四、架构演化(大厂篇)

4.1 360插件开发之DroidPlugin

4.1.1 插件开发之360 DroidPlugin源码分析
4.1.2 插件开发之360 DroidPlugin源码分析之Hook机制
4.1.3 Hook机制的包结构关系
4.1.4 Hook机制类图关系
4.1.5 Hook机制的时序图关系
4.1.6 Manifest权限申请
4.1.7 基类Hook做了什么?
4.1.8 ProxyHook
4.1.9 BaseHookHandle
4.1.10 HookedMethodHandler
4.1.11 ReplaceCallingPackageHookedMethodHandler
4.1.12 IO重定向
4.1.13 递归遍历
4.1.14 以IPackageManager为例
4.1.15 插件开发之360 DroidPlugin源码分析之Binder代理

4.2 滴滴VirtualApk实战

4.2.1 配置
4.2.2 应用
4.2.3 原理
4.2.4 总结
4.2.5 问题

4.3 基于VirtualAPK Android重构之插件化

4.3.1 Plug-in Hello World
4.3.2 插件化框架的选择
4.3.3 插件化原理
4.3.4 引入插件化之痛

img

4.4 爱奇艺插件化原理分析之 Neptune框架

4.4.1 插件化基础知识点
4.4.2 类加载
4.4.3 插件化中资源使用限制
4.4.4 Apk打包流程
4.4.5 四大组件的插件化
4.4.6 插件Activity任务栈
4.4.7 处理插件中的广播
4.4.8 处理插件中的Service

4.5 360开源全面插件化框架RePlugin 实战

4.5.1 RePlugin 介绍
4.5.2 宿主接入步骤
4.5.3 插件接入步骤
4.5.4 使用插架

4.6 腾讯插件化框架 Shadow项目解析

4.6.1 框架简单介绍
4.6.2 框架结构分析
4.6.3 sample 示例代码 AndroidManifest.xml 分析
4.6.4 Activity 实现
4.6.5 替换插件 Activity 的父类
4.6.6 Service 实现
4.6.7 BroadcastReceiver 实现
4.6.8 ContentProvider 实现
4.6.9 框架自身动态化

img

最后

插件化技术可以说是Android高级工程师所必须具备的技能之一,从2012年插件化概念的提出(Android版本),到2016年插件化的百花争艳,直至现在拆件化已成为Android开发必不可少的重点,可以说,插件化技术引领着Android技术的进步。

我相信一个高级程序员一定是勤奋的,可以快速地掌握大量 的新技术、新框架,不仅懂得原理,还能把新的技术落地到公司的产品中去。这是衡量程序员 工作能力的一个重要标准,那么怎样才能将技术运用自如呢?唯有实践!

最后上面分享的资源均免费分享:

文末

欢迎关注我的简书,分享Android干货,交流Android技术。
对文章有何见解,或者有何技术问题,都可以在评论区一起留言讨论,我会虔诚为你解答。
最后,如果你想知道更多Android的知识或需要其他资料我这里均免费分享,只需私信666找我获取,也可以点赞加评论支持哦!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容