Android O SYSTEM_UID应用无法使用FileProvider问题小结

    去年上传了关于7.0拍照剪裁的demo,想想已经一年时间过去了,今年适配Android O,合代码后遇到了Permission Denial: opening provider android.support.v4.content.FileProvider.....from uid 1000问题,百思不得其解,我把去年的Demo拉下来后放到8.0上使用,发现demo可以正常运行,我本地的代码无法运行,一拍照或者剪裁就崩溃,很奇怪,之后各种复制黏贴,最后把demo上的代码 放到了公司代码里,发现还是崩溃。。。我都要崩溃了,直到发现了不一样的地方。

sharedUserId="android.uid.system", 去掉了这句系统应用后,代码可以正常运行了,这引起了我的好奇,查看源码追踪到了

ActivityManagerService中,在checkGrantUriPermissionLocked()方法中,找到了原因,代码如下:

Android O SYSTEM_UID应用无法使用FileProvider问题小结

这谷歌真是无语了,,,对权限的把控越来越严了

文件位置:frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java,修改了frameworks后,一切就OK了,记录下,挺有意思的一个Bug,花了好几天的时间。。

修改如下:

Android O SYSTEM_UID应用无法使用FileProvider问题小结