android6.0系统缺少com.android.internal.policy.PolicyManager导致无法获取LayoutInflater实例问题
2016-05-26 11:48
519 查看
问题出现原因:
插件技术动态加载View需要实例化一个LayoutInflater,但6.0以后com.android.internal.policy.PolicyManager被去除,导致插件view无法被创建,为了能让我的app能够在6.0系统上运行,我必须解决掉这个bug解决办法:
搜素源码找到这个类:https://android.googlesource.com/platform/frameworks/base/+/android-6.0.1_r25/core/java/com/android/internal/policy/PhoneLayoutInflater.java
可以通过实例化它取得LayoutInflater,具体代码如下:
博客出处
policyClass = Class.forName("com.android.internal.policy.PhoneLayoutInflater"); Constructor<?> localConstructor = policyClass.getConstructor(new Class[]{Context.class}); mLayoutInflater = (LayoutInflater) localConstructor.newInstance(new Object[]{context});
如果你的项目需要经过com.android.internal.policy.PolicyManager获取windows
Class windowClass = Class.forName("com.android.internal.policy.PhoneWindow"); Constructor<?> localConstructor = windowClass.getConstructor(new Class[]{Context.class}); Window windows = (Window) localConstructor.newInstance(new Object[]{getApplicationContext()});//实例化Window,如果传的context不是Application的Context,就会奔溃 Field field = windowClass.getDeclaredField("mLayoutInflater"); field.setAccessible(true); mLayoutInflater = (LayoutInflater) field.get(windows);//取得Application的LayoutInflater,而不是插件的LayoutInflater //往windows设置插件的LayoutInflater policyClass = ReflectUtil.getClass("com.android.internal.policy.PhoneLayoutInflater"); Constructor<?> policyLocalConstructor = policyClass.getConstructor(new Class[]{Context.class}); mLayoutInflater = (LayoutInflater) policyLocalConstructor.newInstance(new Object[]{this}); field.set(windows,mLayoutInflater);
参考源码:
https://android.googlesource.com/platform/frameworks/base/+/android-6.0.1_r25/core/java/com/android/internal/policy/PhoneWindow.java
热更新及插件技术实践
一款插件技术和热修复技术集一身的app:百宝工具箱如果需要源码,请联系我
搜索到一些有趣的东西:
5.1.1到6.0源码改动列表android全套源码,更新到6.0.0
android全套源码,更新到6.0.0,百度下载地址
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories