2010-10-21 78 views
6

我有一個國家的公共交通應用程序,我想爲另一個國家創建一個單獨的應用程序。大多數代碼將被共享,但我需要一些類來實現不同的實現,例如TransitProvider。如何處理多個共享大約90%源代碼的Android應用程序?

是否可以使用Android Library Project共享代碼?我可以做以下嗎?

  1. 有無TransitProvider(擴展 AbstractTransitProvider)在 庫項目。該類具有未實現的方法。
  2. 在應用程序項目> AndroidManifest.xml中我有不同的包名稱比庫的清單。我在這個項目中也有TransitProvider,與圖書館的TransitProvider在同一個包中。
  3. 當我在庫項目代碼中使用TP時,從應用程序執行。項目應該被使用(即應用項目的TP覆蓋了圖書館的TP)。

回答

5

是否可以使用Android Library Project共享代碼?

是。這是圖書館項目的主要目的。如果您不需要Android資源,則還可以使用在單獨項目中創建的普通JAR。

我可以做以下嗎?

如果我正確理解了您提出的步驟,則不能在兩個地方定義相同的類(在同一個包中)。

您應該:

  1. 定義AbstractTransitProvider庫中的項目或JAR
  2. 任選具有一個或多個具體的實現,AbstractTransitProvider,對於直線上升的重用,在庫項目或JAR
  3. 應用使用庫項目或JAR除了使用庫項目或JAR提供的任何具體實現之外,還可以在他們自己的Java軟件包中擁有自己的具體實現AbstractTransitProvider
+0

感謝您的回答。大部分資源對於我的應用程序來說都很常見,因此我將使用庫項目。我需要從庫項目的Activity中做這樣的事情:'Journey result = new TransitProvider()。findJourney();'我怎樣才能確保應用程序項目的'TransitProvider'實現被使用? – fhucho 2010-10-21 13:53:22

+1

@fhucho:「我怎樣才能確保使用應用程序項目的TransitProvider實現?」 - 只有一個名爲'TransitProvider'的類。在庫項目中沒有名爲'TransitProvider'的類。將通用代碼放置在庫項目(和/或其他實用程序類)中的'AbstractTransitProvider'中,並將應用程序項目中的'TransitProvider'中的自定義實現放入。 – CommonsWare 2010-10-21 14:08:51

+0

但是,圖書館項目似乎並不瞭解位於應用程序項目中的TransitProvider。應用程序可以使用lib中的類,但不是我想的其他方法。 – fhucho 2010-10-21 14:21:29

相關問題