2010-11-03 9 views
8

Mam projekt z połączonym folderem źródłowym. Ten projekt zależy od innego projektu (usługa zdalna), więc pliki helpl i klasy przekazywane przez interfejs zdalny znajdują się w połączonym folderze common_src współużytkowanym między dwoma projektami. Działa to dobrze z kompilacjami Eclipse, (jeden plik źródłowy, dwa projekty, zmiany w jednym projekcie są odzwierciedlone w drugim, tak jak powinno być).Aplikacja Android Ant zbudowana na projekcie z dwoma folderami źródłowymi

Chciałbym teraz zrobić kompilację Ant z wiersza poleceń. Udało mi się zdobyć kolejny projekt z pojedynczym katalogiem src na wszystkich obiektach docelowych, korzystając z narzędzia build.xml z narzędzi SDK. Automatycznie importuje ant_rules_r3.xml, a gdy source.dir i out.dir są zdefiniowane w build.properties, to wszystko jest dość bezbolesne.

Przechodząc do projektu z folderami src i common_src, nie mogę go skompilować. Najpierw wycinam i wklejam cel kompilacji i wszystkie te, od których zależy, do zadania konfiguracyjnego. Dodałem i określony element common_src do build.properties i dodaje ostatnią linię pokazaną poniżej na -compile target (skopiowany z ant_rules_r3.xml) do build xml:

<src path="${source.absolute.dir}" /> 
    <src path="${gen.absolute.dir}" /> 
    <src path="${common_src}" /><!--ADDED--> 

który dostał go w dalszej części procesu budowania - może to znaleźć Pliki .java w common_src, ale nie pliki .aidl. Nic dziwnego, zdałem sobie sprawę, ponieważ pomoc jest oddzielnym celem. I dodaje

<src path="${common_src}" /> 

do -aidl celu w kompilacji xml, a nie powiodło się:

BUILD FAILED 
C:\dev\projects\Eclipse\AndroidWorkspace\MapProject\build.xml:77: aidl doesn't 
support the nested "src" element. 

Tak, że ma mnie dobrze i prawdziwie zakleszczony. Idealnie chciałbym zmodyfikować tylko plik build.properties, aby dołączyć common_src i przekazać go do ant_rules_r3.xml, ale nie mogę wymyślić, jak to zrobić. Byłbym bardzo wdzięczny, gdyby ktoś mógł zasugerować, jak można to zrobić.

+0

możliwe duplikat [Jak określić wiele katalog źródłowy projektu biblioteki Android] (http : //stackoverflow.com/questions/14605899/how-to-specify-multiple-source-directory-for-android-library-project) – Ytai

+0

@Ytai Gdybyś miał ochotę przyjrzeć się datom dwóch pytań, zauważyłem, że to pytanie zostało wysłane na wiele lat przed tym, które cytowałeś jako już posiadające odpowiedź. Nie widzę, jak ktokolwiek z mózgiem mógłby oznaczyć to jako duplikat. – NickT

Odpowiedz

6

Na wszelki wypadek, pomyślałem, że odpowiem na własne pytanie, które zostało teraz rozwiązane.

1) I zdefiniowany common_src w build.properties

2) Dodano linii

<src path="${common_src}" 

nadpisane w celu wkompilowują build.xml powyżej instalacji (oraz overrode wszystkie cele to zależało od cięcia/wklejanie z ant_rules_r3.xml) 3) Dodano nowy cel „aidl2” tak samo jak „aidl” w build.xml ale który miał linię

<source path="${common_src}" zamiast

<source path="${source.absolute.dir}" . 

Wyprodukowano z pomocą2. Przekroczono wszystkie cele pomocy zależne.

Dodałem też linie jak:

key.store=xxxxxxxxxxxxx 
key.alias=xxxxxxxxxxxxx 
key.store.password=xxxxxxxxxxxxx 
key.alias.password=xxxxxxxxxxxxx 

do build.xml który zautomatyzowane wprowadzanie haseł. W końcu dodałem cel install_release, aby wykonać automatyczny proces kompilacji, instalacji i instalacji jednego polecenia.

16

miałem podobny problem, ale wydaje się, że zostały rozwiązane dla mnie następującym ustawieniu w moim pliku build.properties:

source.dir = src;../other_project/src 

użyłem ścieżki względnej połączyć moje SRC do other_project, ale powinieneś być w stanie użyć bezwzględnej ścieżki. Jeśli tak, powinieneś raczej umieścić go w local.properties.

Uwaga: zgodnie z uwagami w build.properties, jeśli mój SDK wersja < 2.0 Chciałbym użyć tego zamiast:

source-folder = src;../other_project/src 
+1

To działało idealnie dla mnie, tyle że użyłem ":" zamiast ";" a plik, który potrzebowałem do edycji, to ant.properties, wydaje mi się, że Android został przełączony na include ant.properties zamiast build.properties. – marmor

+1

@marmor której wersji sdk używasz? ponieważ dla mnie to się nie udaje (20.0.1) zarówno z: jak i; Czy to wciąż działa dla ciebie? – Nappy

+0

@Następna Już potrzebuję tej funkcji, więc nie testowałem jej od czasu aktualizacji do ADT 20, możesz zobaczyć, który plik musisz edytować w wersji ADT, rozpoczynając nowy projekt Android, nazywając "Android update project - ścieżka . " na nim z wiersza poleceń i zobacz, które pliki dla ciebie stworzone, poszukaj pliku ant.properties, który powinien zawierać definicję folderu źródłowego. – marmor

2

Dodaj ; oddzielone listy źródeł do listy ant.properties (nie zapomnij włączyć domyślne src a):

source.dir=src-other;src 

Przede działa dobrze z Android SDK Tools Revision 20.0.3+ (Projekt docelowa: Android 2.2+, API le vel: 8+).

6

nie mogę się wypowiedzieć, bo nie ma wystarczającej reputacji, ale jeśli dodać folder źródłowy współpracuje z poprzednich odpowiedzi, to nie później przy budowie słoika:

 

compile: 
    [javac] Compiling 463 source files to /home/xxx/documents/eclipse/xxx/deploy/xxx/bin/classes 
    [javac] Note: Some input files use or override a deprecated API. 
    [javac] Note: Recompile with -Xlint:deprecation for details. 
    [javac] Note: Some input files use unchecked or unsafe operations. 
    [javac] Note: Recompile with -Xlint:unchecked for details. 
    [javac] Creating empty /home/xxx/documents/eclipse/xxx/deploy/xxx/bin/classes/fr/xxx/android/socialintegration/facebook/package-info.class 
    [echo] Creating library output jar file... 

BUILD FAILED 
/home/xxx/applis/android/android-sdk-linux/tools/ant/build.xml:570: The following error occurred while executing this line: 
/home/xxx/applis/android/android-sdk-linux/tools/ant/build.xml:680: The following error occurred while executing this line: 
/home/xxx/applis/android/android-sdk-linux/tools/ant/build.xml:744: /home/xxx/documents/eclipse/xxx/deploy/xxx/src;../xxxdata/src does not exist. 

Niesprawny część jest w budynku słoika, który używa source.absolute.dir jako zestawu plików, który jest niepoprawny dla ant.

Ale nie ma żadnego obejścia do teraz i nie rozumiem, dlaczego inni zdołali aby to działało ... (Używam również sdk R20)

+0

to samo dla mnie. Kiedy buduję bibliotekę, kończy się niepowodzeniem z 'src; other-src' nie istnieje z"; " lub z ":". –

0

przynajmniej na nowszych wersjach narzędzia budować, problemem jest to, że wartość umieścić w tym obiekcie zostanie przeniesiony do <property name="source.absolute.dirs" location="source.dirs"/>. Atrybut location nie wie, jak postępować ze ścieżkami rozdzielonymi średnikiem/średnikiem.

Rozwiązaniem jest bardzo proste, wystarczy użyć:

source.absolute.dirs=src1:src2:src3 

itd., W przeciwieństwie do:

source.dirs=src1:src2:src3 
+1

Nie działa dla bibliotek, używa tylko ostatniego katalogu. – jdtogni

Powiązane problemy