protectionLevel“签名”能否与Android调试密钥一起正常工作?

时间:2012-09-13 17:57:04

标签: android permissions android-contentprovider

我有一个内容提供程序和一个测试应用程序都使用调试密钥签名。如果未应用权限,客户端通常会收到内容,但我想对这些内容应用权限。因此,以下行将添加到内容提供者的清单文件中:

  <permission android:name="org.example.provider.READ"
    android:permissionGroup="org.example.group.DATA_ACCESS"
    android:label="@string/readonlyaccess"
    android:protectionLevel="signature" />

  <application
    ...
    <provider android:name=".ImageContentProvider"
        android:authorities="org.example.provider"
        android:readPermission="org.example.provider.READ" />

在客户端的清单文件中添加以下行:

<uses-permission android:name="org.example.provider.READ" />

当我尝试从提供程序获取数据时,我收到错误:

09-13 22:38:20.995: E/AndroidRuntime(13979): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hello/com.example.hello.HelloActivity}: java.lang.SecurityException: Permission Denial: reading org.example.ImageContentProvider uri content://org.example.provider/file from pid=13979, uid=10040 requires org.example.provider.READ

我是否遗漏了某些内容,或者是否与应用程序是否通过调试密钥签名有关?如何解决问题?我看到了将uses-permission添加到提供程序的建议,但这也无济于事。 NB。如果这可能具有任何重要性,则会在模拟器中进行检查。

我发现了一个相关的问题throws SecurityException when signing with the default debug keystore,但它没有提供实际解决方案。

1 个答案:

答案 0 :(得分:2)

是的,它适用于调试密钥库,至少在我上次尝试时是这样。

我会在两个应用中都有<permission>元素。如果先安装<uses-permission>,然后安装<permission>,则会遇到问题。需要在遇到<uses-permission>之前定义权限,最简单的方法是将<permission>放在两者中。