2012-04-25 10 views
5

he descargado el código fuente de una biblioteca para android, recopiló y me dieron un archivo .jar, he incluido en mi proyecto y traté de usar, pero me siempre obtener una java.lang.NoClassDefFoundError, he notado que en el archivo jar no hay archivos de R $ XXX, leí este post: Android Library Import delete R y trató de las soluciones, pero ninguna funcionó para mí.java.lang.NoClassDefFoundError con toda classess R cuando se utiliza la biblioteca androide

Hice mi propia biblioteca simple y vi que, o bien, los archivos R no están incluidos en el contenedor, tengo que agregar los archivos .class manualmente usando winrar pero creo que me falta algo simple, estoy usando eclipse con ADT.

Gracias a todos los

Respuesta

7

Si va a crear archivos jar entonces no deben incluir r.java, manifeast archivo en el archivo jar.

Debido a que el frasco no conseguirá cumplido durante compliation y suele crear cualquier número entero estática durante el tiempo de compliation.

En androide que tienen Android LIbrary que es similar al proyecto androide, pero se puede incluir en otros proyectos.

Y si aún necesita tener el archivo jar, simplemente mantenga los archivos de clase en jar, incluya todo su recurso en la aplicación y desde los archivos java, puede usar el siguiente código para referir los recursos durante el tiempo de ejecución.

Debe usar getResourseIdByName (getPackageName(), "dibujable", "icono") en lugar de R.drawable.icon en su código. A continuación se muestra el código de getResourceIdByName ::

public int getResourseIdByName(String packageName, String className, String name) { 
      int id = 0; 
     try { 
      for (int i = 0; i < Class.forName(packageName + ".R").getClasses().length; i++) { 
       if(Class.forName(packageName + ".R").getClasses()[i].getName().split("\\$")[1].equals(className)) { 
        if(Class.forName(packageName + ".R").getClasses()[i] != null) 
         id = Class.forName(packageName + ".R").getClasses()[i].getField(name).getInt(Class.forName(packageName + ".R").getClasses()[i]); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (SecurityException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } catch (NoSuchFieldException e) { 
      e.printStackTrace(); 
     } 
     return id; 
    } 
Cuestiones relacionadas