6

Desidero utilizzare i metadati nel manifest di Android per personalizzare il comportamento di un servizio.C'è un modo per mantenere i meta-dati nel manifest Android privato nel pacchetto?

<service 
    android:name=".SampleService" 
    android:exported="false"> 
    <meta-data 
     android:name="sampleName" 
     android:resource="@string/sampleValue" /> 
</service> 

Il mio servizio è parte di una libreria, ed è possibile alcuni possono inserire i dati sensibili in questi attributi quando usano il mio servizio. Questi attributi dei metadati sono visibili ad altri pacchetti installati sul telefono tramite PackageManager anche se il servizio non viene esportato?

risposta

9

Questi attributi dei metadati sono visibili ad altri pacchetti installati sul telefono tramite PackageManager anche se il servizio non viene esportato?

Sì. Tutto in manifest e tutto nelle risorse e risorse è accessibile a tutte le applicazioni sul dispositivo.

1

Dopo aver eseguito alcuni test, ho confermato che tutti i campi dei metadati sono visibili a tutti i pacchetti, come dichiarato da CommonsWare. Tuttavia, ho anche scoperto che puoi mantenere privato il contenuto del valore, usando android: resource anziché android: value. Quando si utilizza Android: resource viene restituito solo l'id intero della risorsa da PackageManager e pertanto solo il pacchetto avrà accesso al valore effettivo della risorsa.

Aggiornamento: Si scopre che CommonsWare era di nuovo a destra. Dopo aver esaminato ulteriormente, tutte le risorse e le risorse sono visibili pubblicamente a TUTTI i pacchetti installati sul dispositivo. Non sono richieste autorizzazioni

PackageManager pm = getPackageManager(); 
PackageInfo info = pm.getPackageInfo("test.package", PackageManager.GET_META_DATA|PackageManager.GET_SERVICES); 
int resourceId = info.services[0].metaData.getInt("sampleName"); 
String resourceValue = pm.getResourcesForApplication("test.package").getString(resourceId); 
+0

Ciò potrebbe escludere le informazioni dalle offerte pubbliche del gestore di pacchetti per altre applicazioni, ma è abbastanza semplice da individuare e aprire l'apk, estrarre il manifesto binario, e decodifica i di nuovo a testo in chiaro - la situazione con le risorse dovrebbero essere simili Forse non si dovrebbe fare affidamento sul fatto di essere sempre in grado di farlo andando avanti, ma si deve sicuramente ** non ** fare affidamento su qualcun altro * non * in grado di farlo. –

+0

Non è vero per tutti i file dex, le risorse e le risorse? – Alan

+0

Sì, ma i valori assemblati nel codice richiederebbero uno sforzo un po 'più specifico rispetto ai valori memorizzati in modo standard. –

Problemi correlati