Mam przykładowy projekt z następującą konfiguracją:
/root
+ Pure Java Lib
+ Android Test Lib
+ Android Test Project
Gdzie „ Projekt testowy ” jest zależny od „ Test Lib ”, a ostatni zależy od „ Czystej biblioteki Java ”. Kompilacja projektu i uruchomienie tej konfiguracji działa dobrze.
Myślę teraz o zaimportowaniu mojego poprzedniego obszaru roboczego Eclipse i pracy ze studiem Android, problem polega na tym, że konfiguracja projektu jest inna i chciałbym, aby tak zostało.
na przykład jeśli użyć poprzedniego przykładu:
/root
+ Android Test Lib
+ Android Test Project
/Some Other folder (another repository for example)
+ Pure Java Lib
Próbowałem wielu konfiguracji, ale nie znalazłem sposobu na odwołanie się do projektu poza zakresem folderu nadrzędnego ( w tym przypadku „ root ”).
Na wielu platformach / modułach możesz użyć znaku „..”, aby przejść w górę w folderach, ale to nie zadziałało, być może źle go użyłem.
Czy ktoś wie, jak można to osiągnąć dzięki Gradle?
AKTUALIZACJA
Postaram się być bardziej ogólny:
/C:/
/Project A
+ Module 1 - Pure Java
+ Module 2 - Android Test Lib
+ Module 3 - Android Test Project
/Project B
+ Module 1 - Pure Java
+ Module 2 - Pure Java
+ Module 3 - Pure Java
Chciałbym użyć modułu 1 z projektami B , w project .
AKTUALIZACJA: 03.09.19
Widziałem to teraz i muszę zaktualizować ... po prawie 6 latach dziś jestem mądrzejszy iz całą pewnością mogę powiedzieć, że problemem było to, że źle zrozumiałem pojęcie „Źródła prawdy”.
Chociaż posiadanie jednego odnośnika do biblioteki jest fajnym pomysłem ... i może wydawać się "Źródłem prawdy", PRAWDZIWYM "Źródłem prawdy" byłaby wersja kodu używanego przez każdy projekt tej biblioteki, ponieważ Biblioteka sama w sobie ma wersje. Wiele wersji „Źródło prawdy” odnosi się do projektu, który korzysta z biblioteki.
Prawidłowym sposobem byłoby użycie tego, czego większość programistów nie lubi, czyli podmodułów git, i tak, powielanie źródeł w każdym projekcie, ponieważ większość projektów używa innej wersji kodu.
Musisz jednak dążyć do tego, aby wszystkie Twoje projekty korzystały z najnowszej i najlepszej wersji wszystkich Twoich bibliotek .. co samo w sobie jest wyzwaniem
Powodem, dla którego jest to właściwy sposób tworzenia projektu ze źródłami bibliotecznymi, jest to, że to skaluje ... możesz mieć setki projektów, każdy z własną konfiguracją biblioteki.
źródło
Odpowiedzi:
Zakładając, że Some Other Folder jest projektem gradle, możesz dodać coś podobnego do następującego pliku settings.gradle:
źródło
Musisz umieścić w swoim pliku settings.gradle te linie:
Następnie musisz dodać do swojego builde.gradle (Module: app) w drzewie zależności , następującą linię:
lub przejdź do Struktura projektu > aplikacja > Zależności , kliknij Dodaj , wybierz 3 Zależności modułów i wybierz swój moduł
źródło
compile project(path: ':library', configuration: 'variant')
. Tutajvariant
składa się z pliku bibliotekiflavor
ibuildType
zgodnie z definicją w nimbuild.gradle
. Na przykład, jeśli chcesz miećrelease
typ kompilacji biblioteki wdevelop
smaku, tovariant
jestdevelopRelease
.W przypadku Gradle 1.10 (nie wiem, do jakich innych wersji to będzie obowiązywać) oto, co wymyśliłem na podstawie odpowiedzi podanej tutaj http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy
Mam projekt biblioteki API, wspólny projekt biblioteki i główny projekt aplikacji. Każdy jest samodzielnym projektem programistycznym, a dwie biblioteki mają być współużytkowane przez wiele aplikacji.
W settings.gradle dla wspólnego projektu:
Następnie w głównym projekcie aplikacji settings.gradle:
W każdym z odpowiednich plików build.gradle odwołujesz się do nich, używając nazwy nadanej im w ustawieniach.createProjectDescriptor, tak jak w przypadku każdej innej zależności projektu:
To wydaje się działać. Podejrzewam, że nie zgłosił on nawet błędu dla wielu plików DEX definiujących bibliotekę api, jak podejrzewam, ponieważ wszystko to było częścią tego samego procesu budowania, a Gradle był wystarczająco inteligentny, aby to wszystko rozgryźć.
źródło
Kliknij prawym przyciskiem myszy projekt - Wybierz „Otwórz ustawienia modułu” - Wybierz „Moduły” w lewym panelu - Kliknij symbol „+” u góry - Wybierz „Importuj moduł”.
Po zaimportowaniu Module. Musisz dodać go jako zależność dla bieżącego projektu.
Pozostaw zaznaczone "Moduły" w lewym panelu i kliknij swój projekt - Teraz przejdź do zakładki zależności i kliknij symbol "+" znajdujący się na dole - Wybierz trzecią opcję "Zależności modułów" i jeśli poprawnie zaimportowałeś swój projekt, pokazuje wszystkie dostępne moduły, które można dodać jako zależność do bieżącego projektu.
źródło
Ponownie zadaję to pytanie w sposób, który pociąga za sobą zamiary oryginalnych plakatów w Jak odnosimy się do niestandardowych bibliotek Androida i Java żyjących poza katalogiem naszego głównego projektu Android?
Tam odpowiadam na własne pytanie. Zasadniczo moja odpowiedź wykorzystuje wgląd w kodowanie stopni @ Ethan (autor wybranej odpowiedzi w bieżącym wątku). Ale moja odpowiedź omija również inne problemy i przedstawia szczegółowy przykład krok po kroku.
źródło
Jak powiedział Ethan, jeśli dodasz to do swoich settings.gradle, doda to zewnętrzny projekt do Android Studio (w tym przykładzie znajduje się w folderze nadrzędnym):
Następnie, aby dodać go jako zależność jednego z twoich projektów, po prostu dodaj go w build.gradle tego projektu jako kolejną zależność, taką jak ta (możesz to również zrobić graficznie, jak tutaj ):
źródło