设置应用程序如何启动应用程序的未导出活动?

时间:2016-08-18 11:50:41

标签: android android-permissions android-source android-security

Android N可让您将自己的活动链接到应用页面中 设置。只需为<intent-filter>添加android.intent.action.APPLICATION_PREFERENCES即可。 Android N的“设置”应用会在您的应用中查找该活动 有那个<intent-filter>。如果设置找到一个,它将添加一个齿轮 图标到“设置”中的应用页面,如果用户点按了设备,则会显示 将被带到您指定的活动。

我担心安全性,所以我提交了an issue,寻找我们可以与android:permission一起使用的权限,以允许设置启动我们的活动,但不允许其他应用启动我们的活动(例如,WRITE_SECURE_SETTINGS)。

cketti然后指出you could just mark the activity as not exported, via android:exported="false"。令我惊讶的是,这很有效。

“设置”应用如何启动标记为未导出的活动?

我当然可以看到有权限来控制这一点。但是,快速阅读“设置”应用的清单(master branchn-developer-preview-5分支)并没有发现任何明显的内容。

所以:

  • 是否有允许应用启动其他应用的非导出组件的权限?如果是,那是什么?

  • 如果没有,“设置”如何将其关闭?

1 个答案:

答案 0 :(得分:7)

我猜测清单中没有任何内容可以为应用程序提供调用导出活动的权限。我相信它实现这一目标的方法是在Android应用程序的Android.mk文件中设置system/priv-app/。此标志将提供应用程序系统级别权限,并在OS编译期间将其放在frameworks/base/core/java/android/app/ActivityManager.java目录中。

如果查看checkComponentPermission方法$(function() { $(".submit-signin").on("click", function() { var data = $("#signin-form").serialize(); $.post("/signin/", data, function(response) { }); }); }); ,您可以看到,如果UID是SYSTEM的UID,则无论导出的设置如何,都会授予组件权限。