2011-09-19 13 views
6

Potrzebuję pomocy w ustaleniu najlepszego sposobu (lub najlepszej praktyki) do zorganizowania mojego projektu Android. Dla uproszczenia, powiedzmy, że mój obszar roboczy Eclipse dla Androida to C:\Android\Projects\. W tym folderze lubię oddzielać aplikacje od bibliotek i mam dwa inne foldery: C:\Android\Projects\Applications i C:\Android\Projects\Components.Jak zorganizować kontrolę nad źródłami dla projektów Androida, w tym bibliotek?

Dla jednego projektu Mam sklonowanego bibliotekę z GitHub do folderu Components, powiedzmy C:\Android\Projects\Componentes\SampleLib (wewnątrz tego folderu tam dwa foldery TheLib i TheLibExample). A moja aplikacja jest tworzona w C:\Android\Projects\Applications\MyTestApp. Następnie umieściłem bibliotekę w aplikacji, wykonując polecenie these instructions.

Załóżmy teraz, że chcę użyć GitHub do udostępnienia mojej aplikacji społeczności open source. Utworzę repozytorium i przekażę wszystko od C:\Android\Projects\Applications\MyTestApp do jakiegoś repozytorium.

Jeśli ktoś chce rozwidlić moją aplikację lub nawet mi pomóc, będzie potrzebował biblioteki do jej skompilowania i uruchomienia, co nie jest zawarte w moim projekcie. Plik default.properties będzie miał coś takiego, jak android.library.reference.1=../Components/SampleLib/TheLib i że ktoś będzie musiał ręcznie sklonować tę bibliotekę, a on będzie musiał umieścić ją w tej samej względnej ścieżce, w przeciwnym razie zepsułoby to kontrolę nad moją aplikacją.

Jedynym sposobem mogę myśleć o rozwiązaniu tego problemu jest zorganizować moje miejsce pracy tak:

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

A mój repozytorium powinno być wypełnione treścią z C:\Android\Projects\Applications\MyTestApp\.

Co się stanie, gdy biblioteka zostanie zaktualizowana? Nie mogę po prostu wyciągnąć nowych zmian, muszę je skopiować do folderu TheLib. W poprzedniej organizacji folderów nie byłoby to potrzebne, ponieważ odwoływałem się do oryginalnego sklonowanego repozytorium, a nie do kopii.

Co powinienem zrobić? Czy powinienem wybrać opcję 1 i pozwolić każdemu, kto rozwikłuje mój projekt, na radzenie sobie z zależnościami bibliotek, jeśli uznają to za stosowne, czy powinienem pójść z drugim i dać wszystkim więcej pracy, utrzymując synchronizację dwóch folderów, gdy oryginalny wyciągnie zmiany z jego magazyn?

+0

jak rozwiązać ten problem dla bitbucket? Bitbucket nie dodaje mojej biblioteki do projektu – Erum

Odpowiedz

4

Może submoduły git rozwiążą twój problem.

+0

Trochę mylące w użyciu. Będę musiał kopać głębiej w przyszłości, ponieważ teraz po prostu zostawiam rzeczy takimi, jakimi są. Ale myślę, że submodules jest dokładnie tym, czego szukałem :) –

+0

Submoduły Git są bardzo mylące i moim zdaniem zbyt skomplikowane dla twojego przypadku. Z tego, co przeczytałem, submoduły są zalecane, gdy chcesz dołączyć bibliotekę innej firmy, którą będziesz aktualizować rzadko (to tylko wtedy, gdy jest inna wersja). Nie działają dobrze z własną biblioteką, którą często aktualizowałbyś. Zamiast tego możesz spróbować poddrzewa git: http://apenwarr.ca/log/?m=200904#30 –

1

Osobiście uważam, że projekt biblioteki Androida jest projektem FAIL. To niedorzeczne, że jedyny sposób, w jaki chcę odnieść/użyć innego fragmentu kodu, to uzyskać kolejny cały projekt i ustawić wszystko na poziomie konfiguracji IDE. czym jest biblioteka? powinien to być składnik wielokrotnego użytku, skompilowany i spakowany w formacie archiwum. Zgodnie z ich ważną uwagą Library project storage location, nie sądzę, że istnieje łatwe obejście tego problemu, ponieważ możemy zerwać remis i zarządzać biblioteką jako prawdziwą biblioteką. Jeśli twoja biblioteka nie jest tak zsynchronizowana, spróbuj pisać/buduj jako zwykłą bibliotekę słoików i używaj programu maven do zarządzania kompilacją/wersją biblioteki słoików i zależnościami projektowymi.

Hmmm, uzasadnione jest, że Google Android nazwać Biblioteka Projekt, nie Android Biblioteka.

+0

Zgadzam się z Państwem na cały zestaw innego projektu. Pochodzę z Windows/C#, gdzie mogę po prostu odwołać się do pliku .dll, a teraz nie mogę zrobić coś podobnego w systemie Android. Jednak twoja odpowiedź tak naprawdę nie odpowiada na moje pytanie. A biblioteka nie jest moja, to jest czyjaś inna. Szczerze mówiąc nie wiem, co to jest Maven i nie da się w tej chwili nauczyć czegoś nowego. –

+0

Wiem, że to nie jest odpowiedź, próbowałem dodać ją jako komentarz, ale rozmiar przepełnił się: P – yorkw

+1

Jest bardzo ważna różnica między projektem biblioteki Android i biblioteką znaną z Javy, gdzie po prostu masz słoik. Różnica polega na tym, że projekt biblioteczny nie jest kopiowany do głównego projektu. Aby zapisać rozmiar dysku, tylko użyte części są kopiowane i kompilowane do głównego projektu. Również zasoby można łatwo zmienić w głównym projekcie, ponieważ po prostu zastępują rzeczy z biblioteki. Idealny dla aplikacji białej etykiety! Jeśli ci się to nie podoba, nadal możesz stworzyć bibliotekę i dodać ją jako słoik do swojego projektu. Proszę nie porównywać jabłka z bananem! – WarrenFaith

1

Osobiście uważam, że podmoduły git nie dostarczają w pełni bardzo łatwego w użyciu i potężnego systemu dla zależności bibliotek.

Poddoty Git są lepszą alternatywą. Znalazłem a very useful guide, który wyjaśnia, jak to zrobić.

Zasadniczo można utworzyć podfolder zawierający swoje zależności i repozytoria klonów wewnątrz tego podkatalogu:

$ 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/" 

Wtedy będziesz mieć w tym przykładzie dwa repo/libs wewnątrz vendor/; wystarczy dodać je do swojego systemu IDE/build.

Git rozgałęzienia i modyfikacje są znacznie łatwiejsze i bardziej proste niż z submodułami.

Stworzyłem nawet a small script, który automatyzuje ten proces dla listy bibliotek.

Powiązane problemy