码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2019-03-24 21:53:47      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:split   with   stat   包名   contex   exception   ica   android   tap   

从Android5.0以后,支持多个apk动态部署,这导致以前通过单一apk获取包路径下的所有类的方法失效,不过稍微修改一下原先的代码就可以,代码如下

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

 

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

标签:split   with   stat   包名   contex   exception   ica   android   tap   

原文地址:https://www.cnblogs.com/janken/p/10588169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!