同步适配器服务已导出但未受保护

dbm*_*dbm 9 android

各位开发人员!

我的应用程序中有一个同步适配器和相应的同步服务.根据Google示例代码,我已声明了所有内容,包括同步服务.更大的图片看起来像这样:

<service
    android:name="com.myapp.SyncService"
    android:exported="true"
    android:process=":sync">

    <intent-filter>
        <action
            android:name="android.content.SyncAdapter"/>
    </intent-filter>

    <meta-data
        android:name="android.content.SyncAdapter"
        android:resource="@xml/syncadapter" />

</service>
Run Code Online (Sandbox Code Playgroud)

虽然将android:exported属性设置为true服务(使Android系统能够到达它)是有意义的,但我对如何在访问权限方面将其束缚有点困惑.我不希望除我的应用程序和Android系统之外的任何人都可以访问该服务.

也许有点天真我已经为此创建了自己的许可:

<permission
    android:name="com.myapp.permission.SYNC_ADAPTER"
    android:protectionLevel="signatureOrSystem" />
Run Code Online (Sandbox Code Playgroud)

但是阅读一下这个protectionLevel让我更加惊讶.谷歌说:

请避免使用此选项[...]"signatureOrSystem"权限用于某些特殊情况,其中多个供应商将应用程序内置到系统映像中,并且需要明确共享特定功能,因为它们是一起构建的.

描述的场景远非我的用例.那么问题仍然存在:

如何保护我的同步服务,以便Android系统(但没有第三方应用程序)可以访问它?

任何澄清将不胜感激!

BLe*_*LeB 0

看起来没有 SyncAdapter 权限。我猜我们可以放心地忽略这个错误。请参阅此处提交的错误:https://code.google.com/p/android/issues/detail?id =37280