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

时间:2016-05-06 14:47:58

标签: android android-activity android-emulator adb root

我的项目中有非导出活动

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

adb shell am start -n "packagename/activityname"

我收到错误:

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

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

1 个答案:

答案 0 :(得分:3)

  

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

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

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

  • 非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属性设置为rootfalse用户仍有“权限”来访问您应用的沙箱。