2012-10-24 11 views
6

Diciamo che ho preso in carico lo sviluppo di un'app per Android e il mio capo mi chiede perché la nostra app richiede determinate autorizzazioni per essere mostrata agli utenti che acquistano l'app su Android Market.Come faccio a sapere perché la mia app per Android richiede determinate autorizzazioni?

Ci sono strumenti o trucchi che posso utilizzare per determinare quale codice attiva ogni autorizzazione, quindi posso capire perché la nostra app ha bisogno di tali autorizzazioni? In particolare, sono interessati a questi permesso:

  • telefonate - Leggere lo stato del telefono e l'identità

  • Strumenti di sistema - Recuperare le applicazioni in esecuzione - Consente all'applicazione di recuperare informazioni sulle attività attualmente e recentemente in esecuzione, maggio consentire alle app dannose di scoprire informazioni private su altre app.

L'app è un'app di tracciamento GPS, e non è ovvio perché questa autorizzazione potrebbe essere necessaria.

Sarebbe anche utile avere qualche consiglio sul perché questo permesso potrebbe essere necessario, anche se non puoi dirmi come analizzare direttamente il codice per scoprirlo.

risposta

0

La risposta per il tuo capo è "perché alcune funzioni API/chiamate/metodi che utilizziamo nella nostra app richiedono calee per mantenere determinate autorizzazioni. È per motivi di sicurezza, e questo è il modo in cui funziona Android". Per quanto riguarda le autorizzazioni menzionate, devi controllare il codice per vedere se queste autorizzazioni sono realmente necessarie. Read phone status and identity potrebbe indicare che l'app tenta di ottenere IMEI o qualcosa di simile per identificare univocamente il dispositivo. Retrieve running applications - non vedo alcun motivo per cui l'app di localizzazione GPS lo tenga. Ma forse si utilizza lib/codice di terze parti che utilizza questo.

+0

Non credo che raccontare il suo capo che le applicazioni Android hanno bisogno di autorizzazioni per fare cose * * risponde davvero alla domanda. È sempre pertinente per l'utente finale sapere quale funzione richiede le autorizzazioni, soprattutto se non sono ovvie, e il suo capo potrebbe voler sapere perché è necessario che quelle autorizzazioni siano aggiunte alla descrizione dell'app. –

+0

Ho paura di non poter rispondere in modo più dettagliato di quanto non vedessi il codice. –

+2

Tutto quello che intendevo era che scartare la domanda del suo capo come "Ecco come funziona Android" potrebbe non essere quello che ci si aspetta. Penso che Andrew sia alla ricerca di un modo per capire dove il codice utilizza effettivamente tali permessi (a cui la modifica della risposta corrisponde). –

2

Rimuovere un'autorizzazione e vedere dove l'app ha esito negativo. La risposta sarà nell'output logcat.

Questa non è una soluzione ideale, dal momento che potresti non sapere cosa devi fare nell'app per attivare tale autorizzazione.

Sospetto che "Leggi stato e identità del telefono" indica che l'app utilizza l'IMEI del dispositivo o informazioni identificative simili per identificare in modo univoco il dispositivo per garantire che l'app venga eseguita solo su un dispositivo registrato. O potrebbe semplicemente essere usato come una sorta di cookie per rintracciare il proprietario. Cerca quel codice. E rimuovilo, perché è il modo sbagliato di farlo. Se è necessario identificare un dispositivo Android specifico, utilizzare ANDROID_ID dalla classe Settings.Secure. http://developer.android.com/reference/android/provider/Settings.Secure.html

Per quanto riguarda "Recupera applicazioni in esecuzione", trovo che un po 'sospetto. Un modo molto comune per implementare il tracciamento GPS è quello di avviare un servizio separato nel proprio processo. In questo modo, se l'app dovesse bloccarsi, il servizio continuerà e potrà essere riattaccato. In questo caso, è possibile che l'app utilizzi "Recupera applicazioni in esecuzione" per identificare e terminare il processo del servizio. Ma se è così, è un modo goffo per farlo.

14

Ecco come vorrei rintracciarli.

Fase 1 - Trova i permessi manifesto dichiarati nel vostro AndroidManifest.xml

Fondamentalmente tutto all'interno dei tag per esempio <uses-permission />:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

Fase 2 - Ricerca developer.android.com per le classi che usano tali autorizzazioni

Prendiamo il caso del READ_PHONE_STATE, l'obiettivo è quello di trovare quali pacchetti richiedono questa autorizzazione. Una semplice ricerca sul portale dev per "READ_PHONE_STATE" inizia la nostra ricerca, siamo alla ricerca di classi qui, tra i primi 5 risultati di ricerca compaiono i seguenti classi:

  • TelephonyManager
  • PhoneStateListener

Clicca sulle classi e ottenere i loro nomi dei pacchetti:

  • android.telephony.TelephonyManager
  • android.telephony.PhoneStateListener

Fase 3 classi Trova nel progetto che importano questi pacchetti

Un semplice grep farà, o un Ctrl-H in Eclipse, File Search -> Contenuto del testo

Fase 4 come commento l'importazione e vedere che cosa si rompe

Questi sono probabili candidati per il motivo per cui il permesso è obbligatorio. Confermare i metodi in questione osservando il portale dev per verificare che il permesso sia effettivamente richiesto da tale metodo.

Infine dovresti essere in grado di dire al tuo capo, è necessario READ_PHONE_STATE perché chiamiamo la funzione XYZ che ci fornisce UVW.

+0

Sì, sono tornato per dire questo. Questa è la risposta corretta, IMHO. –

1

Con gli strumenti di compilazione più recenti, è possibile eseguire il controllo lint che evidenzierà per te tutte le chiamate al metodo Android SDK che richiedono autorizzazioni.

Vedere l'annuncio qui http://android-developers.blogspot.com/2015/07/get-your-hands-on-android-studio-13.html e la documentazione qui https://developer.android.com/tools/debugging/annotations.html#permissions.

questo è basato su Android annotazioni e dopo alcune librerie 3a parte adozione in grado di integrare le annotazioni autorizzazione anche

enter image description here

Problemi correlati