在Android上的JAR中使用Java反射机制

时间:2017-01-05 09:03:18

标签: android reflection

在我的AndroidStudio项目中,我想使用一个JAR库,它使用反射机制动态加载一个类并运行它的方法。 但是,它无法加载课程而我获得@Entity @Table(name = "Users") public class User { @Id @GeneratedValue(generator = "increment") @GenericGenerator(name = "increment", strategy = "increment") private int UserId; private String alias; private String email; @OneToOne(fetch = FetchType.LAZY) private Person person; @OneToMany private List<Role> roles; public User() { } // constructor, getters, setters... }

当我尝试从活动中加载类时 - 它可以工作。 它只在系统尝试从库中加载类时失败。 更重要的是,库无法加载与库一起使用的类,从而导致相同的错误。 此外,我无法从库中加载类,甚至从活动中加载。 该类加载如下:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jcrdb");
em = entityManagerFactory.createEntityManager();

抛出的异常如下所示:

ClassNotFoundException

2 个答案:

答案 0 :(得分:1)

好的,我已经弄清楚了。 问题在于使用getSystemClassLoader。 代替:

Class<?> actionClass = Class.forName(className,true,ClassLoader.getSystemClassLoader());

我用过

Class<?> actionClass = Class.forName(className);

它有效。 但是,我仍然不能完全清楚为什么这两种方法都适用于桌面环境,只有第二种方法适用于Android。

答案 1 :(得分:0)

很明显,原因是您使用的jar ClassLoader不包含要加载的类。因此,要解决此问题,您必须调用您的应用ClassLoader