2014-07-21 14 views
39


Sto mantenendo un'applicazione Android esistente (molto enorme, molto sensibile).
L'altro giorno, ho ricevuto un'e-mail dal mio client che, l'applicazione potrebbe dichiarare le autorizzazioni che non vengono utilizzate attivamente.Come verificare se l'autorizzazione Android è effettivamente utilizzata?

Ad esempio, vogliono che rimuova l'autorizzazione "WRITE_EXTERNAL_STORAGE".
L'ho rimosso e compilato ed eseguito l'App. Non c'è alcun errore.
Ma, proprio per questo, non credo di poter presumere che il permesso non venga usato affatto.

La mia domanda è "C'è comunque che possa facilmente e semplicemente controllare il permesso se viene utilizzato attivamente?"

Francamente, non voglio passare in rassegna tutti gli aspetti di dettaglio di questa applicazione solo per mettere fine al permesso richiesto o meno.
Non ho tempo.

Il mio obiettivo è controllare se l'autorizzazione viene utilizzata attivamente. In caso contrario, rimuovere il permesso.
Spero che ci sia un modo meno dispendioso in termini di tempo.

saluti

+2

Non c'è modo di dimostrare in modo programmatico che sia o non sia. Il modo migliore è quello di rimuovere e provare. Suppongo che tu sia in grado di trovare una lista da qualche parte di quali funzioni richiedono quale permesso, ma non mi fiderei del 100% se non pubblicato da google, e alcuni come WRITE_EXTERNAL_STORAGE possono essere difficili da dire (dal momento che qualsiasi funzione di file potrebbe teoricamente averne bisogno , a seconda di come è stato impostato). –

+0

Sì. Completamente d'accordo. La cosa peggiore è che ho appena ottenuto la base di codice e una breve spiegazione su come viene strutturata. L'App non ha alcuna documentazione in questa prospettiva. Sembra che ho bisogno di controllare ogni flusso dell'app per scoprire quale autorizzazione viene utilizzata attivamente. –

+1

Sì, ci sono stato. Se hai il potere nella tua organizzazione, spingerò a mettere qualsiasi cosa tranne le modifiche di emergenza sul masterizzatore mentre impari il codice base. E cerca di avere un po 'di tempo per il refactoring, ci saranno cose che non ti piacciono. –

risposta

11

C'è un gruppo di Berkeley, che ha scritto un paper sulle autorizzazioni Android. Parlano di autorizzazioni eccessive e hanno sviluppato uno strumento chiamato Stowaway che analizza il tuo APK per le autorizzazioni non utilizzate. L'analisi si basava sulle chiamate API dell'app e sulla mappatura delle autorizzazioni necessarie per ciascuna chiamata API (consultare la documentazione per i dettagli). Lo strumento genera un flag se esiste un permesso nel manifest che non è mappato a nessuna delle chiamate API trovate nell'APK.

Per un po ', una versione web dello strumento era disponibile allo http://www.android-permissions.org/, ma è dell'era Gingerbread e non è mai stata aggiornata. La pagina ora suggerisce di utilizzare PScout.

PScout fa un lavoro migliore di Stowaway nel generare le mappe dei permessi. Tuttavia, PScout non include un analizzatore APK, quindi dovrai confrontare manualmente i mapping forniti con le chiamate API effettuate dalla tua app. Sfortunatamente, se sei interessato alle mappe per le versioni oltre la 5.1.1, dovrai generarle tu stesso usando il codice PScout fornito e la tua fonte Framework.

È anche possibile controllare i vari analizzatori APK here per verificare se includono la funzionalità che si sta cercando.

+1

Verificherà sicuramente questo. Grazie Paolo. –

21

In Android Studio 1.3 & Libreria di supporto Android v7: 22.2.0, avete la soluzione per questo.

Passi:

  1. Aggiornamento Android Studio v1.3
  2. aggiornare la libreria di supporto Android per v7: 22.2.0
  3. Run Android Lint (Analizza -> Ispezionare Codice), in Errore Lint vedere per Tipo "Android -> Costante & Tipo di risorsa MisMatch", che mostra tutti i metodi che richiedono l'autorizzazione.

Spiegazione

  1. Android ha introdotto una nuova @requirespermission annotazione.
  2. Tutti i metodi SDK che richiedono l'autorizzazione sono annotati con @requirespermission.
  3. Quando chiamiamo un metodo sdk che richiede l'autorizzazione senza controllare correttamente se abbiamo o meno l'autorizzazione, Android studio sarà attraverso l'errore lint.
+6

Sto usando Android Stugio 1.3.2 e Libreria di supporto Android v7: 22.2.0 e non vedo i metodi che richiedono le autorizzazioni :(. Vedo altre cose sotto "Android -> Tipo di risorsa e costante MisMatch" – acrespo

+1

il metodo non funziona per tutte le autorizzazioni. Ad esempio, ignora INTERNET e ACCESS_NETWORK_STATE. – anber

2

Ho provato il metodo suggerito da Vasanth ma non funziona per me. Infatti, poiché il mio progetto ha aromi e Code Inspection non funziona per il progetto con aromi. Vedi https://code.google.com/p/android/issues/detail?id=210073.

Ma Running Lint da console funziona. Quindi i passaggi sono semplici:

  1. Rimuovere le autorizzazioni dal manifest.
  2. Eseguire Lint per l'aroma come descritto qui https://stackoverflow.com/a/32708435/1170154.
  3. Aprire il risultato Lint e trovare la sezione Correzione> Errore MancantePermission: Autorizzazioni mancanti. Conterrà tutte le chiamate che richiedono permessi.
Problemi correlati