非导出活动:在模拟器上启动;手机上的安全异常

问题描述 投票:0回答:2

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

如果我尝试使用

adb
在手机上启动它:

adb shell am start -n "packagename/activityname"

我收到错误:

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

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

android android-activity android-emulator adb root
2个回答
5
投票

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

模拟器实例默认以 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
用户拥有访问应用程序沙箱的“权限”。


0
投票

是否可以以某种方式限制它?那么该应用程序不会关心来自第三方应用程序的活动请求吗?

© www.soinside.com 2019 - 2024. All rights reserved.