架構介紹
疑難點是如何解決的
一些需要注意的事項
詳細的原始碼請移步 github:spi_component
首先,我們思考下什麼是元件化,什麼是外掛程式化?什麼時候我們用元件化,什麼時候我們用外掛程式化?
這是乙個策略問題,用何種方式需要根據實際情況來。
剛剛說了,元件化是將專案拆分為幾個元件,單個元件高內聚,元件間低耦合。所以復用會比較方便,如果公司產品多可以考慮這種方式。
外掛程式化是將整個專案拆分為幾個模組,和元件化類似,有相似的優勢,但是一般外掛程式化方案都涉及 hook 技術,而這些技術隨著 android 版本迭代,可能會被**,存在一些適配的風險,可能會不穩定。
隨著我們的業務發展,我們的主工程越來越複雜,不得不考慮元件化和外掛程式化來簡化我們的開發工作,考慮到穩定性,我們決定改造我們的工程,後續切換到元件化開發。
在改造的時候,我們採集了一下內部對於元件化需求:
學習成本低,希望比較容易上手(接入簡單)。
現有的**改動少,呼叫方式最好不變。
元件之間互相呼叫(希望可以直接使用其他元件的資源,相對顯式開啟其他元件的頁面等)方便、高效。
希望不要引入太多無關的**。
希望新增元件的方式簡單點。
元件間的呼叫不是很方便,activity 的跳轉還好,但是涉及到 fragment 的呼叫的時候,
就不是很方便了,基本無解。
新增元件相對麻煩,需要修改編譯指令碼,相對不友好。
鑑於以上的一些特點,我們希望可以在現有的基礎上做一些優化,希望元件化開發更簡單,更方便。
於是,我設想了這個基於spi
的元件化框架。框架的大致架構如下:
模組名稱
作用:baselibs:imageloader
這個是基礎的載入庫,目前沒有實際的實現,只是為了演示
:baselibs:net
這個是基礎的網路框架庫,目前沒有實際的實現,只是為了演示
:baselibs:compbase
:baselibs:compx
這個是元件庫,抽象了元件具體的功能
:baselibs:core
:components:compximpl
某個元件,依賴:baselibs:compbase
、:baselibs:core
、:baselibs:compx
,實現:baselibs:compx
裡面這個元件對外暴露的業務邏輯等。
:baselibs:compx
模組定義了各種元件承擔的業務和對外暴露的一些資源等,主要是通過介面暴露。同時提供各個模組的預設實現。
:baselibs:core
模組整合了各個元件對外暴露的部分。
:components:compximpl
模組是乙個元件的實現,實現的是:baselibs:compx
模組裡面定義的的元件.
模組。模組。
首先,乙個元件需要在:baselibs:compx
模組裡面定義,我們暫用icompxservice
來表示,其實就是乙個介面,定義了這個元件對外暴露的東西,比如可以獲取某個值(get***),可以獲取乙個 fragment (get***fragment)。同時提供預設實現。
然後,我們需要新建乙個:components:compximpl
模組,依賴:baselibs:compx
模組,然後實現:baselibs:compx
模組裡面的icompxservice
介面,我們記為compxserviceimpl
,這樣我們就有了乙個元件。
元件的原理大概就是這樣的。
通過這種方法,我們可以僅在元件裡面處理自己的初始化邏輯就好了。
新增乙個元件的話,需要做如下的事情,
新建乙個:baselibs:compx
庫,定義新的元件需要對外的部分,同時提供預設實現,並讓spi
可以載入到這個預設實現。
新建乙個:components:compximpl
庫,實現剛剛的元件庫,同時讓spi
可以識別到這庫。
在:baselibs:core
裡面註冊這個元件對外暴露的compxservice
。
經過上面四步,新增乙個元件完成了,中間不需要特別修改編譯指令碼,只需要修改一些引用庫之間的關係就可以使用了。感覺還是很方便的。
:baselibs:core
模組會通過spi
來載入元件的實現,也就是元件library
裡面實現icompxservice
介面的類,所以元件library
裡面要按照spi
的要求新建入口檔案。
SPI 基於SPI協議的Flash驅動控制
實驗目標 將固化到flash中的程式,通過全擦除程式將其中的固化程式擦除,重新上電後,不再執行固化檔案裡的內容 jic檔案 將該檔案燒錄到flash中,掉電不丟失 flash在spi通訊中充當從裝置 在進行程式固化時,在下圖中選擇主裝置型號 具體操作 檢視flash晶元的資料手冊 寫使能指令 執行完...
android 乙個奇怪的bug
今天做乙個android例子,程式本來執行好好的,可是後來不知道為什麼會有這個異常,具體如下 我 layout.xml檔案裡,有乙個linearlayout android id id serinfoll 當我在activity裡,用 linearlayout findviewbyid r.id.s...
android 乙個ad分析
入口new thread new runnable catch exception v4 start 在程式入口 有個g 方法下 修改g 方法 跳轉到s 方法進入遊戲 com.zplay.android.sdk.zplayad zplayad類的方法制空 com.zplay.android.sdk....