安卓外掛化框架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 外掛化框架 DynamicLoadApk 原始碼分析Android框架APK原始碼
- Android外掛化原理(一)Activity外掛化Android
- 蘋果swift 外掛化框架蘋果Swift框架
- 深入淺出Service外掛化原理
- 記一次uniapp安卓原生外掛升級APP安卓
- Android 外掛化原理入門筆記Android筆記
- 【2021/12/31】uniapp之安卓原生外掛開發教程APP安卓
- Jenkins 自動化安裝外掛Jenkins
- 用這款sketch外掛,幫你完美還原安卓介面安卓
- 列印外掛工作原理
- 從ClassLoader到Android外掛化以及熱更新原理Android
- Activity外掛化原理第二種方案:Hook IActivityManagerHook
- Activity外掛化原理第一種方案:Hook InstrumentationHook
- [外掛擴充套件]騰訊分析外掛套件
- MyBatis-07-外掛原理MyBatis
- Babel外掛原理與配置Babel
- Flutter 外掛開發之引入aar到安卓部分 並使用本地mavenFlutter安卓Maven
- 外掛化實現Android多主題功能原理剖析Android
- Taro cli流程和外掛化機制實現原理
- 安卓元件化化落地安卓元件化
- 安卓期末複習框架圖安卓框架
- 扒一扒安卓渲染原理安卓
- Eclipse安裝lombok外掛及外掛使用案例EclipseLombok
- Android進階(九)Activity外掛化和VirtualApk分析AndroidAPK
- retdec 外掛安裝
- ATOM 安裝外掛
- Elasticsearch外掛安裝Elasticsearch
- fusionjs uber開源的通用web外掛化開發框架JSWeb框架
- Android外掛化原理解析——Hook機制之Binder HookAndroidHook
- babel原理及外掛開發Babel
- flash外掛怎麼安裝 電腦安裝flash外掛步驟
- 安卓開發框架系列開篇安卓框架
- 扒一扒安卓的渲染原理安卓
- Sublime安裝PlantUML外掛
- eclipse 安裝svn外掛Eclipse
- ubuntu 常用外掛安裝Ubuntu
- 如何安裝 Vim 外掛