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

Posted 铭久

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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     }

 

以上是关于Android支持Split Apks后,如何获得指定包名下的所有类的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅解决:The currently selected variant “debug“ uses split APKs, but none of the 1 split...

我的Android进阶之旅解决:The currently selected variant “debug“ uses split APKs, but none of the 1 split...

在模拟器上运行Android项目时报错:DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs

Android:从 Android 代码中获取 APKs minSdkVersion [重复]

无法通过 adb 安装 .apks

com.android.ddmlib.InstallException: Unable to upload some APKs?