ProtectionLevel“签名”是否可以与 Android 调试键一起正常工作?

Sta*_*tan 3 permissions android 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" />
Run Code Online (Sandbox Code Playgroud)

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

<uses-permission android:name="org.example.provider.READ" />
Run Code Online (Sandbox Code Playgroud)

当我尝试从提供商获取数据时,出现错误:

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
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了某些内容,或者与应用程序由调试密钥签名这一事实有关?如何解决问题?我也看到了添加到提供程序的建议uses-permission,但这也没有帮助。注意。如果这有任何重要性,则会在模拟器内部进行检查。

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

Com*_*are 5

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

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