2012-03-01 75 views
13

由於在同一應用程序的Android市場中同時擁有免費和付費版本,所以我決定也這樣做。起初,我只是複製了完整的代碼庫,並在一些地方修改了一些代碼(添加了廣告,內置了一些限制等),因爲當時沒有選擇做圖書館項目的選擇,但是這給我帶來了兩個管理修復非常可怕的項目因爲我需要做兩次這些bug。具有共享代碼庫的多個應用程序

既然r14我們可以使用庫項目的資源,所以這將是一個很好的解決方案,這個特殊的問題,據我所知。因此,我已閱讀library projects和conciderations,並且我很想知道不同版本的項目中所需的最小文件數量是多少。因此我的問題是;

  • 我可以擁有共享項目中的所有代碼,並且基本上只有一個清單就擁有裸骨項目嗎?
    • 如果是這樣,我應該嗎?這是從概念上的最佳方式嗎? (所以除了這個事實,這取決於我的代碼庫)
  • 我應該如何處理庫包命名,是否有特定的規則?
  • 是否有工具可以比較來自兩個不同項目的代碼,並且可能會自動進行魔法或自動手動合併,以及哪一個更受歡迎?

回答

8
  1. 是的,你可以有一個項目,基本上是一個清單指定應用程序的名稱,命名空間,圖標等等,所有的實際代碼和庫項目資源的99%。

  2. 是的,我認爲你應該使用這種方法。使用庫項目處理免費/付費應用程序問題非常常見。

  3. 我對命名沒有任何問題,儘管您應該小心使用單獨項目中的任何資源以避免使用相同的名稱。

  4. 我不知道有任何工具,如果是我,我想手動做,以確保我合併什麼需要合併,並保持需要分開的東西。你有一個重要的重構要做,但一旦所有的重複被刪除,我相信它會容易得多。

+0

酷!使用常規的差異工具進行合併實際上是非常痛苦的。我唯一遇到的問題是硬編碼的軟件包名稱,以及的一個已知問題,在圖書館項目中不起作用;既容易解決。 – MrJre 2012-03-02 09:49:37

9

如果我正確理解你的問題,你想創建多個Android應用程序是彼此相似(即,有很多相同的源代碼),但它是在特定的(未成年人)的方式不同,並希望這些應用中的每一個都有獨特的軟件包,以便可以將其分別上傳並分發到應用商店,例如Google Play。項目庫是實現這些目標的絕佳工具。

我假設各種版本之間的差異較小,涉及資源和應用程序名稱和軟件包等內容,以及爲付費版本啓用某些功能而將它們關閉以免費版本的開關。

即使情況並非如此,通過以下述方式使用多態性,您的各種應用程序可能會有很大的不同,並且仍共享一個通用的項目庫。

在Eclipse中可以像定義任何Android項目一樣定義項目庫,但它被標記爲項目庫(通過檢查Android頁面底部附近的「Is Library」框庫的「項目屬性」對話框),無法編譯並自行運行。相反,它旨在通過引用包含在一個或多個其他真實應用程序項目中(通過在每個此類應用程序的「項目屬性」對話框的Android頁面上添加對其的引用)。這些應用程序將使用項目庫,因此將共享其代碼和功能。

每個這樣的引用應用程序都會有自己的清單文件(可以聲明它們各自不同的包),還可以定義它們自己的類(包括從項目庫的Activity和/或Application類派生的類),使得這些類可以多態的使用項目庫(每個應用程序進行專門例如,通過重寫方法或通過提供定義爲被定義爲項目庫的活動 - 中抽象或應用程序派生類)的方法,雖然你也可以使用這些庫類,而不會改變(只要它們不是抽象的),通過簡單地引用它們的清單文件中(例如,在活動或應用標籤)使用函數庫的每個應用程序的,就像你引用的活動或應用程序在應用程序本身中定義的類派生類。

如果你決定使用這種方法,那麼你會放一個項目庫的主源文件,並會爲您創建要產生每個應用,每個將引用項目庫單獨的項目。項目庫的清單文件將通過使用圖書館(實際上,我認爲項目庫本身的表現完全被忽略,不只是覆蓋正在創建的任何項目的清單被覆蓋,但仍然是創建清單有用對於庫,以便您可以手動模板 - 複製和編輯 - 從庫自己的清單中使用它的每個項目的清單)。

我已經用這種方法來創建共享一些相同的能力的多個Android應用,並且它一直對我非常好。

關於包命名,所有舊的包名會爲庫項目工作,但當然是有道理的,你用你的各種個人(例如,自由與使用相同的前綴庫項目的包付費)使用它的應用程序,諸如「.library」作爲名稱的最後部分,而各種應用程序可能具有諸如「.myappfree」和「.myapppaid」之類的結尾。自然地,您會希望對庫的包裝前綴使用反向域名約定來防止衝突,就像您對待發布應用程序的包名稱一樣。

在Windows中,用於比較的代碼庫一個很好的開源工具的WinMerge:

http://winmerge.org/

如果我處在你的位置,但是,我只會用這個工具來手動識別的差異,並且不會嘗試使用它來自動將代碼重構爲庫項目。這最好在你自己的(手動)控制下完成。最後,作爲一種替代方案,您可以考慮使用一個免費的應用程序,該應用程序默認具有免費應用程序的功能,並且可以選擇通過輸入法升級到完整應用程序的功能(在相同的APK中提供)應用程序支付,而不是分開的免費和付費應用程序。在過去的幾個月中,應用內支付有了很大的改進(隨着IAB第3版的發佈),儘管仍然存在一些小問題,但它們已經成爲免費/完全二分法更實用的替代方案第一。

相關問題