非出口活动:在模拟器上发布; 手机上的SecurityException

Ole*_*err 5 android root adb android-emulator android-activity

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

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

adb shell am start -n "packagename/activityname"
Run Code Online (Sandbox Code Playgroud)

我收到错误:

java.lang.SecurityException:
Permission Denial: starting Intent { ... } from null (...) not exported from uid ...
Run Code Online (Sandbox Code Playgroud)

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

Oni*_*nik 5

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

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

考虑ps命令输出grep-ed 与adbdsh(即分别为adb shell ps | grep 'adbd'adb shell ps | grep 'sh')。您可能会看到以下内容(当然,在您的设备/模拟器上有不同的PID和):PPID

sh进程及其父进程在模拟器上adbd由所有者拥有,这与非 root 设备上的所有者root相反。尽管属性设置为,shellroot用户拥有访问您应用程序沙箱的“权限” 。android:exportedfalse