Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Desde la versión 2.2 (API 8), Android permite realizar la copia de seguridad de los datos persistentes
de la aplicación en la nube, es decir, en línea, sobre un servidor. Se trata de un servicio complementario
al de la copia de seguridad de los datos en local.
Cuando el usuario reinicializa el dispositivo Android, cuando cambia de dispositivo o utiliza un nuevo
dispositivo suplementario, como por ejemplo una tableta como complemento a un smartphone, puede
solicitar (re)instalar una aplicación. El hecho de tener que reconfigurar la aplicación y volver a insertar
ciertos datos de forma manual son tareas que pueden resultar poco atractivas al usuario.
Es, en este momento, cuando entra en juego la copia de seguridad en la nube. Ésta permite evitar
tareas de configuración largas y tediosas. Es posible descargar e insertar los datos, salvaguardados
previamente en línea, durante una nueva instalación. El usuario encontrará automáticamente la
aplicación y los datos que la acompañan sin tener que hacer nada por su parte.
Los datos están asociados a la cuenta de Google del usuario principal configurado en el
dispositivo. El usuario tendrá que configurar a continuación la misma cuenta principal sobre sus
demás dispositivos para aprovechar plenamente esta funcionalidad.
Cabe observar que, si bien esta funcionalidad está presente en la mayoría de dispositivos
Android, algunos no la poseen. También puede darse el caso de que el usuario desactive esta
funcionalidad en los parámetros generales del sistema. En tales casos, la aplicación funcionará de
manera normal; simplemente los datos persistentes no se salvaguardarán ni se recuperarán. Será
tarea del usuario reinsertarlos manualmente.
La aplicación no envía, en sí misma, los datos persistentes al servidor. Se comunica con el Gestor de
copia de seguridad sobre el sistema Android. Éste se encargará de preparar los datos a enviar,
comunicarse con el servidor en línea y transmitirle los datos. También se encarga de recibir los datos
desde el servidor en el caso de una nueva instalación de la aplicación.
La aplicación debe indicar al Gestor de copia de seguridad que quiere utilizar el servicio de copia de
seguridad en línea, dado que el sistema permite utilizar distintos servicios de copia de seguridad en
línea. Estudiaremos aquí el servicio de copia de seguridad propuesto por Google: Android Backup
Service.
Corresponde a los responsables de la aplicación, sea un particular, una empresa u otros verificar
si deben declarar la copia de seguridad de los datos sobre sus servidores, según el tipo de dato
afectado y, en especial, si se trata de datos personales, debido a la LOPD (Agencia Española de
Protección de Datos - Ley Orgánica de Protección de Datos - https://www.agpd.es/). Si usa el
servicio Android Backup Service de Google, el responsable deberá, sin duda, completar su
declaración indicando una posible transferencia de datos fuera de la Unión Europea.
En la etapa de inscripción, se genera una clave única. Esta clave permite identificar la aplicación
desde el servicio en las fases de copia de seguridad y de restauración.
El servicio requiere que cada aplicación posea su propia clave. Será preciso, por tanto, inscribir
cada aplicación, cada paquete, para poder generar tantas claves como aplicaciones quieran
utilizar el servicio.
Diríjase a la siguiente dirección: http://developer.android.com/google/backup/signup.html
Lea las condiciones de uso del servicio Android Backup Service que describen, en particular, las
condiciones y las restricciones de uso del servicio. Marque la opción I have read and agree with
the Android Backup Service Terms of Service.
Aparece la siguiente pantalla, que incluye la clave única generada y asociada al nombre del paquete
que se ha indicado.
Guarde la página web o, al menos, la clave anotando a qué paquete está asociada. Si fuera
necesario, es posible generar la misma clave varias veces.
2. Configuración de la clave
Una vez generada la clave, es preciso agregarla en el manifiesto insertando una etiqueta meta-
data dentro de la etiqueta application. Esta etiqueta meta-data debe incluir el
atributo an droid:name identificando al dato, en este
caso com .google.android.backup.api_key, y el atributo android:valueespecificando el
valor de la clave generada.
Sintaxis
<meta-data android:name="com.google.android.backup.api_key"
android:value="cadena de caracteres" />
Ejemplo
Para ello, hay que crear una clase que herede de la clase BackupAgent. La clase creada se
comunica con el Gestor de copia de seguridad y debe, en particular, implementar
los métodos onBackupy onRestorepara realizar respectivamente las operaciones de salvaguarda
y de restauración.
Android provee la clase Bac kupAgentHelperque hereda de la clase BackupAgent. Esta clase
utiliza asistentes capaces de salvaguardar de manera sencilla ciertos tipos de datos y, en particular,
archivos binarios almacenados en local. Por ello, no es necesario implementar los
métodos onBackup y onRestore. Por el contrario, heredar de la
clase BackupAgentHelper entraña ciertas restricciones como, por ejemplo, la imposibilidad de
salvaguardar datos almacenados en una base de datos SQLite. Para ello, será preciso heredar
directamente de la clase BackupAgent.
Aquí trataremos solamente la herencia de la clase BackupAgentHelper, antes que de la clase
básica BackupAgent, con el objetivo de aprovechar los servicios que ofrece aquélla.
a. Configuración
Sintaxis
android:backupAgent="cadena de caracteres"
De forma similar a los demás componentes, este nombre puede comenzar por un punto, de modo
que se utilizará el nombre del paquete indicado en el atributo p ackage de la
etiqueta manifestpara componer el nombre completo.
Ejemplo
b. BackupAgentHelper
Sintaxis
Ejemplo
SharedPreferencesBackupHelper asistenteArchivosPrefs =
new SharedPreferencesBackupHelper(this, "nombreArchivoPrefs1",
"nombreArchivoPrefs2");
Sintaxis
public FileBackupHelper (Context context, String... files)
Ejemplo
FileBackupHelper asistenteArchivosBin =
new FileBackupHelper(this, "nombreArchivoBin1", "nombreArchivoBin2");
Sintaxis
Ejemplo
addHelper("archivosPrefs", asistenteArchivosPrefs);
Sintaxis
Ejemplo
@Override
public void onCreate() {
SharedPreferencesBackupHelper asistenteArchivosPrefs =
new SharedPreferencesBackupHelper(this,
"nombreArchivoPrefs1", "nombreArchivoPrefs2");
addHelper("archivosPrefs", asistenteArchivosPrefs);
FileBackupHelper asistenteArchivosBin =
new FileBackupHelper(this, "nombreArchivoBin1",
"nombreArchivoBin2");
addHelper("archivosBin", asistenteArchivosBin);
}
Dado que la copia de seguridad de los datos puede tener lugar en cualquier momento, hay que
asegurar que no ocurre durante una actualización de los datos en local por la propia aplicación. En
caso contrario, los datos almacenados en línea podrían verse corrompidos.
Una de las soluciones propuestas para responder a este problema consiste en volver atómicas las
fases de escritura y de lectura de datos en los archivos. En concreto, esto consiste en sincronizar el
acceso a los datos mediante el uso de un cerrojo, por ejemplo.
Por el contrario, este no es el caso de los archivos binarios. Es preciso implantar tal mecanismo en el
uso de estos archivos por los componentes de la aplicación y por el agente de copia de seguridad.
La implementación de este mecanismo debe realizarse en los métodos o nBackupyonRestoreque
es preciso implementar.
Sintaxis
Ejemplo
@Override
public void onBackup(ParcelFileDescriptor oldState,
BackupDataOutput data, ParcelFileDescriptor newState)
throws IOException {
synchronized (sCerrojo) {
super.onBackup(oldState, data, newState);
}
}
@Override
public void onRestore(BackupDataInput data, int appVersionCode,
ParcelFileDescriptor newState) throws IOException {
synchronized (sCerrojo) {
super.onRestore(data, appVersionCode, newState);
}
}
Todos los accesos de escritura a los archivos salvaguardados deberán realizarse utilizando este
bloqueo en el conjunto de la aplicación.
Para realizar una petición de copia de seguridad, la aplicación debe, en primer lugar, crear una
instancia del Gestor de copia de seguridad. Para ello, debe utilizar simplemente el constructor de la
clase Ba ckupManager.
Sintaxis
Ejemplo
Sintaxis
Ejemplo
backupManager.dataChanged();
b. Probar el servicio
Para poder probar de forma sencilla la implementación del sistema de copia de seguridad en línea
por la aplicación, es posible forzar manualmente las distintas etapas de copia de seguridad y de
restauración.
Esto se realiza desde una consola. La herramienta a dbpermite abrir un shell en el dispositivo
Android o el emulador. Desde este shell, hay que utilizar el comando bmgrpasándole las opciones
deseadas. Las opciones más utilizadas son b ackup, run y restore que se corresponden
respectivamente con la solicitud de copia de seguridad, la realización efectiva de la copia de
seguridad en línea y la restauración. Basta con no especificar ninguna opción para obtener la lista
completa de opciones disponibles.
Sintaxis
Ejemplo
Sólo queda reinstalar la aplicación para verificar que los datos se restauran correctamente.