我的项目中有非导出活动。
如果我尝试使用adb
在手机上启动它:
adb shell am start -n "packagename/activityname"
我收到错误:
java.lang.SecurityException:
Permission Denial: starting Intent { ... } from null (...) not exported from uid ...
但是,如果我在模拟器上运行相同的命令,那么一切正常。怎么来的?
答案 0 :(得分:3)
但是,如果我在模拟器上运行相同的命令,那么一切正常。怎么来的?
默认情况下,模拟器实例以root身份运行,这意味着与非root设备相比,更多系统进程具有root权限。
考虑ps
命令输出grep
- 编辑adbd
和sh
(分别为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
所有者形成对比。尽管android:exported
属性设置为root
,false
用户仍有“权限”来访问您应用的沙箱。