在Android上編寫模組化專案(翻譯)

2021-09-07 16:51:33 字數 2356 閱讀 5548

**部落格:wang jie's blog
原文:

要解決這個問題,複雜的應用程式,如 uber 決定對它們的應用程式進行模組化並從中獲得了很多。下面是試用模組化專案的一些優勢:

由於上述優勢,當我剛開始posts這個應用時,我就在始終堅持使用模組化方法。對此,android 團隊已經給我們提供了一些工具,但是我確實遇到了一些障礙,一下是我學習到的內容:

你的應用會包含多個類似流程的模組,有authentication,settings,on-boarding等等。當然還有一些不需要ui元素呈現的模組如 ——notifications,analytics,first-fetch等等。這些模組包含與流程有關的 activities, repositories, entities和依賴注入相關東西。

但是這些模組中總是有一些共同的功能和工具。這就是為什麼你需要乙個 core 模組。

core模組是乙個你專案中簡單的 module 庫。core 庫可以(除其它外),

核心(core)模組的其中乙個職責是為你的功能(feature)模組提供外部依賴。這使得很容易實現在你的feature模組中共享相同版本的庫。只需要在你的core模組的 dependencies 中使用api,這樣你就能在所有feature模組中使用它們。

dependencies
這個困擾我挺久的時間。我們希望把我們的資料庫定義到core模組中,因為它是我們應用程式要共享的通用的功能。為了讓 room 工作,你需要乙個包含了所有 entity 類的資料庫檔案。

@database(entities = [post::class, user::class, comment::class], version = 1,exportschema = false)

abstract class postdb : roomdatabase()

但是,如上面提到的,我們的 entity 類是被定義在feature模組中,而且core模組不能去訪問它們。這是我碰到障礙的地方,經過一番思考後,你做了一件最棒的事,尋求 yigit 的幫助。

yigit 闡明了觀點,你必須要在每個feature模組中都建立乙個新的 db 檔案,然後每個模組乙個資料庫。

這有幾個好處:

缺點:注意:為了 room 的註解能夠工作,不要忘記在你的feature模組中增加下面依賴

kapt "android.arch.persistence.room:compiler:$"
你的 core 元件定義了它想要暴露給依賴元件的依賴關係

@singleton

inte***ce corecomponent

您的模組元件將corecomponent定義為依賴項,並使用傳遞的依賴

@listscope

@component(dependencies = [corecomponent::class], modules = [listmodule::class])

inte***ce listcomponent

@module

@listscope

class listmodule

我為我的功能的所有元件建立了乙個單例 holder。這個 holder 用於建立,維護和銷毀我的 component 例項。

@singleton

object postdh

fun destroylistcomponent()

}

注意:為了 dagger 的註解能夠工作,不要忘記在你的feature模組中增加下面依賴

kapt "com.google.dagger:dagger-compiler:$"
謝謝。

Android元件化模組化在移動應用開發中

在移動應用上由於應用本身與使用者相貼近,日常開發中難免的需求變更朝令夕改 朝三暮四,尤其遇到沒啥規範流程的或者形式主義流程 關於元件化模組化是什麼及其優點不再贅述,在此補充點優點而已 減少名言的聯想 linus read the ing source code 我們的終極目標不僅是解耦。簡化框架,減...

模組化InnoSetup依賴項安裝

原文在這裡 說明 源 是模組化的,結構如下 你需要把所需的模組在頂部使用 include命令包含在源 中,例如 include scripts products dotnetfx11.iss 然後你只需要在 code 段呼叫它們的main函式,如 dotnetfx11 你很可能需要調整setup.i...

android 程式開發的外掛程式化 模組化方法 之二

public class andoirdpluginactivity extends activitygroup implements onclicklistener onscrollcompletelistener override public void onclick view v 載入外掛程...