保护级别 "signature" 是否可以与 Android 调试密钥一起正常工作?



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

  <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添加到提供者的建议,但这也没有帮助。注:。这是在模拟器内部检查的,如果这可能有任何重要意义的话。

我发现一个相关的问题在使用默认调试密钥库进行签名时抛出SecurityException,但它并没有提供实际的解决方案。

是的,它可以与调试密钥库一起使用,至少在我上次尝试时是这样

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

最新更新