Android支持Split Apks后,如何获得指定包名下的所有类
2024-09-01 03:26:03
从Android5.0以后,支持多个apk动态部署,这导致以前通过单一apk获取包路径下的所有类的方法失效,不过稍微修改一下原先的代码就可以,代码如下
public static final List<Class<?>> getClassesFromPackage(Context ctx, String pkgName) {
List<Class<?>> rtnList = new ArrayList<Class<?>>();
String[] apkPaths = ctx.getApplicationInfo().splitSourceDirs;// 获得所有的APK的路径
DexFile dexfile = null;
Enumeration<String> entries = null;
String name = null;
for (String apkPath : apkPaths) {
try {
dexfile = new DexFile(apkPath);// 获得编译后的dex文件
entries = dexfile.entries();// 获得编译后的dex文件中的所有class
while (entries.hasMoreElements()) {
name = (String) entries.nextElement();
if (name.startsWith(pkgName)) {// 判断类的包名是否符合
rtnList.add(Class.forName(name));
}
}
} catch (ClassNotFoundException | IOException e) {
} finally {
try {
if (dexfile != null) {
dexfile.close();
}
} catch (IOException e) {
}
}
}
return rtnList;
}
最新文章
- Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用
- 转载--改变ubuntu默认编码为GBK
- python-open文件处理
- acm pc^2的配置与使用
- C# 反射操作方法
- MySQL基础之第14章 存储过程和函数
- SSH无法连接服务器
- 2016.7.13abstract
- Jquery学习笔记:通过层次关系获取jquery对象
- iOS基础 - 数据库CoreData
- offsetHeight/Width clientHeight/Width scrollHeight/Width等高宽算法
- 【LCT+主席树】BZOJ3514 Codechef MARCH14 GERALD07加强版
- 开始学习 Backbone
- Mysql_连接字符串
- spark submit参数调优
- InfluxDB、grafana、collect部署监控(centos6.8)
- java中构造方法和普通方法的区别
- Limu:有关JavaScript的那些值得一看的书
- 2018.07.08 NOIP模拟 好数(线段树)
- extern函数声明(转)