溫故知新:深入理解Android插件化技術,Android高級插件化強化實戰!(附源碼)

最近幾年移動開發業界興起了「 插件化技術 」的旋風,各個大廠都推出了自己的插件化框架,各種開源框架都評價自身功能優越性,令人目不暇接。隨着公司業務快速發展,項目增多,開發資源卻有限,如何能在有限資源內滿足需求和項目的增長,同時又能快速響應問題和迭代新需求,這就是一個矛盾點。此時,插件化技術正好風生水起,去了解各個主流框架實現思路,看看能對目前工作是否有幫助,是很有必要的。

插件化介紹

百度百科裏是這麼定義插件的:「 是一種遵循一定規範的應用程序接口編寫出來的程序,只能運行在程序規定的系統平臺下,而不能脫離指定的平臺單獨運行。」,也就是說,插件可以提供一種動態擴展能力,使得應用程序在運行時加載原本不屬於該應用的功能,並且做到動態更新和替換。

那麼在 Android 中,何爲「 插件化 」,顧名思義,就是把一些核心複雜依賴度高的業務模塊封裝成獨立的插件,然後根據不同業務需求進行不同組合,動態進行替換,可對插件進行管理、更新,後期對插件也可進行版本管理等操作。在插件化中有兩個概念需要講解下:

  • 宿主

所謂宿主,就是需要能提供運行環境,給資源調用提供上下文環境,一般也就是我們主 APK ,要運行的應用,它作爲應用的主工程所在,實現了一套插件的加載和管理的框架,插件都是依託於宿主的APK而存在的。

  • 插件

插件可以想象成每個獨立的功能模塊封裝爲一個小的 APK ,可以通過在線配置和更新實現插件 APK 在宿主 APK 中的上線和下線,以及動態更新等功能。

那麼爲何要使用插件化技術,它有何優勢,能給我們帶來什麼樣好處,這裏簡單列舉了以下幾點:

  • 讓用戶不用重新安裝 APK 就能升級應用功能,減少發版本頻率,增加用戶體驗。
  • 提供一種快速修復線上 BUG 和更新的能力。
  • 按需加載不同的模塊,實現靈活的功能配置,減少服務器對舊版本接口兼容壓力。
  • 模塊化、解耦合、並行開發、 65535 問題。

深入理解Android插件化技術

現在普通人一聽“宿主”第一想到的就是歐美電影裏的恐怖畫面,甚至感覺瘮得慌。但是在移動開發領域,我們經常會提及的“宿主”卻有完全不一樣的意義,那就是支持插件的app主體。

從2012年插件化概念被提出,到2016年的時候,插件化技術百家爭鳴,被一線大廠廣泛使用,可以說成爲了Android高級工程師所必須具備的技能之一,幾乎引領了Android技術的進步!

近些年,一線互聯網大廠幾乎對移動互聯網形成了壟斷,app的功能越來越多,比如下面這些app(美團、支付寶等):

每個app都集成了許多功能入口,美團上有“美食”、“電影”、“外賣”、“打車”等,其實每個入口都是一個app,只不過被集成到這些入口裏了。如果沒有插件化技術,美團、淘寶這些app會有多大?幾個G都有可能!

這些大型app是如何把第三方app作爲插件集成到自己的app裏的?

隨便一個app就能隨意調用其他app嗎?

當然不能!

插件化技術最初源於免安裝運行apk的想法,這個免安裝的apk可以理解爲插件,而支持插件的app 我們一般叫宿主。支持插件化的app可以在運行時加載和運行插件,這樣便可以將app中一些功能獨立的模塊寫成獨立的插件,一方面減小了安裝包的大小,另一方面可以實現app功能的動態擴展。想要實現插件化,主要是解決下面三個問題:

1、插件中代碼的加載和與主工程的互相調用
2、插件中資源的加載和與主工程的互相訪問
3、四大組件生命週期的管理

插件化技術涉及得非常廣泛,其中最核心的就是Android的類加載機制和反射機制。

高級Android插件化強化實戰(附源碼)

雖然現在很多公司開源了插件化框架,但還有非常多的開發者對插件化一知半解。所以我特地給大家整理了167頁的高級Android插件化強化實戰(附源碼),一共分爲四個部分:

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

從基礎的插件化原理到Android插件化初探再到大廠架構演化實戰應用,總結出了較爲全面與完整的安卓插件技術與插件化對 Android開發的重要性。

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

1.1 插件化提要
1.2 插件化發展歷史

二、插件化原理

2.1 類加載
2.2 雙親委託機制
2.3 資源加載
2.4 四大組件支持
2.5 ProxyActivity代理
2.6 hook方式
2.7 其他組件
2.8 Android動態加載框架DL的架構與基本原理解析
2.9 Android 插件化框架 DynamicLoadApk 源碼分析

三、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

四、架構演化(大廠篇)

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 引入插件化之痛

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 框架自身動態化

最後

插件化技術可以說是Android高級工程師所必須具備的技能之一,從2012年插件化概念的提出(Android版本),到2016年插件化的百花爭豔,直至現在拆件化已成爲Android開發必不可少的重點,可以說,插件化技術引領着Android技術的進步。

我相信一個高級程序員一定是勤奮的,可以快速地掌握大量 的新技術、新框架,不僅懂得原理,還能把新的技術落地到公司的產品中去。這是衡量程序員 工作能力的一個重要標準,那麼怎樣才能將技術運用自如呢?唯有實踐!

最後上面分享的資源均免費分享:

高級Android插件化強化實戰(附源碼)點擊此處查看免費領取方式!

還有耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記等等,這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章