android – 非导出活动:在模拟器上启动;手机上的SecurityException

前端之家收集整理的这篇文章主要介绍了android – 非导出活动:在模拟器上启动;手机上的SecurityException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我的项目中有一个非导出的活动.

如果我尝试使用adb在手机上启动它:

adb shell am start -n "packagename/activityname"

我收到错误

java.lang.SecurityException:
Permission Denial: starting Intent { ... } from null (...) not exported from uid ...

但是,如果我在模拟器上运行相同的命令,那么一切正常.怎么会?

最佳答案

But,if I run the same command on an emulator,then everything works Okay. How comes?

默认情况下,模拟器实例以root身份运行,这意味着与非root设备相比,更多系统进程具有root权限.

考虑使用adbd和sh grep-ed的ps命令输出(分别是adb shell ps | grep’adbd’和adb shell ps | grep’sh’).您可能会看到以下内容(当然,您的设备/模拟器上有不同的PID和PPID):

>非root设备

USER     PID   PPID  NAME
shell    166   1     /sbin/adbd
...
shell    15721 166   /system/bin/sh

>模拟器

USER     PID   PPID  NAME
root     1183  1     /sbin/adbd
...
root     2884  1183  /system/bin/sh

sh进程,其父进程adbd也是由root用户在仿真器上拥有,与非root用户设备上的shell所有者不同.并且root用户具有访问应用程序沙箱的“权限”,尽管android:exported属性设置为false.

猜你在找的Android相关文章