话说解决问题和研究问题是两码事
网上那个的加壳方案,
mProviderMap 在
235行 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/app/ActivityThread.java?av=f
在2.3 -4-4.2的手机上,获取到的这个map是空的 所以不会走到下面的循环里面去
但是4.4.4的上面他能获取到这个map里面有值的
而且他是这样是内容
[email protected](5355): [email protected]
但是在2.3-4.4.2的手机上 这个map是空的
这个map在前面的版本里是 HashMap 后面的是ArrayMap
要注意
所以在2.3-4.4.2的手机上不会进入map就没有那个 expected receiver of type android.content.ContentProvider, but got null 异常了
然而在4.4.4的手机上Map不为空,进入之后
有一个获取android.app.ActivityThread$ProviderClientRecord 的mLocalProvider 属性值 ,这个不知道为什么 在4.4.4的手机上就是空的
321行代码http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/app/ActivityThread.java#ActivityThread.ProviderClientRecord
需要处理一下
然后在源码里找了好久 因为4.4.4的上map里有1个值,第二个map循环出来取这个值的时候 mLocalProvider空了,我就去源码找了半天,结果未果
后来发现 那个mLoacalProvider可以为空的,但是这个map还是要循环完的,
最终我只是想 应该 android.app.ActivityThread$ProviderClientRecord 到这里获取的时候可能 应该里面还有一系列的操作 保证程序能运行起来
这个问题 一开始以为是buildtools的问题,从 19.0.0 一直试到23.0.2 但是发现不行,在公司的是4.4.2 家里的是4.4.4的手机上 纠结了好几天
后来发现偏偏我的手机和公司的测试机都是4.4 但是一个是4.4.4 一个是4.4.2 恰好我在公司试的好好的以为4.4的没问题, 在家里就不行了