多个应用之间的Android签名级别权​​限

时间:2017-07-27 06:20:14

标签: android security permissions

我的主要应用 A 使用其他应用作为插件,假设 B C D 。我无法控制首先安装哪个应用。

如何定义签名级别权​​限,以便只有主应用 A 才能启动插件应用 B C D

插件没有UI,因此用户无法手动启动它们,但我需要确保只有我的主应用才能启动它们。我尝试在插件中定义权限,如下所示:

<permission
    android:name="my.custom.permission.START_PLUGIN"
    android:protectionLevel="signature"/>

然后在我的主应用程序中:

<uses-permission android:name="my.custom.permission.START_PLUGIN" />

这似乎不是正确的方法。谁能告诉我正确的方法来实现我上面描述的内容?感谢。

编辑:我的插件实现为带有AIDL接口的绑定服务。

1 个答案:

答案 0 :(得分:1)

要回答我原来的问题,要使我的示例正常工作,您所要做的就是为您要保护的应用程序组件添加权限属性。这是在Manifest.xml文件中完成的。

假设您有一项名为MyActivity的活动,您希望只有具有START_PLUGIN权限的应用才能启动。所以在你的插件中,你可以:

<permission
    android:name="my.custom.permission.START_PLUGIN"
    android:protectionLevel="signature"/>

<activity
    android:name=".MyActivity"
    android:permission="my.custom.permission.START_PLUGIN"/>

最后一个将确保只有具有START_PLUGIN权限的应用才能访问该活动。所以你需要做的就是在app中应该启动这个插件使用这样的权限:

<uses-permission android:name="my.custom.permission.START_PLUGIN" />

要根据评论中@pskink的建议决定是否要使用具有签名级别保护的权限或sharedUserId,请考虑以下事项:

  • sharedUserId紧密耦合两个(或更多)应用程序,使他们不仅可以访问特定活动,还可以访问他们的文件(甚至是SharedPreferences)和视图,并且基本上可以删除任何级别的分离
  • 自定义权限可以指定应用程序的哪些部分受到保护,让您获得更多控制权,同时还需要像AIDL那样的IPC

链接:

sharedUserId Android Reference

How to access data of app with sharedUserId

AIDL Reference

Android permission protection levels