安卓外掛化框架Shadow原理分析
一、前言:
1.介紹:
Shadow是一個騰訊自主研發的Android外掛框架,經過線上億級使用者量檢驗。 Shadow不僅開源分享了外掛技術的關鍵程式碼,還完整的分享了上線部署所需要的所有設計。
與市面上其他外掛框架相比,Shadow主要具有以下特點:
複用獨立安裝App的原始碼:外掛App的原始碼原本就是可以正常安裝執行的。
零反射無Hack實現外掛技術:從理論上就已經確定無需對任何系統做相容開發,更無任何隱藏API呼叫,和Google限制非公開SDK介面訪問的策略完全不衝突。
全動態外掛框架:一次性實現完美的外掛框架很難,但Shadow將這些實現全部動態化起來,使外掛框架的程式碼成為了外掛的一部分。外掛的迭代不再受宿主打包了舊版本外掛框架所限制。
宿主增量極小:得益於全動態實現,真正合入宿主程式的程式碼量極小(15KB,160方法數左右)。
Kotlin實現:core.loader,core.transform核心程式碼完全用Kotlin實現,程式碼簡潔易維護。
2.專案地址
專案地址:GitHub - Tencent/Shadow: 零反射全動態Android外掛框架
二、原理分析:
Shadow號稱無Hook點。核心原理是運用代理的方式,把原本的acitivty編譯期間改成一個代理類,去代理宿主activity的所有生命週期。
2.1 傳統的方案
既然這裡提到了Shadow的特點是無hook,那麼我們自然先簡單的聊一下hook的方法是實現元件化。傳統的方式,是通過hook了instrumetation或者classLoader,本來把本來啟動HostActivity的任務,轉換成了啟動TargetActivity的任務,從而實現了外掛當中TargetActivity的啟動。
具體外掛化的文章可以參看我的外掛化系列課程:
https://blog.csdn.net/rzleilei/category_11590922.html?spm=1001.2014.3001.5482
hook有什麼缺點嗎?那自然是有的,否則Shadow也不會著重宣傳其無hook的特性。hook最大的問題,就是風險性。隨著安卓版本的更新, 之前hook的點很有可能會隨著版本的變化而改變。比如下面通過反射Hook了Instrumetation。這樣的程式碼在安卓12以下都是OK的,但是如果安卓14把mInstrumentation設定為了私有變數,那我們的整個外掛化方案都會失效。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010128/viewspace-2871650/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android外掛化原理分析(基於Neptune框架)Android框架
- 白話外掛框架原理框架
- Android外掛化原理(一)Activity外掛化Android
- 安卓外掛安卓
- Android 外掛化框架 DynamicLoadApk 原始碼分析Android框架APK原始碼
- 蘋果swift 外掛化框架蘋果Swift框架
- 外掛化知識梳理(10) Service 外掛化實現及原理
- Android外掛化——VirtualAPK外掛框架接入專案AndroidAPK框架
- 深入淺出Service外掛化原理
- RePlugin外掛化框架的學習Plugin框架
- 外掛化知識梳理(6) Small 原始碼分析之 Hook 原理原始碼Hook
- 【MyBatis原始碼分析】外掛實現原理MyBatis原始碼
- Android外掛化原理解析——概要Android
- 外掛化知識梳理(2) Small 框架之如何引入公共庫外掛框架
- 外掛化知識梳理(1) Small 框架之如何引入應用外掛框架
- 外掛化知識梳理(4) Small 框架之如何實現外掛更新框架
- Android 外掛化原理入門筆記Android筆記
- Android 外掛化原理解析(1):概要Android
- 列印外掛工作原理
- [外掛擴充套件]騰訊分析外掛套件
- Activity外掛化原理第二種方案:Hook IActivityManagerHook
- Android 外掛化框架 DynamicLoadApk 原始碼解析Android框架APK原始碼
- 外掛化知識梳理(5) Small 框架之如何不將外掛打包到宿主中框架
- Babel外掛原理與配置Babel
- MyBatis-07-外掛原理MyBatis
- Activity外掛化原理第一種方案:Hook InstrumentationHook
- Taro cli流程和外掛化機制實現原理
- 外掛化知識梳理(3) Small 框架之宿主分身框架
- 外掛化實現Android多主題功能原理剖析Android
- 從ClassLoader到Android外掛化以及熱更新原理Android
- Android 外掛化原理解析(7):廣播的管理Android
- babel原理及外掛開發Babel
- Router:一款單品、元件化、外掛化全支援的路由框架元件化路由框架
- Android進階(九)Activity外掛化和VirtualApk分析AndroidAPK
- Android外掛化原理解析——Hook機制之Binder HookAndroidHook
- fusionjs uber開源的通用web外掛化開發框架JSWeb框架
- 外掛化技術:宿主訪問外掛資源
- 揭祕webpack外掛的工作原理Web