owa*_*are 5 android noclassdeffounderror
我从android下载了一个源代码,编译了它,我得到了一个.jar文件,我包含在我的项目中,我尝试使用它但是我总是得到一个java.lang.NoClassDefFoundError,我注意到在jar文件中有没有R $ XXX文件,我读过这篇文章:Android库导入删除R并尝试了解决方案,但没有一个对我有用.
我创建了自己的简单库,我也看到了,R文件不包含在jar中,我必须使用winrar手动添加.class文件,但我想我错过了一些简单的东西,我正在使用ADT的eclipse.
谢谢大家
如果要创建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)
| 归档时间: |
|
| 查看次数: |
5150 次 |
| 最近记录: |