加载WebView出现INTERACT_ACROSS_USERS_FULL

241 阅读2分钟

加载WebView出现INTERACT_ACROSS_USERS_FULL

记录一个让人极其无语的bug

在已经开发完整的项目中加入一个新的功能:在WebView中渲染Markdown文件

但是一引用布局就出错:java.lang.SecurityException: Permission Denial: getHistoricalProcessExitReasons asks to run as user 10 but is calling from uid u0a411; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS

Handling uncaught Java exception
java.lang.SecurityException: Permission Denial: getHistoricalProcessExitReasons asks to run as user 10 but is calling from uid u0a411; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS
	at android.os.Parcel.createExceptionOrNull(Parcel.java:3256)
	at android.os.Parcel.createException(Parcel.java:3240)
	at android.os.Parcel.readException(Parcel.java:3223)
	at android.os.Parcel.readException(Parcel.java:3165)
	at android.app.IActivityManager$Stub$Proxy.getHistoricalProcessExitReasons(IActivityManager.java:10495)
	at android.app.ActivityManager.getHistoricalProcessExitReasons(ActivityManager.java:4474)
	at WV.dI.c(chromium-TrichromeWebViewGoogle6432.aab-stable-672308633:3)
	at org.chromium.components.crash.browser.ProcessExitReasonFromSystem.b(chromium-TrichromeWebViewGoogle6432.aab-stable-672308633:19)
	at WV.MU.run(chromium-TrichromeWebViewGoogle6432.aab-stable-672308633:117)
Caused by: android.os.RemoteException: Remote stack trace:
	at com.android.server.am.UserController.handleIncomingUser(UserController.java:2860)
	at com.android.server.am.ActivityManagerService.getHistoricalProcessExitReasons(ActivityManagerService.java:11023)
	at android.app.IActivityManager$Stub.onTransact$getHistoricalProcessExitReasons$(IActivityManager.java:14364)
	at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5008)
	at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3027)

我是怎么也想不到我加载WebView会出现这种权限异常的错误,因为我并未对WebView做任何操作

<WebView
   android:id="@+id/webView"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
/>

为此,我排查了AndroidManifest.xml、build.grade,并未发现有和这个权限报错相关的问题,新建项目尝试加载WebView却没一点问题

仔细查看报错,说的是我使用userId为11的用户访问了什么系统内容?what???我使用adb查看用户信息,只有一个u0a411,id为0,id为11的用户是哪来的?

查了1天资料和博客,在一篇博客中看到了问题所在,原来是我在Application中写了一个公开的userId变量,用于全局访问的

img

kotlin为这个变量生成了getter方法,在Jvm中对应的应该就是getUserId(),然后WebView加载时 调用系统 chromium-TrichromeWebViewGoogle的相关系统文件时传递的userId应该是applicationContext中的getUserId,但是这个方法在我自定义的Application中被我重写了,emmmm,这也能蒙混过关???

所以,加载webView时会出现上述的错误,userId使用了应用中用户账户的Id

img

我真的不能理解,如果应用执行进程中的userId可以被这样修改,那不是会有很大的安全隐患吗?

修改名称为localUserId后问题解决,不重名就行