Agregar una biblioteca / JAR a un proyecto de Android Eclipse

130

Esta es una pregunta de dos partes sobre cómo agregar una biblioteca de terceros (JAR) a un proyecto de Android en Eclipse.

La primera parte de la pregunta es, cuando trato de agregar un JAR (biblioteca) de terceros a mi proyecto de Android, primero aparece el problema de

Error al analizar XML: prefijo independiente

porque estoy tratando de usar una clase de ese JAR (y necesito el prefijo definido de alguna manera). ¿Que esta pasando?

En segundo lugar, (después de arreglar eso, la respuesta se da a continuación), mi aplicación no funciona en Android y descubro a través del depurador (LogCat) que la clase que intento consumir no existe.

Causado por: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

¿Por qué, cuando no obtengo un error de compilación o enlazador en Eclipse, tiene este problema en el emulador?

Estas dos preguntas son retóricas porque las responderé yo mismo a continuación. Otras publicaciones en este foro se acercan al problema y en otras partes hay discusión, pero siento que puedo ser más explícitamente útil para que venga el próximo tipo.

Russ Bateman
fuente

Respuestas:

316

Ahora para el problema de clase faltante.

Soy un desarrollador de Eclipse Java EE y he tenido la costumbre durante muchos años de agregar bibliotecas de terceros a través del mecanismo de "Biblioteca de usuario" en Build Path. Por supuesto, hay al menos 3 formas de agregar una biblioteca de terceros, la que yo uso es la más elegante, en mi humilde opinión.

Sin embargo, esto no funcionará para Android, cuyo Dalvik "JVM" no puede manejar una clase ordinaria compilada en Java, pero debe convertirla a un formato especial. Esto no sucede cuando agrega una biblioteca de la forma en que no lo haré.

En su lugar, siga las instrucciones (ampliamente disponibles) para importar la biblioteca de terceros, luego agréguela utilizando Build Path (que Eclipse lo hace conocido para fines de compilación). Aquí está el paso a paso:

  1. Descargue la biblioteca en su sistema de desarrollo de host.
  2. Cree una nueva carpeta, libs , en su proyecto Eclipse / Android.
  3. Haga clic con el botón derecho en libs y elija Importar -> General -> Sistema de archivos, luego Siguiente, Examinar en el sistema de archivos para encontrar el directorio padre de la biblioteca (es decir, dónde lo descargó).
  4. Haga clic en Aceptar, luego haga clic en el nombre del directorio (no en la casilla de verificación) en el panel izquierdo, luego marque el JAR relevante en el panel derecho. Esto pone la biblioteca en su proyecto (físicamente).
  5. Haga clic con el botón derecho en su proyecto, elija Build Path -> Configure Build Path, luego haga clic en la pestaña Bibliotecas, luego agregue JAR ..., navegue a su nuevo JAR en el directorio libs y agréguelo. (Por cierto, este es el momento en que su nuevo JAR se convierte para usar en Android).

NOTA

El paso 5 puede no ser necesario, si la biblioteca ya está incluida en su ruta de compilación. Solo asegúrese de que exista primero antes de agregarlo.

Lo que has hecho aquí logra dos cosas:

  1. Incluye un JAR convertido por Dalvik en su proyecto de Android.
  2. Hace que las definiciones de Java estén disponibles para Eclipse con el fin de encontrar las clases de terceros al desarrollar (es decir, compilar) el código fuente de su proyecto.
Russ Bateman
fuente
Russ, probablemente deberías comenzar otra pregunta por separado. Esta "respuesta" parece un poco extraña sentada aquí.
Paul Gregoire
3
Entonces, reescribí partes de la pregunta un poco. He resistido la tentación de hacer lo fácil (lo que sugieres aquí) porque realmente creo que ambos problemas surgen al tratar de agregar una biblioteca de terceros y estoy apostando a que cualquiera que tenga el segundo problema probablemente haya tenido El primero también. Gracias.
Russ Bateman
Desearía que hubiera algo más explícito sobre esto en los documentos formales de Android (aún no me he topado con él) y otras respuestas en otros foros se acercan, pero nunca superan el problema. Tenga en cuenta que en BlackBerry, este mismo problema es una gran pesadilla sin que nadie brinde información confiable sobre cómo resolverlo; no estoy seguro de qué haré allí.
Russ Bateman el
2
Hola @RussBateman, probé los pasos que mencionaste anteriormente y pude incluir con éxito el archivo jar de la biblioteca en mi proyecto de Android, por lo que las clases de la biblioteca fueron accesibles para mi proyecto en el momento de la compilación, pero cuando ejecuto el proyecto, aparece un error en mi consola: "La conversión al formato Dalvik falló con el error 1" ... ¡y mi proyecto no se lanzaría!
Zeba
En ciertas circunstancias, esto no funciona ... No recuerdo exactamente lo que hice, eliminé la carpeta libs, la leí ... ahora hice todo lo que dijiste, agregué libs, importé el jar, agregué a la ruta de compilación ... . errores de compilación se han ido, pero aún así obtener una excepción de tiempo de ejecución que no se encuentra la clase :(
Ixx
20

Asegúrese de que sus jarras de terceros estén en la carpeta "libs" de sus proyectos y se colocarán en el archivo .apk cuando empaquete su aplicación. Es posible que vea errores de tiempo de ejecución en el dispositivo si algo en el jar no es compatible, pero aparte de eso, he tenido un gran éxito con esto.

Paul Gregoire
fuente
1
Todo se trata de experiencia, he tenido el mismo problema antes :)
Paul Gregoire
Gracias señor, pero apesta ver que la carpeta libs necesita la copia de archivos Jar externos que ya tenemos en el repositorio de Maven o en otro lugar.
pide el
1
Lamentablemente, esto ya no funciona automáticamente, también debe indicarle a eclipse que incluya las bibliotecas en los archivos de paquete.
Neil Townsend
¿Cuándo cambió eso? Este es un gran cambio a lo que todos estamos acostumbrados.
Paul Gregoire
5

Configurar un proyecto de biblioteca

Un proyecto de biblioteca es un proyecto estándar de Android, por lo que puede crear uno nuevo de la misma manera que lo haría con un nuevo proyecto de aplicación.

Cuando crea el proyecto de biblioteca, puede seleccionar cualquier nombre de aplicación, paquete y establecer otros campos según sea necesario, como se muestra en la figura 1.

Luego, configure las propiedades del proyecto para indicar que se trata de un proyecto de biblioteca:

En el Explorador de paquetes, haga clic con el botón derecho en el proyecto de la biblioteca y seleccione Propiedades. En la ventana Propiedades, seleccione el grupo de propiedades "Android" a la izquierda y ubique las propiedades de la Biblioteca a la derecha. Seleccione la casilla de verificación "es Biblioteca" y haga clic en Aplicar. Haga clic en Aceptar para cerrar la ventana Propiedades. El nuevo proyecto ahora está marcado como un proyecto de biblioteca. Puede comenzar a mover el código fuente y los recursos, como se describe en las secciones a continuación.

koke
fuente
4

Si está utilizando la versión 22 de ADT, debe verificar las dependencias de Android y las bibliotecas privadas de Android en la pestaña Orden y Exportar en la ruta de compilación del proyecto

ajaykoppisetty
fuente
2

Primero, el problema del prefijo faltante.

Si consume algo en su archivo de diseño que proviene de un tercero, es posible que también necesite consumir su prefijo, algo como "droidfu:" que ocurre en varios lugares en la construcción XML a continuación:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

Esto sale del JAR, pero también necesitará agregar el nuevo "xmlns: droidfu"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

u obtienes el error de prefijo independiente. Para mí, esto fue un error al copiar y pegar todo el ejemplo proporcionado desde las páginas de la biblioteca de terceros.

Russ Bateman
fuente
1

Error al analizar XML: prefijo independiente

El recurso '/ playteddy / res' no existe.

Obtuve los dos errores anteriores y finalmente lo resolví.

Haga clic con el botón derecho en su proyecto -> propiedades -> ruta de compilación de Java -> googleadmobadsdk (selecciónelo y colóquelo en la parte superior), luego ejecuta y resuelve el problema. Se solucionó mi error de tiempo de ejecución.

sujan
fuente
0

Coloque la fuente en una carpeta fuera de su espacio de trabajo. Haga clic derecho en el explorador de proyectos y seleccione "Importar ..."

Importe el proyecto en su espacio de trabajo como un proyecto de Android. Intente construirlo y asegúrese de que esté marcado como un proyecto de biblioteca. También asegúrese de que esté construido con el soporte de la API de Google, de lo contrario obtendrá errores de compilación.

Luego, haga clic derecho en su proyecto principal en el explorador de proyectos. Seleccione propiedades, luego seleccione Android a la izquierda. En la sección de la biblioteca a continuación, haga clic en "Agregar".

La biblioteca mapview-globos ahora debería estar disponible para agregar a su proyecto.

Leander
fuente
0

Vaya a la ruta de compilación en eclipse, luego haga clic en ordenar y exportar, luego verifique la biblioteca / jar, y luego haga clic en el botón arriba para moverlo a la parte superior de la lista para compilarlo primero.

Sam Adamsh
fuente