2012-04-25 7 views
5

Ich habe einen Quellcode aus einer Bibliothek für Android heruntergeladen, kompiliert und ich habe eine .jar-Datei, die ich in mein Projekt aufgenommen und ich habe versucht, es zu benutzen, aber ich bekomme immer einen java.lang.NoClassDefFoundError, ich habe festgestellt, dass es in der JAR-Datei keine R $ XXX-Dateien gibt, ich habe diesen Beitrag gelesen: Android Library Import delete R und habe die Lösungen ausprobiert, aber keiner hat für mich funktioniert.java.lang.NoClassDefFoundError mit allen R-Klassen bei der Verwendung von Android-Bibliothek

Ich habe meine eigene einfache Bibliothek gemacht und ich habe gesehen, dass entweder die R-Dateien nicht im Jar enthalten sind, ich muss die .class-Dateien manuell mit winrar hinzufügen, aber ich denke, ich vermisse etwas Einfaches, ich benutze Eclipse mit ADT.

Vielen Dank an alle

Antwort

7

Wenn Sie JAR-Dateien zu schaffen sind, dann sollten Sie nicht r.java, manifeast Datei in der JAR-Datei enthalten.

Da das Jar während Compliation nicht eingehalten wird und keine statische ganze Zahl während der Kompliationszeit erstellt wird.

In Android haben wir Android LIbrary, die Android-Projekt ähnelt, aber in anderen Projekten enthalten sein kann.

Und wenn Sie noch JAR-Datei benötigen, dann halten Sie einfach Klassen-Dateien in jar enthalten alle Ihre Ressource enthalten in der Anwendung und von Java-Dateien können Sie den folgenden Code verwenden, um die Ressourcen während der Laufzeit beziehen.

Sie müssen getResurseIdByName (getPackageName(), "Zeichen", "Symbol") anstelle von R.drawable.icon in Ihrem Code verwenden. Unten ist der Code für 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; 
    }