我的项目中有一个非导出活动。
如果我尝试使用
adb
在手机上启动它:
adb shell am start -n "packagename/activityname"
我收到错误:
java.lang.SecurityException:
Permission Denial: starting Intent { ... } from null (...) not exported from uid ...
但是,如果我在模拟器上运行相同的命令,那么一切都会正常。怎么来的?
但是,如果我在模拟器上运行相同的命令,那么一切都会正常。怎么来的?
模拟器实例默认以 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
所有者相反。尽管 root
属性设置为
android:exported
,但 false
用户拥有访问应用程序沙箱的“权限”。
是否可以以某种方式限制它?那么该应用程序不会关心来自第三方应用程序的活动请求吗?