2012-04-02 10 views
5

Poco summerized, la estructura de mi proyecto es como sigue:
- Un y B son lib androide -Proyectos, donde B depende de a
- C (proyecto androide normal) depende de B
- T se prueba proyecto de Cfallidos automatizados Android UI-Pruebas en Jenkins-servidor debido a las dependencias en proyectos lib complejos del proyecto (s) principal

que tienen correspondientemente dos proyectos en mi servidor Jenkins, uno para C y una para T, que tienen su propia secuencia de comandos para construir, utilizando comandos en realidad sólo androide y hormigas. Por lo tanto, no hay ningún problema con la compilación de C, pero no puedo obtener la compilación de trabajo de T.

"Trabajo" debería significar que, dependiendo de la secuencia de comandos, o bien no compila o falla en el tiempo de ejecución debido a que faltan algunas clases, que realmente no pueden ser, o no pasan la fase de dexing debido a agregar duplicados.

Así que está claro, que hay algo mal con las dependencias, pero lo interesante es que funciona muy bien en la máquina local con Eclipse & en emulador.

Así que aquí un ejemplo de código script de shell, que en realidad debería trabajar y crear un archivo APK-:

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

Esto hace que por desgracia que algunas clases de B a partir , que soy también va a prueba, no se pudo encontrar el compilador java y siempre me sale error como este:

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

yo probé casi todo lo posible para arreglar eso, incluso modificando manualmente el archivo project.properties e incluyendo solo B o B y C al mismo tiempo como lib-proyectos como este:

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 

que da como resultado esta vez en Dexing errores debido a la adición de duplicado de las clases de lib-proyectos.

¿Alguien tiene alguna idea sobre arreglar esto? ¡Gracias por la ayuda de antemano!

Respuesta

1

En el proyecto de la prueba T, si usted tiene SomeActivityTest que importar de forma explícita/usar algún paquete/clase del Proyecto para bibliotecas B y/o C, hay que añadir el proyecto de Biblioteca como una dependencia de la prueba proyecto, ya que el paquete/clase referenciado es requerido en el momento de compilación del proyecto. si no lo hace, obtendrá el siguiente error de compilación cuando se proyecto de la prueba:

[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 

Si agrega Proyecto Biblioteca como la dependencia, tanto en Proyecto Principal y proyecto de la prueba, y el uso de construcción Ant probar proyecto, que causa entradas duplicadas en el paso de dexing.Eclipse ADT plugin sabe cómo hanlde esta situación adecuada para que no se consigue este problema cuando la acumulación 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) 

En la actualidad, hay una solución (solución sucia en escritura hormiga), echa un vistazo a mi respuesta para here detalles.

Tenga en cuenta que el SDK más reciente versión r17 que consiguió corregir muchos errores y mejoras. Según el changelog, afirma que ahora SDK puede manejar dependencias duplicadas de forma más inteligente, aunque todavía no me he cansado con Test Project. Probablemente puedas darle una oportunidad y ver si funciona. Espero que esto ayude.

+0

gracias por la respuesta, fue realmente útil, solo logré corregir el error. desafortunadamente, ha aparecido otro error. por favor vea mi respuesta en http://b.android.com/21720 –

1

De la descripción general, esto suena como Android bug #21720 — donde los cambios recientes en el sistema de compilación de Android significan que la construcción de dichos proyectos en la línea de comandos no funciona correctamente.

Hay una solución en el comments 16 and 17 que puede probar.

+0

gracias por la respuesta, fue realmente útil, solo logré corregir el error. desafortunadamente, ha aparecido otro error. Consulte mi respuesta en http://b.android.com/21720 –

+0

. Siempre que he visto ese problema, es porque el nombre del paquete o el nombre del corredor de prueba era incorrecto, o porque el APK de prueba no se instaló correctamente (debido a falta de firma, firma desajustada o condiciones en el manifiesto que impidieron su instalación). –

Cuestiones relacionadas