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

从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     }

 

转载于:https://www.cnblogs.com/janken/p/10588169.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值