最近在写一个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[]{}); }