如果我正確理解你的問題,你想創建多個Android應用程序是彼此相似(即,有很多相同的源代碼),但它是在特定的(未成年人)的方式不同,並希望這些應用中的每一個都有獨特的軟件包,以便可以將其分別上傳並分發到應用商店,例如Google Play。項目庫是實現這些目標的絕佳工具。
我假設各種版本之間的差異較小,涉及資源和應用程序名稱和軟件包等內容,以及爲付費版本啓用某些功能而將它們關閉以免費版本的開關。
即使情況並非如此,通過以下述方式使用多態性,您的各種應用程序可能會有很大的不同,並且仍共享一個通用的項目庫。
在Eclipse中可以像定義任何Android項目一樣定義項目庫,但它被標記爲項目庫(通過檢查Android頁面底部附近的「Is Library」框庫的「項目屬性」對話框),無法編譯並自行運行。相反,它旨在通過引用包含在一個或多個其他真實應用程序項目中(通過在每個此類應用程序的「項目屬性」對話框的Android頁面上添加對其的引用)。這些應用程序將使用項目庫,因此將共享其代碼和功能。
每個這樣的引用應用程序都會有自己的清單文件(可以聲明它們各自不同的包),還可以定義它們自己的類(包括從項目庫的Activity和/或Application類派生的類),使得這些類可以多態的使用項目庫(每個應用程序進行專門例如,通過重寫方法或通過提供定義爲被定義爲項目庫的活動 - 中抽象或應用程序派生類)的方法,雖然你也可以使用這些庫類,而不會改變(只要它們不是抽象的),通過簡單地引用它們的清單文件中(例如,在活動或應用標籤)使用函數庫的每個應用程序的,就像你引用的活動或應用程序在應用程序本身中定義的類派生類。
如果你決定使用這種方法,那麼你會放一個項目庫的主源文件,並會爲您創建要產生每個應用,每個將引用項目庫單獨的項目。項目庫的清單文件將通過使用圖書館(實際上,我認爲項目庫本身的表現完全被忽略,不只是覆蓋正在創建的任何項目的清單被覆蓋,但仍然是創建清單有用對於庫,以便您可以手動模板 - 複製和編輯 - 從庫自己的清單中使用它的每個項目的清單)。
我已經用這種方法來創建共享一些相同的能力的多個Android應用,並且它一直對我非常好。
關於包命名,所有舊的包名會爲庫項目工作,但當然是有道理的,你用你的各種個人(例如,自由與使用相同的前綴庫項目的包付費)使用它的應用程序,諸如「.library」作爲名稱的最後部分,而各種應用程序可能具有諸如「.myappfree」和「.myapppaid」之類的結尾。自然地,您會希望對庫的包裝前綴使用反向域名約定來防止衝突,就像您對待發布應用程序的包名稱一樣。
在Windows中,用於比較的代碼庫一個很好的開源工具的WinMerge:
http://winmerge.org/
如果我處在你的位置,但是,我只會用這個工具來手動識別的差異,並且不會嘗試使用它來自動將代碼重構爲庫項目。這最好在你自己的(手動)控制下完成。最後,作爲一種替代方案,您可以考慮使用一個免費的應用程序,該應用程序默認具有免費應用程序的功能,並且可以選擇通過輸入法升級到完整應用程序的功能(在相同的APK中提供)應用程序支付,而不是分開的免費和付費應用程序。在過去的幾個月中,應用內支付有了很大的改進(隨着IAB第3版的發佈),儘管仍然存在一些小問題,但它們已經成爲免費/完全二分法更實用的替代方案第一。
酷!使用常規的差異工具進行合併實際上是非常痛苦的。我唯一遇到的問題是硬編碼的軟件包名稱,以及的一個已知問題,在圖書館項目中不起作用;既容易解決。 –
MrJre
2012-03-02 09:49:37