<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Shadow騰訊的 Android 插件框架

          聯(lián)合創(chuàng)作 · 2023-09-24 06:48

          Shadow是一個(gè)騰訊自主研發(fā)的Android插件框架,經(jīng)過(guò)線上億級(jí)用戶量檢驗(yàn)。 Shadow不僅開(kāi)源分享了插件技術(shù)的關(guān)鍵代碼,還完整的分享了上線部署所需要的所有設(shè)計(jì)。

          與市面上其他插件框架相比,Shadow主要具有以下特點(diǎn):

          • 復(fù)用獨(dú)立安裝App的源碼:插件App的源碼原本就是可以正常安裝運(yùn)行的。
          • 零反射無(wú)Hack實(shí)現(xiàn)插件技術(shù):從理論上就已經(jīng)確定無(wú)需對(duì)任何系統(tǒng)做兼容開(kāi)發(fā),更無(wú)任何隱藏API調(diào)用,和Google限制非公開(kāi)SDK接口訪問(wèn)的策略完全不沖突。
          • 全動(dòng)態(tài)插件框架:一次性實(shí)現(xiàn)完美的插件框架很難,但Shadow將這些實(shí)現(xiàn)全部動(dòng)態(tài)化起來(lái),使插件框架的代碼成為了插件的一部分。插件的迭代不再受宿主打包了舊版本插件框架所限制。
          • 宿主增量極小:得益于全動(dòng)態(tài)實(shí)現(xiàn),真正合入宿主程序的代碼量極?。?5KB,160方法數(shù)左右)。
          • Kotlin實(shí)現(xiàn):core.loader,core.transform核心代碼完全用Kotlin實(shí)現(xiàn),代碼簡(jiǎn)潔易維護(hù)。

          支持特性

          • 四大組件
          • Fragment(代碼添加和Xml添加)
          • DataBinding(無(wú)需特別支持,但已驗(yàn)證可正常工作)
          • 跨進(jìn)程使用插件Service
          • 自定義Theme
          • 插件訪問(wèn)宿主類(lèi)
          • So加載
          • 分段加載插件(多Apk分別加載或多Apk以此依賴加載)
          • 一個(gè)Activity中加載多個(gè)Apk中的View
          • 等等……

          編譯與開(kāi)發(fā)環(huán)境

          環(huán)境準(zhǔn)備

          第一次clone Shadow的代碼到本地后,建議先在命令行編譯一次。

          • 在編譯前,必須設(shè)置ANDROID_HOME環(huán)境變量。
          • 在編譯時(shí),必須使用gradlew腳本,以保證采用了項(xiàng)目配置的Gradle版本。

          在命令行測(cè)試編譯時(shí)可以執(zhí)行這個(gè)任務(wù):

          ./gradlew build
          

          如果沒(méi)有出錯(cuò),再嘗試用Android Studio打開(kāi)工程。

          • 必須使用3.4或更高版本的Android Studio打開(kāi)工程。(業(yè)務(wù)插件開(kāi)發(fā)時(shí)沒(méi)有限制)
          • 必須關(guān)閉Android Studio的Instant Run功能。

          然后就可以在IDE中選擇sample-host模塊直接運(yùn)行了。

           

          Shadow的所有代碼都位于projects目錄下的3個(gè)目錄,分別是:

          • sdk包含SDK的所有代碼
          • test包含SDK的自動(dòng)化測(cè)試代碼
          • sample包含演示代碼

          其中sample應(yīng)該是大家體驗(yàn)Shadow的最佳環(huán)境。 詳見(jiàn)sample目錄中的README介紹。

          自己寫(xiě)的測(cè)試代碼出錯(cuò)?

          以我們多年的插件環(huán)境下業(yè)務(wù)開(kāi)發(fā)經(jīng)驗(yàn),插件框架是不可能一步到位實(shí)現(xiàn)完美的。 因此,我們相信大部分業(yè)務(wù)在接入時(shí)都是需要一定的二次開(kāi)發(fā)工作。 Shadow現(xiàn)有的代碼滿足的是我們自己的業(yè)務(wù)現(xiàn)在的需求。得益于全動(dòng)態(tài)的設(shè)計(jì), 插件框架和插件本身都是動(dòng)態(tài)發(fā)布的,插件包里既有插件代碼也有插件框架代碼, 所以可以根據(jù)新版本插件的需要同時(shí)開(kāi)發(fā)插件框架。

          例如,ShadowActivity沒(méi)有實(shí)現(xiàn)全所有Activity方法,你寫(xiě)的測(cè)試代碼可能用到了, 就會(huì)出現(xiàn)Method Not Found錯(cuò)誤,只需要在ShadowActivity中實(shí)現(xiàn)對(duì)應(yīng)方法就可以了。 大部分方法的實(shí)現(xiàn)都只是需要簡(jiǎn)單的轉(zhuǎn)調(diào)就能工作正常。

          如果遇到不會(huì)實(shí)現(xiàn)的功能,可以提Issue。最好附上測(cè)試代碼。

          后續(xù)開(kāi)發(fā)

          • 原理與設(shè)計(jì)說(shuō)明文檔
          • 多插件支持的演示工程
          • 自動(dòng)化測(cè)試用例補(bǔ)充
          • 開(kāi)源包含下載能力的manager實(shí)現(xiàn)
          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色色青青资源网 | 久久久久国产欧美久久久aaa | 性生活片无码在线 | 国产精品 - 色哟哟 | 亚洲三级在线观看 |