2011-09-19 15 views
6

我需要一些幫助來找出組織我的Android項目的最佳方式(或最佳做法)。爲了簡單起見,假設我的Android Eclipse工作區是C:\Android\Projects\。在該文件夾內,我喜歡從庫中分離應用程序,並且我有兩個其他文件夾,分別爲C:\Android\Projects\ApplicationsC:\Android\Projects\Components我應該如何組織包括庫在內的Android項目的源代碼管理?

對於一個項目我已經克隆從GitHub庫到Components文件夾,假設C:\Android\Projects\Componentes\SampleLib(該文件夾內有兩個文件夾TheLibTheLibExample)。我的應用程序創建爲C:\Android\Projects\Applications\MyTestApp。然後我通過以下these instructions將圖書館添加到應用程序中。

現在讓我們說,我想用GitHub上與開源社區分享我的應用程序。我將創建一個存儲庫並將所有內容從C:\Android\Projects\Applications\MyTestApp推送到某個存儲庫。

如果有人想叉我的應用程序,甚至幫我,這將需要的庫編譯和運行它,這不包括在我的項目本身。 default.properties文件將有類似於android.library.reference.1=../Components/SampleLib/TheLib的文件,並且某人需要手動克隆該庫,並且他需要將其放在相同的相對路徑中,否則會混淆我的應用程序的源代碼管理。

我能想到的解決這一問題的唯一辦法是組織我的工作區是這樣的:

C:\Android\Projects\Applications\MyTestApp\TheApp 
C:\Android\Projects\Applications\MyTestApp\TheLib 
C:\Android\Projects\Componentes\SampleLib 

而且我的倉庫應充滿來自C:\Android\Projects\Applications\MyTestApp\內容。

但是,庫更新時會發生什麼?我不能簡單地拉動新的更改,我需要將它們複製到TheLib文件夾中。在之前的文件夾組織中,這不是必需的,因爲我引用的是原始克隆存儲庫而不是副本。

那我該怎麼辦?我應該選擇第一種方式,讓任何人在我認爲合適的時候處理圖書館依賴項,或者我應該使用第二種方法,並且在原始方案從其中更改時保持兩個文件夾同步,從而爲每個人提供更多的工作。庫?

+0

你如何解決這個問題的bitbucket? bitbucket沒有在項目中添加我的庫 – Erum

回答

4

也許Git的子模塊將解決您的問題。

+0

有點混淆,使用這些。我將來必須深入挖掘,現在我只是把事情放在一邊。但我猜子模塊正是我所期待的:) –

+0

Git子模塊非常混亂,在我看來,對於你的情況來說太複雜了。從我讀過的子模塊推薦當你想包含第三方庫時,你會很少更新(只有當有另一個版本時)。他們不適合你自己的圖書館,你會經常更新。您可能想嘗試使用git子樹:http://apenwarr.ca/log/?m=200904#30 –

1

我個人認爲,Android的庫項目是失敗的設計。我想要引用/使用其他代碼的唯一方式是獲得另一個完整的項目並將所有內容都設置爲IDE配置級別,這很荒謬。什麼是圖書館?它應該是以歸檔格式編譯和打包的可重用組件。根據他們的重要說明Library project storage location,我不認爲有一個簡單的解決方法,我們可以打破這個關係,並將圖書館作爲一個真正的圖書館來管理。如果你的庫沒有這麼機械化,那麼嘗試編寫/構建是一個普通的jar庫,並使用maven管理jar庫構建/發佈和項目依賴關係。

嗯,谷歌稱之爲合理的Android庫項目,而不是Android 圖書館

+0

我同意你在另一個項目的整個設置。從Windows/C#開始,我可以在哪裏引用.dll文件,現在我無法在Android中做類似的操作。儘管如此,你的回答並不能真正回答我的問題。而圖書館不是我的,它是別人的。我真的不知道Maven是什麼,也不知道現在學習什麼新東西。 –

+0

我知道這不是一個答案,我試圖將它作爲註釋添加,但大小已經溢出:P – yorkw

+1

Android Library項目與您從Java中知道的只有jar的庫存在非常重要的區別。不同的是,圖書館項目不僅僅是複製到主項目中。爲了節省光盤尺寸,只有使用過的部分被複制並編譯到主項目中。而且這些資源可以在主項目中輕鬆更改,因爲它們只是替換圖書館資料。完美的白色標籤應用程序!如果你不喜歡那樣,你仍然可以開發一個庫並將它作爲一個jar添加到你的項目中。請不要比較蘋果和香蕉! – WarrenFaith

1

我personnaly認爲git的子模塊不完全的依賴庫提供了一個非常易於使用和功能強大的系統。

Git的子樹是一個更好的選擇。我發現a very useful guide解釋瞭如何做到這一點。

基本上你可以創建子文件夾包含你的依賴,以及子文件夾內的克隆庫:

$ mkdir vendor 
$ git remote add -f ABS https://github.com/JakeWharton/ActionBarSherlock 
$ git merge -s ours --no-commit ABS/master 
$ git read-tree --prefix=vendor/ABS/ -u ABS/master 
$ git commit -m "Merged ABS into vendor/ABS/" 
# Now another lib 
$ git remote add -f Crouton https://github.com/keyboardsurfer/Crouton 
$ git merge -s ours --no-commit Crouton/master 
$ git read-tree --prefix=vendor/Crouton/ -u Crouton/master 
$ git commit -m "Merged Crouton into vendor/Crouton/" 

然後,你就會有內部vendor/在這個例如兩個回購/庫;你只需要將它們添加到你的IDE /構建系統。

Git分支和修改比子模塊更容易和更直接。

我甚至已經創建了a small script,可以自動執行此過程以獲取庫的列表。

相關問題