5

Krótko summerized, mój struktury projektu jest jak następuje:
- i B są android lib -projects gdzie B zależy
- C (normalny projektu Android) zależy B
- T jest testowy projekt CNieudane zautomatyzowane Android UI-Testy na Jenkins-Server z powodu skomplikowanych zależnościach lib-projektowych głównego projektu (ów)

mam odpowiednio dwa projekty na moim serwerze Jenkins jeden dla C i jeden dla T, które mają swój własny scenariusz budować, używając właściwie tylko android i mrówek poleceń. Więc nie ma problemu z kompilacją C, ale nie mogę uzyskać kompilacji pracy z T.

"Praca" powinna oznaczać, że w zależności od skryptu nie kompiluje się lub kończy się niepowodzeniem w czasie wykonywania ze względu na brakujące klasy, które w rzeczywistości nie mogą być lub nie przechodzą fazy dekompresji z powodu dodawania duplikatów.

Jest więc jasne, że coś jest nie tak z zależnościami, ale ciekawą rzeczą jest to, że działa bardzo dobrze na lokalnej maszynie z eclipse & na emulatorze.

Tak oto przykładowy kod skrypt powłoki, które rzeczywiście powinny działać i tworzyć plik apk:

cd project-test 
android update test-project -m ../projectC -p . 
ant clean debug 

Powoduje to niestety, że niektóre z klas od B, że jestem również zamiar testy, nie udało się znaleźć od kompilatora java i ja się zawsze błąd tak:

... 
[javac] Compiling 14 source files to /home/mehmed/git/project/test-project/bin/classes 
[javac] SomeActivityTest.java:8: package com.mydomain.portal.android.project.activity does not exist 
[javac] import com.mydomain.portal.android.project.activity.SomeClass1; 
[javac]              ^
[javac] SomeActivityTest.java:9: package com.mydomain.portal.android.project.data does not exist 
[javac] import com.mydomain.portal.android.project.data.SomeClass2; 
[javac]             ^
[javac] SomeActivityTest.java:10: package com.project.portal.android.project.util does not exist 
[javac] import com.mydomain.portal.android.project.util.SomeClass3; 
[javac]             ^
... 

próbowałem prawie wszystko, co możliwe, aby naprawić, nawet ręcznie edytując plik project.properties i tym właśnie B lub B i C w tym samym czasie, co lib projekty jak ten:

cd project-test 
android update test-project -m ../projectC -p . 
echo "android.library.reference.1=../projectB" >> project.properties 
# or even also projectA: 
echo "android.library.reference.2=../projectA" >> project.properties 
ant clean debug 

co skutkuje tym razem w Dexing błędy z powodu dwóch egzemplarzach dodawanie klas z lib projekty.

Czy ktoś ma jakieś pomysły na temat naprawy? Dzięki za pomoc z góry!

Odpowiedz

1

w projekcie testowym T, jeśli masz SomeActivityTest jawnie importować/korzystać z niektórych pakietów/klasy z Biblioteki projektu B i/lub C, trzeba dodać bibliotece projektów w zależności od testu projekt, ponieważ odwołanie do pakietu/klasy jest wymagane w czasie budowania projektu. jeśli tego nie zrobisz, otrzymasz następujący błąd podczas kompilacji ty Test Project:

[javac] SomeActivityTest.java:8: package com.mydomain.portal.android.project.activity does not exist 
[javac] import com.mydomain.portal.android.project.activity.SomeClass1; 
[javac]              ^
[javac] SomeActivityTest.java:9: package com.mydomain.portal.android.project.data does not exist 

Jeśli dodać do projektu bibliotecznego jako zależność zarówno głównego projektu i projektu testowego i użyć Ant kompilacji przetestować projekt, to przyczyna duplikaty wpisów w kroku dexingu.Eclipse plugin ADT umie hanlde tej sytuacji prawidłowo, więc nie dostać ten problem podczas kompilacji z Eclipse:

[dx] UNEXPECTED TOP-LEVEL EXCEPTION: 
[dx] java.lang.IllegalArgumentException: already added: Lcom/mydomain/...; 
[dx]  at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
[dx]  at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 

Obecnie istnieje obejście (brudny poprawka w skrypcie mrówek), sprawdź moją odpowiedź dla here Detale.

Zauważ, że najnowsze wydanie SDK r17, które ma wiele napraw i ulepszeń. Zgodnie z changelog, twierdzi, że teraz SDK radzi sobie z podwójnymi zależnościami bardziej inteligentnymi, mimo że nie zmęczyłem się jeszcze w Projekcie Testowym. Prawdopodobnie możesz dać mu szansę i sprawdzić, czy to działa. Mam nadzieję że to pomoże.

+0

dziękuję za odpowiedź, bardzo mi pomogło, że udało mi się naprawić błąd. niestety pojawił się kolejny błąd. proszę zobaczyć moją odpowiedź na http://b.android.com/21720 –

1

Z ogólnego opisu to brzmi jak Android bug #21720gdzie ostatnie zmiany w systemie budowania Androida oznaczają, że budowanie takich projektów w wierszu poleceń nie działa poprawnie.

Istnieje obejście tego problemu w wersji comments 16 and 17, które można wypróbować.

+0

dzięki za odpowiedź, to było naprawdę pomocne, właśnie udało mi się naprawić błąd. niestety pojawił się kolejny błąd. zobacz moją odpowiedź na http://b.android.com/21720 –

+0

Ilekroć widziałem ten problem, dzieje się tak albo dlatego, że nazwa pakietu lub nazwa programu testowego była błędna, albo ponieważ testowy pakiet APK nie został pomyślnie zainstalowany (z powodu brak podpisu, niedopasowanego podpisu lub warunków w manifeście, które uniemożliwiły jego instalację). –

Powiązane problemy