android - samsung - huawei mate 8 ant+
Android Ant se basa en un proyecto con dos carpetas de origen (6)
Tengo un proyecto con una carpeta de origen vinculada. Este proyecto depende de otro proyecto (servicio remoto), por lo que los archivos de ayuda y las clases que se pasan a través de la interfaz remota están en una carpeta compartida 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).
Ahora me gustaría hacer una compilación Ant desde la línea de comando. Pude obtener otro proyecto con un único directorio de src que se construye en todos los objetivos utilizando el ejemplo build.xml
de las herramientas de SDK. Importa ant_rules_r3.xml
automáticamente y una vez que source.dir
y out.dir
están definidos en build.properties
, todo es bastante build.properties
.
Volviendo al proyecto con las carpetas src
y common_src
, no puedo hacer que se construya. Primero, corté y pegué el objetivo de compilación y todos aquellos de los que depende el build.xml
sobre la tarea de configuración. build.properties
y build.properties
el elemento common_src
a build.properties
y agregué la última línea que se muestra debajo al -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-->
lo que lo llevó más allá en el proceso de compilación: podría encontrar los archivos .java en common_src pero no en los archivos .aidl. No es de extrañar que me di cuenta de que la ayuda es un objetivo separado. Luego agregué
<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 eso 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.
En caso de que haya algún interés, pensé que respondería mi propia pregunta que ahora está resuelta.
1) Definí common_src en build.properties
2) Agregó la línea
<src path="${common_src}"
en un objetivo de compilación sobrescrito en build.xml sobre la configuración (además de anular todos los objetivos de los que dependía cortando / pegando de ant_rules_r3.xml) 3) Se agregó un nuevo objetivo ''aidl2'' igual que ''aidl'' en compilación. xml pero que tenía la línea
<source path="${common_src}"
lugar de
<source path="${source.absolute.dir}" .
Ayuda hecha depende de aidl2. Anuló todos los objetivos en los que dependía.
También agregué líneas como:
key.store=xxxxxxxxxxxxx
key.alias=xxxxxxxxxxxxx
key.store.password=xxxxxxxxxxxxx
key.alias.password=xxxxxxxxxxxxx
al 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.
Tuve un problema similar, pero parece que se resolvió para mí mediante la siguiente configuración en mi archivo build.properties:
source.dir = src;../other_project/src
Usé una ruta relativa para vincular mi src a otro_proyecto, pero debería poder usar una ruta absoluta. Si lo hace, probablemente debería ponerlo en local.properties en su lugar.
Nota: según los comentarios en build.properties, si mi versión del SDK <2.0 usaría esto en su lugar:
source-folder = src;../other_project/src
Agregar ;
lista de fuentes separadas para tus ant.properties
(no olvides incluir src
defecto también):
source.dir=src-other;src
Arriba funciona bien con Android SDK Tools Revisión 20.0.3+ (Objetivo del proyecto: Android 2.2+, nivel de API: 8+).
No puedo comentar porque no tengo suficiente reputación, pero si agregar una carpeta de origen funciona con respuestas anteriores, falla más adelante cuando se crea el archivo 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 parte defectuosa está en la construcción del contenedor que usa source.absolute.dir como filset que no es válido para hormiga.
Pero no tengo ninguna solución por ahora y no entiendo por qué otros han logrado hacerlo funcionar ... (También estoy usando sdk r20)
Al menos en versiones posteriores de las herramientas de compilación, el problema es que el valor puesto en esta propiedad pasa a un <property name="source.absolute.dirs" location="source.dirs"/>
. El atributo de location
no sabe cómo tratar las rutas separadas por puntos y coma y dos puntos.
La solución es muy simple, solo usa:
source.absolute.dirs=src1:src2:src3
etc., a diferencia de:
source.dirs=src1:src2:src3
aquí está la solución:
actualice su build.xml para más de una fuente.dir
https://.com/a/14786100/2732600