2014-02-20 111 views
2

我開始創建一個將與多個項目共享的庫。主項目和圖書館項目是否必須共享相同的包?

的問題是,Android文檔是非常短的關於如何妥善處理庫項目。我在處理主要項目和圖書館項目中的幾個共同課程之間的衝突時遇到了困難。

我檢查了樣品從安卓(井字),但它實在是太基本的幫助,但我只是說,他們使用下列程序包:

  • 主要項目:com.example.android .tictactoe
  • 庫項目:com.example.android.tictactoe.library

要始終包含在主體工程包應該圖書館嗎?如果是,當幾個項目必須共享同一個庫項目時該怎麼做,因爲主包名僅屬於一個主項目?

我最大的問題,現在是我的應用程序在調用來自庫項目,而不是主體工程類,我也確實不知道什麼是遵循的最佳方法。

謝謝!

更新:我的問題是與此相關的一個:Best practice: Extending or overriding an Android library project class

+1

你可以有不同的庫項目的包結構。沒有與項目結構或包名稱的依賴關係。但是你現在的問題似乎是「你導入了錯誤的類,檢查導入語句」 –

+0

沒有問題是我的庫項目使用在庫和主項目中定義的類。我無法更改庫中的導入語句來調用主項目中的導入語句。 –

+0

您的陳述更混亂。那個班的路是什麼? –

回答

2

有很多第三方庫的使用(如Action Bar Sherlock),他們不共享同一個包你的。

+0

但是當一些類共同時它仍然是真的嗎?當主項目中的某些類必須覆蓋庫項目中的某些類時? –

+0

我從來沒有嘗試過。我認爲沒有理由在項目和圖書館之間建立共同的類。 –

+0

問題在於庫中需要來自主項目(3個不同的項目)的類,但是我不知道如何將其鏈接到此庫。從庫中刪除類本身當然會引發很多錯誤。 –

1

爲庫項目和主要的應用項目,該軟件包具有以任何方式相關的任何要求。

在某些情況下,它確實有助於將庫作爲主應用程序包的子包:這來自您分割項目的方式,以及如果作爲子包的庫的包可以幫助組織代碼,通過一切手段使它成爲你的主包的子包;否則,不要。這完全是關於最終構造代碼的。

這是確定你的應用程序調用(實際使用是工作)從資料庫中的項目類別。這就是圖書館的用途。它們有助於保持代碼包含,可重複使用並與其他代碼片斷分離。

的問題是周圍的其他方法:當你的庫調用從您的主項目的類。

對Java和Android這裏最常見的方法是使用一個接口:該庫提供了主要的工程實施,那麼主體工程通行證庫項目使用該實現的接口的實例接口。這裏最好的例子是回調。 Android提供了一組接口(例如View.OnClickListener),它們允許您掛接到系統並執行應用程序的邏輯(從應用程序的角度來看,SDK中的Android類是庫)。

其他的方法是提供需要擴展的類(這就像提供接口一樣,但是當你想讓圖書館用戶沒有實現/覆蓋所有方法或者當你想保留一些通過使用final修飾符和反射(儘可能遠離它,因爲它非常容易出錯)將在您的庫中接收到的對象中使用基本功能)。

+0

感謝您的答案,它似乎是什麼也推薦Commonsware在這一個:http://stackoverflow.com/questions/3890948/how-can-a-code-in-a-library-project-call-code-在-的應用項目。 –

+0

任何機會,你有這個接口的例子嗎? –

+0

什麼接口? 'View.OnClickListener'記錄在這裏http://developer.android.com/reference/android/view/View.OnClickListener.html,你也可以在網上找到源代碼,但我認爲這很難滿足你的需求,因爲你的界面很可能會有其他要求。 –