studio - Cómo agregar bibliotecas jar externas a un proyecto de Android desde la línea de comando
insertar librerias en android studio (9)
Estoy tratando de construir un proyecto de Android que tenga algunas dependencias. Los archivos jar están en el directorio lib /. Puedo construir el proyecto agregando esos archivos jar a mi classpath, pero por supuesto Force Closes en el emulador porque esas bibliotecas no están presentes.
Estoy haciendo esto desde la línea de comando con hormiga ( no en eclipse). ¿Cómo puedo hacer que incluya esas bibliotecas en la aplicación desde la línea de comandos?
Al compilar, haz esto:
javac -encoding ascii -target 1.5 -d bin/classes /
-bootclasspath $SDKDIR/android.jar src/some/project/* -classpath=libs/*.jar
Y, cuando está generando el bytecode para Dalvik:
dx --dex --output=bin/classes.dex bin/classes libs/*.jar
Además, cuando está empaquetando el archivo APK:
apkbuilder bin/something.apk -z bin/projectname.ap_ /
-f bin/classes.dex -rf src -rj libs
Supongo que estás usando Linux ... en Windows será casi lo mismo.
El ejemplo anterior no funciona bien. No puede sobrescribir el proyecto.all.jars.path en línea. Lo siguiente es un ejemplo de trabajo:
<target name="-pre-compile">
<!-- HACK to add the android-support-v4.jar to the classpath directly from the SDK -->
<echo>ORIGINAL jars.path : ${toString:project.all.jars.path}</echo>
<path id="project.all.jars.path.hacked">
<path path="${toString:project.all.jars.path}"/>
<path path="${sdk.dir}/extras/android/support/v4/android-support-v4.jar"/>
</path>
<path id="project.all.jars.path">
<path path="${toString:project.all.jars.path.hacked}"/>
</path>
<echo>HACKED jars.path : ${toString:project.all.jars.path}</echo>
</target>
La propiedad jar.libs.dir
es un solo directorio. No es como una CLASSPATH que es una lista separada por dos puntos / coma y coma. La forma de tener múltiples directorios en su jar.libs.dir es no configurarlo directamente; deje que sea predeterminado para libs
y vaya a libs y cree los enlaces suaves requeridos a los archivos .jar que necesite.
La respuesta de Jay K estaba en el momento de escribir, pero ahora el SDK ha cambiado, y esta es la nueva forma de hacerlo:
Agregue la siguiente línea a ant.properties
:
jar.libs.dir=lib
Probado, funciona donde external.libs.dir no funciona.
Eso cambió en diciembre de 2010 y nuevamente en octubre de 2011.
Respondiendo mi propia pregunta:
Creé un archivo "build.properties" y agregué la línea
external.libs.dir=lib
Fue una adivinación afortunada, realmente.
Si almacena sus bibliotecas en $ {basedir} / libs, el script ant será capaz de encontrarlas.
Miré el script actual de ant ($ {sdk.dir} /tools/ant/build.xml) y define jar.libs.dir como "libs".
FYI, el guión de la hormiga está bien documentado, así que es fácil de seguir.
Si mueves libs, asegúrate de editar tus archivos .classpath para evitar que los usuarios de eclipse sufran innecesariamente.
Solo para referencia futura: ahora hay un error en el SDK que impide el uso de jar.libs.dir: http://code.google.com/p/android/issues/detail?id=33194
Una solución simple para usar jar.libs.dir nuevamente (mientras se espera que el error se solucione), es agregar este destino en el archivo build.xml:
<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>
poner jars en el directorio ${YOUR_PROJECT}/libs
external.libs.dir=lib
después de 2 horas de buscar esta respuesta, esto funcionó para mí. El archivo jar en mi directorio libs finalmente compila Y se incluye con el APK.