最近幾年移動開發業界興起了「 外掛化技術 」的旋風,各個大廠都推出了自己的外掛化框架,各種開源框架都評價自身功能優越性,令人目不暇接。隨著公司業務快速發展,專案增多,開發資源卻有限,如何能在有限資源內滿足需求和專案的增長,同時又能快速響應問題和迭代新需求,這就是一個矛盾點。此時,外掛化技術正好風生水起,去了解各個主流框架實現思路,看看能對目前工作是否有幫助,是很有必要的。
外掛化介紹百度百科裡是這麼定義外掛的:「 是一種遵循一定規範的應用程式介面編寫出來的程式,只能執行在程式規定的系統平臺下,而不能脫離指定的平臺單獨執行。」,也就是說,外掛可以提供一種動態擴充套件能力,使得應用程式在執行時載入原本不屬於該應用的功能,並且做到動態更新和替換。
那麼在 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 偷天換日,替換原來的Intent3.2.6 ActivityThread3.2.7 將代理的intent替換回來3.2.8 注意
3.3 從零開始實現一個外掛化框架
3.3.1 外掛資源載入3.3.2 Android中資源載入流程3.3.3 ActivityManager3.3.4 ActivityThread3.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 ProxyHook4.1.9 BaseHookHandle4.1.10 HookedMethodHandler4.1.11 ReplaceCallingPackageHookedMethodHandler4.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 World4.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進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記等等,這些內容均免費分享給大家,需要完整版的朋友,直接轉發+點贊+私信回覆【資料】一鍵領取!!!