2012-02-29 10 views
12

Estoy creando una aplicación que se incluirá en un dispositivo Android como una aplicación del sistema. El fabricante es una forma de entregarnos el dispositivo, por lo que me gustaría otorgar permisos de nivel de mi sistema de aplicación en el emulador para poder trabajar en una función de actualización automática que hará instalaciones silenciosas de APK sin ninguna interacción del usuario. Por lo que he leído, entiendo que la única forma de poder hacer instalaciones silenciosas en Android es si su aplicación está firmada con el mismo certificado que el sistema operativo. Entonces, ¿cómo puedo simular esto en el emulador?otorgar permisos de sistema a una aplicación en el emulador de Android

Respuesta

27

Si desea un permiso de signatureOrSystem, solo necesita colocarlo en la imagen del sistema; no necesita estar firmado con ningún certificado especial. Puede hacer esto como una sola vez (hasta que salga del emulador) así:

> adb root 
> adb remount 
> adb push /path/to/My.apk /system/app/My.apk 

Una vez que haya hecho esto, se puede utilizar el proceso normal para instalar actualizaciones adicionales en la partición de datos ("adb instalar -r /path/to/My.apk "que es lo que hacen las herramientas de desarrollador cuando se ejecuta desde Eclipse). Cuando se instala de esta manera, la aplicación retiene todos los permisos de signatureOrSystem que solicitó de la versión original en la imagen del sistema, pero no puede obtener ningún permiso nuevo.

Si necesita permisos de firma puros, debe firmar su aplicación con el mismo certificado que lo que declara esos permisos (normalmente el marco principal, pero el sistema de medios es un certificado independiente, etc.). Si solicita permisos de firma, no necesita instalarse en la imagen del sistema, puede simplemente instalarlo como una aplicación normal y aún así puede obtener los permisos debido a la firma.

+0

¡Lo intentaré! – Ben

+0

¿Alguien puede validar que esto funciona? ¡¡Un montón de baches, pero no hay una bonita marca verde ?! – MindWire

+0

¿Qué permisos estás tratando de recuperar?No hay dudas de que esto funciona, lo que significa signaturaOrSystem es que una aplicación en/system/app puede obtener el permiso, y esto se usa para varias partes centrales de la plataforma. – hackbod

2

Por lo que yo puedo decir, es necesario:

  • descargar el código fuente de Android y construir una imagen emulador de firmware.
  • firme su aplicación con las claves en el árbol fuente de Android en /build/target/product/security/.
  • agregue android:sharedUserId="android.uid.system" al manifiesto de su aplicación.
  • ejecutar la aplicación en un emulador utilizando la imagen construida en el paso 1.

La razón de tener que construir su propia imagen del firmware es por lo que se puede obtener en las teclas. Ahora, podría ser posible que las claves para la imagen del emulador estándar estén disponibles en alguna parte, lo que le ahorrará el proceso largo y sumamente tedioso de construir su propio Android, pero me temo que no tengo idea de dónde podrían estar.

Descargo de responsabilidad: yo nunca lo intenté.

+0

eso es lo que tenía miedo ... ¿Alguna idea de dónde buscar para encontrar las claves para los emuladores existentes? – Ben

+0

Absolutamente ninguno. Crear una imagen de firmware no es * tan * difícil; una hora más o menos para la descarga masiva, y luego alrededor de cuatro para la compilación ... y si está enviando en una ROM del fabricante, es probable que desee obtener una versión de origen de ellos de todos modos para las pruebas de integración. –

+1

podrías probar si las claves de Android Git funcionan. Ejemplo: https://github.com/android/platform_build/tree/master/target/product/security Es la clave de la "plataforma" que debe usar para firmar iirc – zapl

Cuestiones relacionadas