使用android库时,所有R classess的java.lang.NoClassDefFoundError

owa*_*are 5 android noclassdeffounderror

我从android下载了一个源代码,编译了它,我得到了一个.jar文件,我包含在我的项目中,我尝试使用它但是我总是得到一个java.lang.NoClassDefFoundError,我注意到在jar文件中有没有R $ XXX文件,我读过这篇文章:Android库导入删除R并尝试了解决方案,但没有一个对我有用.

我创建了自己的简单库,我也看到了,R文件不包含在jar中,我必须使用winrar手动添加.class文件,但我想我错过了一些简单的东西,我正在使用ADT的eclipse.

谢谢大家

Sha*_*wal 8

如果要创建jar文件,则不应在jar文件中包含r.java,manifest文件.

因为jar在compliation期间不会被编译,并且在compliation期间不会创建任何静态整数.

在android中我们有Android LIbrary,它类似于android项目但可以包含在其他项目中.

如果你仍然需要jar文件,那么只需在jar中保存类文件,包括应用程序中包含的所有资源,从java文件中,您可以使用下面的代码在运行时引用资源.

您必须在代码中使用getResourseIdByName(getPackageName(),"drawable","icon")而不是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;
    }
Run Code Online (Sandbox Code Playgroud)