2017-10-05 96 views
2

我在我的android項目中有兩個模塊。我希望這兩個模塊都可以訪問其他模塊的佈局文件並執行像Intent()這樣的操作。如何從另一個子模塊訪問子模塊的佈局?

但是,使用compile project (':x ')不適用於此。

編輯: 這兩個模塊都已成功添加到項目中,並且gradle已正確同步且清單已合併。我想要如何從另一個模塊的java文件訪問一個模塊的res /佈局文件。對於上下文,我在模塊2中需要模塊2中的activityA.xml,以便在模塊2中單擊某個按鈕時,它將轉換爲帶有意圖的ActivityA.xml。

+0

更具體,我會很樂意提供幫助。你有問題,包括額外的模塊到你的項目?它們是否包含在內,但不能單獨編譯它們?你的問題到底是什麼。 – Sam

+0

@Sam更新。請檢查 –

回答

0

好吧,爲了使用其他模塊的資源,你必須做一些事情。

確定如何打包和使用模塊。該模塊是「適用於」該應用程序還是用於其他應用程序。

如果它被多個項目使用,那麼我建議將它打包爲AAR並在您自己的Maven Repo中託管,並通過Gradle提取以避免項目依賴於代碼庫本身。

如果它只被這個項目使用,那麼你也必須做一些事情。

1)確保settings.gradle包含模塊。如果它對於項目目錄是本地的,你可以用simple:moduleName來完成。否則,您可以使用

include 'myLib' 
project(':myLib').projectDir = new File('../../../workspace/libs/myLib') 

一旦您完成了此操作,確認Gradle Sync將模塊拉入項目。而不僅僅是一個帶有IML的空文件夾。如果它是空文件夾,請確認您的路徑並重試。

步驟2)所以你成功地導入你的模塊,你可以在你的目錄中看到它。但是,您不能讓模塊依賴於應用程序,應用程序依賴於模塊。它被稱爲循環依賴,所以你必須只有應用程序依賴於模塊。轉到您的應用程序的模塊之一,它具有

apply plugin: 'com.android.application' 

並轉到依賴部分,包括

compile ':myLib' 

現在,你需要確認你的編譯MYLIB工作(MYLIB是你的lib的名稱)。要確認您可以從終端執行assembleRelease並查看它是否有任何問題,或者您也可以執行Gradlesync。

如果有效,您現在可以將資源或文件導入到父應用程序模塊的任何Activity中,只需在頂部包含導入語句即可。

現在你可以做像HelperClass.doSomething(其中helperClass住在myLibs中)的東西。

所以讓我們再來一步。也許你需要HelperClass才能響應應用程序模塊。然後,您必須在IMyCallBack的myLib中提供一個接口,並使用您要調用的任何方法,並讓父模塊調用活動實現回調接口。

這是回答您的問題還是您有另一個問題。如果您的依賴關係設置正確,那麼訪問子模塊的內容應該沒有問題。

+0

模塊已成功添加和同步。我可以在父應用程序中使用它們。但是,我希望子模塊的文件可以被應用程序中的其他子模塊訪問。就像模塊A的所有文件都應該可以被模塊B訪問,反之亦然。可能嗎? –

+0

沒有那叫做循環依賴。您可能有模塊A依賴於模塊B「OR」,您可能有模塊B依賴於模塊A.您不可以同時執行這兩個模塊。如果你有模塊A和模塊B都需要的代碼,那麼我建議將它移動到模塊C,讓模塊A和B都依賴於模塊C.這是否合理。 – Sam

+0

你能告訴我如何使用導入語句將模塊A導入到模塊B中嗎?這兩個模塊已經是主要項目的一部分。 –

相關問題