UMI

Android distingue, en general, entre dos tipos de aplicaciones: las de sistema y las de usuario, lo que no debe confundirse con el hecho de que una aplicación se instale en la partición de sistema (por ejemplo las que se incluyen por defecto en cualquier ROM) o se instale en la partición de datos de usuario (las que se descargan de la Google Play Store, por ejemplo).

Como ya os hemos indicado en varias ocasiones, el sistema operativo de Google organiza las acciones que pueden ejecutar las aplicaciones en base a permisos que se otorgan en el momento de la instalación de cada una de ellas, si bien existen una serie de acciones, como por ejemplo la modificación de ciertos parámetros del sistema, o el hecho de poner el teléfono en modo avión (a partir de Android 4.2) que, por seguridad, sólo pueden ser ejecutadas por aplicaciones del propio sistema.

Banner con el logo de Android

Entonces, ¿en qué se diferencian las aplicaciones de sistema de las de usuario?

En lo básico, las aplicaciones de sistema y de usuario no se diferencian más que en tres pequeños detalles:

  • Incluyen un atributo en el manifiesto que indica que se trata de aplicaciones de sistema.
  • Están firmadas con el mismo certificado con el que se firmó la ROM y el resto de aplicaciones de sistema.
  • Se instalan en la partición de sistema.

¿Es posible crear mi propia aplicación de sistema?

Como en muchas otras cosas, la respuesta es: ¡depende!

Antes de crear una aplicación de sistema el desarrollador debería tener presente varias cosas:

  • Sólo los usuarios que hayan rooteado previamente el dispositivo podrán instalar nuestra aplicación.
  • Nuestra aplicación no ṕodrá publicarse en la tienda de aplicaciones de Google y, en general, en ninguna otra de las oficiales.
  • La mayor parte de las operaciones pueden realizarse sin necesidad de desarrollar una aplicación de sistema.
  • La aplicación no funcionará en todos los dispositivos, como veremos a continuación.

Una vez que hayamos tenido en cuenta esas consideraciones previas, y si aún nos vemos en la necesidad de que nuestra aplicación obtenga permisos de sistema, deberemos tener en cuenta que, como hemos indicado anteriormente, la aplicación deberá firmarse con el mismo certificado que se ha firmado la ROM en la que va a a instalarse, lo que no siempre es fácil ni posible.

Captura de pantalla de Eclipse

En el caso de las ROMs basadas en el estándar AOSP, tal como las ROMs publicadas por Google o por Cyanogen, por poner un ejemplo, es posible obtener el certificado con el que firmar la aplicación. En otro tipo de ROMs, como por ejemplo las publicadas por los fabricantes de hardware, ello no es posible, dado que éstos no suelen publicar sus certificados, aunque, si la aplicación es para uso propio, podemos optar por refirmar la ROM completa, lo que no siempre es posible.

Cómo firmar una aplicación de sistema durante su programación en Android

Antes de nada, y como hemos indicado anteriormente, deberemos incluir un atributo especial en el tag manifest del manifiesto de nuestra aplicación, tal como se indica a continuación.


<manifest ... android:sharedUserId="android.uid.system" >
...
</manifest>

A continuación procederemos a exportar una versión no firmada de nuestra aplicación, que en Eclipse se hace de la siguiente manera:

  1. Hacer clic con el botón derecho del ratón en el nombre del proyecto (en la vista del explorador de paquetes).
  2. En el menú contextual seleccionar Android Tools y después Export Unisigned Applicacion Package.
  3. Seleccionar el directorio en el que deseamos exportar el apk sin firmar y hacer clic en aceptar.

Una vez hayamos exportado la versión no firmada de la aplicación, tan sólo deberemos firmarla con los certificados de sistema.

java -jar signapk.jar platform.x509.pem platform.pk8 app.unsigned.apk app.signed.apk

Y proceder a su instalación, lo que se recomienda hacer desde el recovery, aunque también se puede hacer sin necesidad de reiniciar, en cuyo caso habrá que recordar activar el paquete después.


adb push app.signed.apk /system/app
adb shell chmod 0644 /system/app/app.signed.apk
adb shell pm enable nombre_del_paquete

Esperamos que este tutorial sobre programación Android os sirva de ayuda si alguna vez os encontráis en la tesitura de tener que realizar una aplicación de sistema. Algo que, como ya os hemos indicado, no es demasiado recomendable.

1 comentario

  1. Una pregunta, cuando mediante Titanium Backup convertimos una aplicación a aplicación de sistema, ¿Qué proceso sigue Titanium? ¿Qué diferencias hay a instalarla mediante el método del artículo?

Deja una respuesta