public static List<Class<?>> scan(Context ctx, String entityPackage) {
List<Class<?>> classes = new ArrayList<Class<?>>();
try {
PathClassLoader classLoader = (PathClassLoader) Thread
.currentThread().getContextClassLoader();
DexFile dex = new DexFile(ctx.getPackageResourcePath());
Enumeration<String> entries = dex.entries();
while (entries.hasMoreElements()) {
String entryName = entries.nextElement();
if (entryName.contains(entityPackage)) {
Class<?> entryClass = Class.forName(entryName, true,classLoader);//疑问:Class.forName(entryName);这种方式不知道为什么返回null,哪位大神知道原因,请指点一下小弟吧 感激不尽
DatabaseTable annotation = entryClass.getAnnotation(DatabaseTable.class);
if (annotation != null) {
classes.add(entryClass);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return classes;
}