5

Poco Summerized, la mia struttura del progetto è come segue:
- A e B sono lib Android -Progetti, dove B dipende Un
- C (normale progetto android) dipende B
- T è Test-progetto C
falliti automatizzati Android UI-test su Jenkins-server a causa di complesse dipendenze lib-progettuali del progetto principale (s)

devo corrispondentemente due progetti sul mio server Jenkins, uno per C e uno per T, che hanno il loro proprio script per costruire, utilizzando i comandi in realtà solo Android e formica. Quindi non ci sono problemi con la build di C, ma non riesco a ottenere la build di lavoro di T.

"Lavoro" dovrebbe significare che, a seconda dello script, non viene compilato o non riesce in fase di esecuzione a causa di alcune classi mancanti, che in realtà non potrebbero essere, o che non passano la fase di dexing a causa dell'aggiunta di duplicati.

Quindi è chiaro che c'è qualcosa di sbagliato nelle dipendenze, ma la cosa interessante è che funziona molto bene sulla macchina locale con eclissi & sull'emulatore.

Quindi, ecco un esempio di codice shell-script, che in realtà dovrebbe lavorare e creare un APK-file:

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

Questo fa sì che, purtroppo, che alcune classi da da B, che sto anche andando a di prova, non è stato trovato dal compilatore Java e ottengo sempre errore come questo:

... 
[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]             ^
... 

ho provato quasi tutto il possibile per risolvere il problema che, anche modificando manualmente il file project.properties e compreso solo B o B e C, allo stesso tempo come lib progetti come questo:

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 

che risulta questa volta in Dexing errori a causa di duplicato aggiungendo delle classi da lib progetti.

Qualcuno ha qualche idea su come risolvere questo? Grazie per l'aiuto in anticipo!

risposta

1

nel progetto di prova T, se avete SomeActivityTest che importare in modo esplicito/serve un pacchetto/classe da Progetto Biblioteche B e/o C, si deve aggiungere il Progetto Biblioteche come dipendenza di prova progetto, in quanto il pacchetto/classe di riferimento è richiesto al momento della compilazione del progetto. se non lo fai, si otterrà il seguente errore quando si compilazione del progetto di prova:

[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 

Se si aggiunge Library Project come la dipendenza sia in progetto principale e progetto di test, e utilizzare Ant si prova progetto, causa voci duplicate in fase di dexing.Eclipse plugin ADT sa hanlde questa situazione correttamente in modo non si ottiene questo problema quando costruire con 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) 

Attualmente, non esiste una soluzione alternativa (fix sporco in script ant), controllare la mia risposta here per dettagli.

Si noti che la versione più recente dell'SDK r17 che ha ottenuto numerosi problemi di correzione e miglioramento. Secondo lo changelog, afferma che ora SDK può gestire dipendenze duplicate più intelligenti, anche se non mi sono ancora stancato di Test Project. Probabilmente puoi dargli un colpo e vedere se funziona. Spero che questo ti aiuti.

+0

grazie per la risposta, è stato davvero utile ho appena riuscito a correggere l'errore. sfortunatamente è apparso un altro errore. si prega di vedere la mia risposta sul http://b.android.com/21720 –

1

Dalla descrizione generale, questo suona come Android bug #21720 — dove le recenti modifiche al sistema di build Android significano che la creazione di tali progetti sulla riga di comando non funziona correttamente.

C'è una soluzione alternativa in comments 16 and 17 che puoi provare.

+0

grazie per la risposta, è stato davvero utile ho appena riuscito a correggere l'errore. sfortunatamente è apparso un altro errore. per favore vedi la mia risposta su http://b.android.com/21720 –

+0

Ogni volta che ho visto il problema, è perché il nome del pacchetto o il nome del runner di prova era sbagliato, o perché l'APK di test non è stato installato correttamente (a causa di mancanza di firma, firma non corrispondente o condizioni nel manifest che ne impedivano l'installazione). –