最近在写一个android应用,由于针对不同机型功能很不同,为了隔离变化,希望将各项功能插件化,通过编译开关来控制不同版本的功能,而不是在代码中通过逻辑来判断。
我想了一个办法,用表驱动的方法,结合插件类的静态代码块自注册。但这就需要找到固定包下的所有类,然后主动初始化这些类,执行静态代码块。下面是运行时找出一个包下所有类的方法:
private static String[] getC<span style="font-size:18px;">lasses</span>FromPackage(Context context<span style="font-size:18px;">,String packageName</span>) {
ArrayList<String> classes = new ArrayList<String>();
try {
DexFile df = new DexFile(context.getPackageCodePath());
Enumeration<String> entries = df.entries();
while (entries.hasMoreElements()) {
String className = (String) entries.nextElement();
if (className.contains(packageName)) {
classes.add(className);
}
}
} catch (IOException e) {
e.printStackTrace();
} return classes.toArray(new String[]{});
}