O serviço exportado não requer permissão: o que significa?


143

Criei um serviço vinculado por outros aplicativos através do AIDL e o adicionei ao manifesto da seguinte maneira:

<service android:name=".MyService">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

onde IService é a interface AIDL.

Dessa maneira, o Eclipse me mostra o aviso Serviço exportado não requer permissão . Se eu remover o intent-filter, o aviso desaparecerá, mas obviamente os aplicativos não poderão se vincular ao serviço.

O que esse aviso significa?


31
Isso significa que outros aplicativos (arbitrários) que o usuário possui em seu telefone podem se conectar ao seu Servicee ligar para qualquer método que desejarem, exposto na interface AIDL.
Jens

25
crie uma nova <permission> no seu AndroidManifest.xml e use o nome disso como android:permissionatributo da sua <service>declaração. Ou simplesmente ignore o aviso - o que o serviço pretende fazer? Se você está bem com manter o serviço "interno" é muito mais fácil apenas para definir android:exported="false"em seu<service>
Jens

3
Em seguida, ignore o aviso ou adicione uma <permission>, use "signature" se todos os seus aplicativos forem assinados com o mesmo certificado ou apenas use "normal" caso contrário.
Jens

3
Você já está usando um certificado (liberação) para assinar seus aplicativos - a proteção de assinatura verifica se o aplicativo que solicita a permissão tem a mesma assinatura do aplicativo que definiu a permissão.
Jens

2
@ Jens Obrigado ... me ajudou .... btw você pode adicionar seus comentários como resposta. Deixe o enzom83 aceitá-lo.
Vijay C

Respostas:


128

Eu tive o mesmo problema quando atualizei o SDK para a versão 20 . Eu o removi adicionando a propriedade android: exported da seguinteandroid:exported="false" forma:

<service android:name=".MyService"
    android:exported="false">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

Veja este documento


56

Se você deseja restringir o uso da atividade ao seu próprio aplicativo, adicione exported=falsea declaração do manifesto da atividade.

Se você deseja permitir que outros aplicativos o usem (explicitamente através do nome da classe ou, melhor, usando uma intenção com um tipo de dados ou ação), então você tem duas opções:

  • restringir esses aplicativos usando uma permissão
  • permitir que todos os aplicativos o usem, você poderá adicionar tools:ignore="ExportedActivity"à declaração de manifesto da sua atividade.

-

O mesmo raciocínio se aplica a um serviço, com tools:ignore="ExportedService"e com provedores de conteúdo tools:ignore="ExportedContentProvider".


8
Isso funcionou para mim, obrigado !! No entanto, aviso que este necessita para adicionar uma declaração xmlns no topo do arquivo de manifesto:xmlns:tools="http://schemas.android.com/tools"
Luis A. Florit

Obrigado, é adicionado automaticamente pelo Eclipse. Esse é um bom complemento para outros usuários de IDEs.
9788 Snicolas

Eu uso o Eclipse 4.2.1 e não o adiciona, fornecendo um erro (pelo menos com a configuração padrão?). Apenas diz:, The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bounde não há opções para corrigir isso.
Luis A. Florit

Ele será adicionado se você remover a instrução tools: foo = bar e, quando houver um erro / aviso, clique com o botão direito do mouse e use uma correção rápida para adicionar a instrução tools.
Snicolas

1
O caso especial é o SyncService, que deve ser exportado, mas você deseja que o sistema o utilize apenas. Para SyncService ou AuthenticatorService adicione android: permission = "signature"
Entreco 13/08/2015

4

Como Jens disse: "Isso significa que outros aplicativos (arbitrários) que o usuário possui no telefone podem vincular-se ao seu Serviço e ligar para qualquer método que desejarem, exposto na interface AIDL".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.