2010-11-03 10 views
8

Tengo un proyecto con una carpeta de origen vinculada. Este proyecto depende de otro proyecto (servicio remoto), por lo que los archivos auxiliares y las clases pasadas a través de la interfaz remota están en una carpeta vinculada common_src compartida entre los dos proyectos. Esto funciona bien con las compilaciones de Eclipse (un archivo fuente, dos proyectos, los cambios en un proyecto se reflejan en el otro, tal como debería ser).Ant Android se basa en un proyecto con dos carpetas de origen

Ahora me gustaría hacer una compilación Ant desde la línea de comandos. Logré obtener otro proyecto con un único directorio src que compilara todos los objetivos usando el ejemplo build.xml de las herramientas del SDK. Importa ant_rules_r3.xml automáticamente y una vez que se definen source.dir y out.dir en el build.properties, todo es bastante sencillo.

Pasando al proyecto con las carpetas src y common_src, no puedo conseguirlo para compilar. En primer lugar, corté y pegué el objetivo de compilación y todos los que depende en el build.xml sobre la tarea de configuración. He añadido y se define el elemento common_src a la build.properties, y añadió la última línea se muestra a continuación a la -compile target (copiado de ant_rules_r3.xml) en el build xml:

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

el que consiguió más adelante en el proceso de construcción - que podría encontrar la .java archivos en common_src pero no los archivos .aidl. No es de extrañar que me di cuenta de que la ayuda es un objetivo separado. Luego añade

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

al objetivo -aidl en el xml de construcción, y falló con:

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

Así que me tiene bien y verdaderamente atascado. Idealmente me gustaría modificar solo el archivo build.properties para incluir common_src y pasarlo a ant_rules_r3.xml, pero no puedo pensar en una forma de hacerlo. Estaría muy agradecido si alguien puede sugerir cómo se puede hacer.

+0

posible duplicado de [Cómo especificar directorio de origen múltiple para Android proyecto de biblioteca] (http : //stackoverflow.com/questions/14605899/how-to-specify-multiple-source-directory-for-android-library-project) – Ytai

+0

@Ytai Si se hubiera molestado en ver las fechas de las dos preguntas, lo haría He visto que esta pregunta se publicó años antes de la que usted citó como que ya tiene una respuesta. No veo cómo alguien con cerebro puede marcar esto como un duplicado. – NickT

Respuesta

6

En caso de que haya algún interés, pensé que iba a responder a mi propia pregunta que ahora está resuelta.

1) he definido el common_src en los build.properties

2) Añadido la línea

<src path="${common_src}" 

en un objetivo de compilación overriden en el build.xml por encima de la configuración (más hicieron caso omiso todos los objetivos que dependía de cortando/pegar desde el ant_rules_r3.xml) 3) Añadido un nuevo objetivo 'aidl2' lo mismo que 'AIDL' en build.xml pero que tenía la línea

<source path="${common_src}" en lugar de

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

Hecho aidl depende de aidl2. Anuló todos los objetivos en los que dependía.

I también líneas adicionales como:

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

a la build.xml que automatiza la entrada de contraseñas. Finalmente, agregué un destino de install_release para crear un proceso automático de compilación, alquiler e instalación de un comando.

16

tuve un problema similar, pero parece haberse resuelto para mí por la siguiente configuración en mi archivo build.properties:

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

que utiliza una ruta relativa a vincular mi src para other_project, pero deberías poder usar una ruta absoluta. Si lo hace, probablemente debería ponerlo en local.properties en su lugar.

Nota: acuerdo con los comentarios en build.properties, si mi SDK versión 2.0 < que utilizaría esta vez:

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

Esto funcionó perfectamente para mí, solo que he usado ":" en lugar de ";" y el archivo que necesitaba editar es ant.properties, creo que Android pasó a incluir ant.properties en lugar de build.properties. – marmor

+1

@marmor qué versión de sdk estás usando? porque para mí esto falla (20.0.1) con ambos: y; ¿Todavía está trabajando para ti? – Nappy

+0

@Nappy Ya no necesito esta característica, así que no la he probado desde que actualicé a ADT 20, puede ver qué archivo necesita editar en su versión de ADT iniciando un nuevo proyecto de Android, llamando a "android update project --path " desde la línea de comandos y viendo qué archivos creó para usted, busque un archivo ant.properties, que debe contener la definición de carpeta de origen. – marmor

2

Añadir ; lista separada de las fuentes a su ant.properties (no se olvide para incluir por defecto src también):

source.dir=src-other;src 

anterior funciona correctamente con las herramientas de SDK de Android Revisión 20.0.3+ (Proyecto Objetivo: Android 2.2 +, API le vel: 8+).

6

que no puedo comentar porque no tengo la reputación suficiente, pero si se añade una carpeta de origen funciona con respuestas anteriores, se produce un error más adelante en la construcción de jar:

 

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. 

La pieza defectuosa se encuentra en el edificio del jar que usa source.absolute.dir como un filset que no es válido para hormiga.

Pero no tienen ninguna solución por el momento y no entiendo por qué otros han logrado hacer que funcione ... (También estoy usando r20 SDK)

+0

lo mismo para mí. Cuando construyo la biblioteca falla con 'src; other-src' tampoco existe con"; " o con ":". –

0

al menos en las versiones posteriores de las herramientas de construcción, el problema es que el valor puesto en esta propiedad se pasa en un <property name="source.absolute.dirs" location="source.dirs"/>. El atributo location no sabe cómo tratar las rutas separadas por puntos y coma y dos puntos.

La solución es muy simple, sólo tiene que utilizar:

source.absolute.dirs=src1:src2:src3 

etc., en lugar de:

source.dirs=src1:src2:src3 
+1

No funciona para bibliotecas, usa solo el último directorio. – jdtogni

Cuestiones relacionadas