2015-01-17 10 views
8

sto affrontando il seguente problema in questo momento:disabilitare i permessi di dipendenza

ho sviluppato app 'A' che utilizza le autorizzazioni di 1, 2, 3 e utilizza una libreria di 3a parte 'B' come dipendenza (aggiunto usando Maven & gradle).

La libreria "B" utilizza le autorizzazioni 4 e 5. Ora durante la creazione dell'app, la fusione manifest aggiunge le autorizzazioni 4 e 5 all'app "A".

Come posso evitare questo e solo i permessi 1, 2 e 3 nel manifest finale?

La mia prima risposta sarebbe utilizzando uno dei marcatori di fusione si manifestano come si vede qui: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Markers

risposta

13

è necessario utilizzare Selector

Ogni strumenti: nodo o strumenti: attr dichiarazione può essere aumentata da un Strumenti : attributo selettore che è informazioni contestuali su se o non la strategia di fusione deve essere applicata all'attuale descrizione XML priorità inferiore. Per esempio, questo è utile quando si rimuove un permesso solo se arrivo per una libreria particolare piuttosto che ad uno libreria:

<permission 
     android:name="permissionOne" 
     tools:node="remove" 
     tools:selector="com.example.lib1"> 

Sarebbe prossimo secondo le vostre esigenze iniziali

<!--suppress AndroidDomInspection --> 
<uses-permission 
    tools:node="removeAll"/> 

ma tieni presente che tutti gli altri <uses-permissions/> verranno rimossi.

+0

Come posso eliminare l'avviso risultante quando si utilizza il secondo esempio? "attributo nome deve essere definito" – throwaway

+0

@throwaway Usa lo spazio dei nomi degli strumenti Android 'xmlns: tools =" http://schemas.android.com/tools "', aggiungilo in '' – gio

+0

Naw, stavo parlando di quello, che il nodo '' richiede un attributo 'andorid: name' (secondo lint), questo è ciò che intendo: https://i.imgur.com/V5YZp11.png il progetto continua a generare con quell'errore ma è altamente confuso – throwaway

0

Come sapete, tutte le librerie hanno un file manifest e si uniranno. è possibile rimuovere un'autorizzazione che si trova in una delle vostre librerie da questo:

tools:node="remove" 

per un esempio rimozione posizione permesso:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" />