2012-04-25 165 views
5

,當我從網上下載的Android庫中的源代碼,所有的R類新,編譯它,我有一個.jar文件,包括我到我的項目,我試圖使用它,但我總是得到java.lang.NoClassDefFoundError,我注意到,在jar文件有沒有R $ XXX的文件,我看到這篇文章:Android Library Import delete R並試圖解決方案,但沒有爲我工作。java.lang.NoClassDefFoundError使用的Android庫

我做了我自己的簡單庫,我看到,要麼R文件不包括在jar中,我必須使用winrar手動添加.class文件,但我認爲我缺少一些簡單的東西,我正在使用eclipse與ADT。

感謝大家

回答

7

如果要創建jar文件,那麼你不應該包括r.java,manifeast文件中的jar文件。

因爲compliation期間不會得到遵守,並不會在罐子創建期間compliation時間任何靜態整數。

在Android中,我們有Android LIbrary這是類似Android的項目,但可以包含在其他項目。

如果你仍然需要有jar文件,然後自顧自地類文件的jar包括在應用程序中所有的資源包含從java文件,你可以使用下面的代碼在運行時參考的資源。

,您必須使用getResourseIdByName(getPackageName(), 「繪製」, 「圖標」)在你的代碼,而不是R.drawable.icon。 以下是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; 
    } 
相關問題