Java Android Class.forName可以';t使用默认类装入器装入类
我正在用LibGDX开发一款android游戏,有很多类是动态加载的,在apk的发行版中,我无法使用以下方法加载它们:Java Android Class.forName可以';t使用默认类装入器装入类,java,android,release,dex,Java,Android,Release,Dex,我正在用LibGDX开发一款android游戏,有很多类是动态加载的,在apk的发行版中,我无法使用以下方法加载它们: Class.forName(className); 我得到了ClassNotFoundException,分析了apk,我看到dex文件中的类名简化为一个字母,我想这就是我无法加载的原因。LibGDX项目有两部分:core和android,第一部分完成我想要的加载,没有android API dep,他确实是android项目的dep,他将在活动中运行并使用核心的功能 在an
Class.forName(className);
我得到了ClassNotFoundException
,分析了apk,我看到dex文件中的类名简化为一个字母,我想这就是我无法加载的原因。LibGDX项目有两部分:core和android,第一部分完成我想要的加载,没有android API dep,他确实是android项目的dep,他将在活动中运行并使用核心的功能
在android项目中,我可以在onCreate中使用以下示例代码加载类:
try {
Class clazz = Class.forName("game.ui.TreasureChest");
TreasureChest chest = (TreasureChest)clazz.newInstance();
chest.update(0.0f);
}catch(Exception ex){
Log.v("loadClassses", "exception: " + ex.getMessage());
}
这段代码也不例外,显然这两个项目使用不同的类加载器,android版本专门用于这个dex文件。
此代码不起作用:
Class clazz = Class.forName("game.ui.TreasureChest", true, this.getClass().getClassLoader());
为什么会这样?
在android文档中,据说第一个示例与第二个示例等效,因此不应该有例外
还有另一种方法可以加载这些类吗?
我想在一个界面中,android项目将实现按名称加载给定类,但forName方法的两种变体在界面中都不起作用。我找到了问题的根源,一段时间后,我在查看gradle构建文件时,看到了这一行:
minifyEabled true
我很久以前就把它放在那里了,这是minifed名称的原因,然后类加载器找不到类,删除它使一切正常