¿Cómo hago referencia a los archivos jar externos en un directorio común (no libs) para construir el proyecto android usando hormiga?
Me gustaría construir varios proyectos de android que hacen referencia a los mismos archivos jar utilizando ant. No quiero copiar el archivo jar en cada directorio libs del proyecto (debido a cómo está configurado el árbol de control de origen). Las respuestas que encuentro aquí dicen "ponerlas en el directorio libs" que no soluciona este problema.
Por lo tanto, la pregunta es: ¿cómo configuro los scripts de compilación de hormigas android para hacer referencia a un jar común en un directorio separado fuera del proyecto (no en "libs")?
- Android cómo exportar jar con recursos?
- ¿Se puede utilizar Android Studio para crear JARs compatibles con Unity-plugin de proyectos de Biblioteca?
- Cómo incluir dependencias de maven remoto en una biblioteca de Android
- Cómo mantener un archivo jar externo, pero todavía uso de sus clases en mi proyecto de Android?
- No hay carpeta de bundle de liberación después de actualizar Android Studio
- Java.lang.NoClassDefFoundError: com.facebook.android.R $ error de diseño al usar facebook jar sdk
- Android Studio. No se puede incluir correctamente la biblioteca externa
- Cómo convertir el archivo jar en apk?
- Android-support-v4.jar no se importa correctamente en Eclipse
- Cómo construir jar para el proyecto de la biblioteca de Android en Intellij Idea sin contenido innecesario
- No se pudo encontrar la clase 'org.apache.http.entity.mime.content.Filebody', referenciada desde el método
- Excluyendo archivos .class de Gradle dependecy
- Integración de otra aplicación android dentro de mi propia aplicación
En el sdk, hay archivos de hormigas en tools/ant
. En main_rules.xml
, puede encontrar la siguiente sección de código:
<!-- Directory for the third party java libraries --> <property name="jar.libs.dir" value="libs" /> <property name="jar.libs.absolute.dir" location="${jar.libs.dir}" /> <!-- create a path with all the jar files, from the main project and the libraries --> <path id="jar.libs.ref"> <fileset dir="${jar.libs.absolute.dir}" includes="*.jar" /> <path refid="project.libraries.jars" /> </path>
Así es como el código de construcción de la hormiga determina de dónde sacar los tarros. Podría sobrecargar el valor de jar.libs.dir
en su build.properties ya que se lee antes de esta sección y sobrecargaría el valor. Señalando que en un directorio común que va a utilizar hará lo que está sugiriendo. Puede que necesite jugar con él para que funcione de la manera que desee.
Una advertencia es que no estoy seguro si esto afectará negativamente otras actividades del ciclo de vida de la estructura.
Parece que las nuevas herramientas de sdk hacen esto más fácil de lograr. Tengo una carpeta de librería maestra que comparten todos mis proyectos de Android y acabo de añadir esto al archivo ant.properties
para que busque un nivel para esas librerías.
jar.libs.dir=../libs
Según la pregunta aquí y mi respuesta tomada desde aquí , la solución ofrecida no funciona a partir de ahora. Hasta que el error archivado sea fijo. La solución, como se menciona en la respuesta referenciada, se copia a continuación.
Añado esto a mi plantilla de custom_rules.xml
y parece estar trabajando muy bien. Supongo que es sólo unas pocas líneas más que agregar ruta al archivo ant.properties
hasta que obtengamos una solución mejor.
<target name="-pre-compile"> <path id="project.all.jars.path"> <path path="${toString:project.all.jars.path}"/> <fileset dir="${jar.libs.dir}"> <include name="*.jar"/> </fileset> </path> </target>
Si usas Linux, solo haz enlaces simbólicos de los archivos jar externos, luego libs
en libs
. Hormiga funcionará bien.
Editado
Asegúrese de colocar todos los enlaces simbólicos directamente en libs
(no en subdirectorios). Estoy seguro de que esto puede ser re-config by ant script. Pero no estoy familiarizado con las hormigas 🙂
- Dagger 2 – módulos de diferentes componentes
- Error Gradle – No se puede llamar IncrementalTask.taskAction () en la tarea ': project: mergeDebugResources'