6

Quiero usar los metadatos en el manifiesto de Android para personalizar el comportamiento de un servicio.¿Hay alguna forma de mantener los metadatos en el manifiesto de Android como privados para el paquete?

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

Mi servicio es parte de una biblioteca, y es posible que algunos pueden poner los datos sensibles en estos atributos cuando usan mi servicio. ¿Estos atributos de metadatos son visibles para otros paquetes instalados en el teléfono a través de PackageManager incluso si el servicio no se exporta?

Respuesta

9

¿Estos atributos de metadatos son visibles para otros paquetes instalados en el teléfono a través de PackageManager, incluso si el servicio no se exporta?

Sí. Todo el contenido del manifiesto, y todo lo que se encuentre en sus recursos y recursos, es accesible para todas las aplicaciones en el dispositivo.

1

Después de hacer algunas pruebas confirmó que todos los campos de metadatos son visibles para todos los paquetes, como dijo CommonsWare. Sin embargo, también descubrí que puede mantener privado el contenido del valor, utilizando android: resource en lugar de android: value. Cuando usas android: resource, solo el ID entero del recurso es devuelto por el PackageManager, y por lo tanto, solo tu paquete tendrá acceso al valor real del recurso.

Actualización: Resulta que CommonsWare tenía razón de nuevo. Después de investigar más, todos los recursos y activos son públicamente visibles para TODOS los paquetes instalados en el dispositivo. No se requieren permisos.

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

, ya que podría excluir la información de las ofertas públicas del Administrador de paquetes para otras aplicaciones, pero es bastante fácil de localizar y abrir el apk, extraer el manifiesto binario, y demangle de nuevo a texto sin formato - la situación los recursos deben ser similares. Uno quizás no debería confiar en que siempre será capaz de hacer eso en el futuro, pero definitivamente uno debe ** no ** confiar en que otra persona * no * pueda hacerlo. –

+0

¿No es cierto para todos los archivos dex, activos y recursos? – Alan

+0

Sí, pero los valores que se ensamblan en código requerirían un esfuerzo un poco más específico que los valores que se almacenan de forma estándar. –

Cuestiones relacionadas