Android支持Split Apks后,如何获得指定包名下的所有类

【Android支持Split Apks后,如何获得指定包名下的所有类】大道之行,天下为公。这篇文章主要讲述Android支持Split Apks后,如何获得指定包名下的所有类相关的知识,希望能为你提供帮助。
从android5.0以后,支持多个apk动态部署,这导致以前通过单一apk获取包路径下的所有类的方法失效,不过稍微修改一下原先的代码就可以,代码如下

1 public static final List< Class< ?> > getClassesFromPackage(Context ctx, String pkgName) { 2List< Class< ?> > rtnList = new ArrayList< Class< ?> > (); 3String[] apkPaths = ctx.getApplicationInfo().splitSourceDirs; // 获得所有的APK的路径 4DexFile dexfile = null; 5Enumeration< String> entries = null; 6String name = null; 7for (String apkPath : apkPaths) { 8try { 9dexfile = new DexFile(apkPath); // 获得编译后的dex文件 10entries = dexfile.entries(); // 获得编译后的dex文件中的所有class 11while (entries.hasMoreElements()) { 12name = (String) entries.nextElement(); 13if (name.startsWith(pkgName)) {// 判断类的包名是否符合 14rtnList.add(Class.forName(name)); 15} 16} 17} catch (ClassNotFoundException | IOException e) { 18} finally { 19try { 20if (dexfile != null) { 21dexfile.close(); 22} 23} catch (IOException e) { 24} 25} 26} 27return rtnList; 28}

 

    推荐阅读