Android 设置应用程序如何启动应用程序';什么是非出口活动?

Android 设置应用程序如何启动应用程序';什么是非出口活动?,android,android-permissions,android-source,android-security,Android,Android Permissions,Android Source,Android Security,Android N允许您将自己的活动链接到应用程序的页面中 设置。只需为android.intent.action.APPLICATION\u首选项添加。Android N的设置应用程序将在您的应用程序中查找 有那个。如果设置找到一个,它将添加一个档位 “设置”中应用程序页面的图标,如果用户轻触该设备,则 将被带到您指定的活动 我担心安全问题,所以我提出申请,寻找一个我们可以与android:permission一起使用的权限,以允许设置启动我们的活动,但不允许其他应用启动我们的活动(例如,WR

Android N允许您将自己的活动链接到应用程序的页面中 设置。只需为
android.intent.action.APPLICATION\u首选项添加
。Android N的设置应用程序将在您的应用程序中查找 有那个
。如果设置找到一个,它将添加一个档位 “设置”中应用程序页面的图标,如果用户轻触该设备,则 将被带到您指定的活动

我担心安全问题,所以我提出申请,寻找一个我们可以与
android:permission
一起使用的权限,以允许设置启动我们的活动,但不允许其他应用启动我们的活动(例如,
WRITE\u SECURE\u Settings

克蒂接着指出。令我大吃一惊的是,这是可行的

设置应用程序如何启动标记为未导出的活动

我可以肯定地看到有一个权限控制着这一切。然而,快速阅读设置应用程序的清单(,分支)并没有发现任何明显的问题

因此:

  • 是否有允许应用启动另一个应用的非导出组件的权限?如果是,是哪一个

  • 如果没有,设置是如何实现的


我猜清单中没有任何内容允许应用程序调用导出的活动。我相信它实现这一点的方法是在设置应用程序的Android.mk文件中设置
LOCAL\u PRIVILEGED\u MODULE:=true
。此标志将授予应用程序系统级权限,并在操作系统编译期间将其置于
system/priv-app/
目录中


如果您查看
frameworks/base/core/java/android/app/ActivityManager.java
方法
checkComponentPermission
,您可以看到,如果UID是系统的UID,则无论导出的设置如何,都会授予组件权限。

您在这里回答了类似的问题:@Shaishav:当它在相关主题上时(使用
保护活动),它并没有解决我在这里提出的问题。我相信它是基于设置应用程序的UID的概念。我不是100%相信
checkComponentPermission()
是做出决定的地方,因为我不希望SDK类决定是否允许您启动活动。@Commonware什么意思-
我不希望SDK类决定是否允许您启动活动
?您会期望什么?@Vikram:我会我们希望它是在系统服务(
ActivityManagerService
?)或类似的内容中确定的。现在,它们可能使用相同的
checkComponentPermission()
SDK中的方法。我同意这有点奇怪,可以在其他地方确定。我做了一些挖掘,似乎AOSP的其他区域确实调用了
ActivityManager
checkComponentPermission
。例如
ActivityManager服务
,它有确切的方法,但将逻辑委托给
ActivityManager
@commonware我明白你的意思。它用
@hide
注释,这告诉我它不是供公众消费的,它应该是
ActivityManager服务的一部分,这反过来又依赖于
ActivityManager.checkComponentPermission(…)
。奇怪的是,Bobbake4的答案看起来是正确的。