Realmente pasé algún tiempo investigando esto y me sorprendió no encontrar ninguna respuesta ( este excelente hilo no aborda este problema en absoluto... Estoy tratando de recuperarme de mi desafortunada situación: configuré un usuario secundario en mi Nexus 7 4.2.2 y mi dispositivo no está (todavía) rooteado Ahora, como muchos otros, me doy cuenta de que rootear borrará todo para desbloquear (si solo hubiera leído eso primero), y estoy tratando de hacer una copia de seguridad de todas las aplicaciones datos para el usuario secundario.
Cuando intento ejecutar cualquier copia de seguridad basada en adb en el usuario secundario, simplemente se bloquea y luego se agota el tiempo de espera, creando un archivo .ab vacío. La cuenta de usuario del propietario se respalda correctamente.
¿Algunas ideas? ¿Es el multiusuario demasiado nuevo? Me encontré con otras cosas molestas con él (ningún cliente VPN se conectará, no puedo acceder a la configuración del desarrollador, ni siquiera puedo cambiar la configuración de TIEMPO, etc.)
¡Gracias!
Si tiene Android 4.2.2, hay una forma de desbloquear el gestor de arranque sin borrar el dispositivo. Use towelroot para rootear su dispositivo. (Funciona en un neuxs 7 siempre que tenga una compilación del kernel < 3 de junio). Luego, puede usar la siguiente aplicación para desbloquear el gestor de arranque (no borra el dispositivo). Luego, puede usar la copia de seguridad de titanio para hacer una copia de seguridad de todo en su dispositivo, incluso cuando haya iniciado sesión como usuario secundario.
Sería útil ser más explícito en lo que está haciendo, como comandos adb específicos, aunque creo que me encuentro con el mismo problema.
Creo que lo que está sucediendo en su situación es que (sin querer) está realizando una copia de seguridad del usuario Propietario. Dado que se encuentra en el perfil de usuario secundario, no verá la indicación para iniciar la copia de seguridad para el usuario Propietario . Entonces adb se cuelga esperando una confirmación que nunca ves.
Una cosa importante a tener en cuenta es que las sesiones de adb siempre se ejecutan en el contexto del usuario Propietario. Entonces, si no está pasando una identificación de usuario al proceso de copia de seguridad, estará haciendo una copia de seguridad del perfil del Propietario.
Entonces, ¿cómo se inicia una copia de seguridad/restauración en un perfil que no es de propietario? Es útil saber que los comandos de copia de seguridad y restauración de adb terminan ejecutándose bu
en el sistema. Cuando ejecuta bu help
desde el shell de adb, este es el resultado que obtengo:
sunfish:/ $ bu help
backup [-user USER_ID] [-f FILE] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared]
[-all] [-system|-nosystem] [-keyvalue|-nokeyvalue] [PACKAGE...]
write an archive of the device's data to FILE [default=backup.adb]
package list optional if -all/-shared are supplied
-user: user ID for which to perform the operation (default - system user)
-apk/-noapk: do/don't back up .apk files (default -noapk)
-obb/-noobb: do/don't back up .obb files (default -noobb)
-shared|-noshared: do/don't back up shared storage (default -noshared)
-all: back up all installed applications
-system|-nosystem: include system apps in -all (default -system)
-keyvalue|-nokeyvalue: include apps that perform key/value backups.
(default -nokeyvalue)
restore [-user USER_ID] FILE restore device contents from FILE
-user: user ID for which to perform the operation (default - system user)
Bien, genial, aparentemente hay una -user
opción. ¡Gran! Así que ahora intento ejecutar una restauración para un usuario secundario desde adb y esto es lo que obtengo:
$ ./platform-tools/adb restore -user 11 <path to android backup>
WARNING: adb restore is deprecated and may be removed in a future release
adb: restore requires an argument
De acuerdo, tal vez sea quisquilloso y quiera el archivo de copia de seguridad como primer argumento. Pero esto da como resultado la misma salida. No he descubierto por qué adb no aceptará el -user
argumento.
Pero hay otra opción, podemos ejecutar bu
directamente desde el shell adb. Desafortunadamente, todavía tengo que hacer que esto funcione bien, pero avanzo más. Primero cargo la copia de seguridad en el perfil del Propietario y ejecuto bu
desde el perfil del Propietario usando el shell adb. No conozco ninguna forma de obtener un shell adb en un perfil que no sea de propietario. Sin embargo, esto no debería ser un problema porque para eso es el -user
argumento. He intentado dos escenarios en vano.
bu -user <uid> <backup file>
mientras está conectado al perfil de ese uid, en este caso uid 11. No veo ningún mensaje de confirmación de restauración ni ocurre nada visualmente. Aquí hay líneas logcat relevantes:03-14 17:58:29.286 11753 11753 D AndroidRuntime: Calling main entry com.android.commands.bu.Backup
03-14 17:58:29.288 11753 11753 D bu : Beginning: restore
03-14 17:58:29.289 1493 1731 I BackupManagerService: [UserID:11] Beginning restore...
03-14 17:58:29.289 1493 1731 D BackupManagerService: [UserID:11] Starting restore confirmation UI, token=30388736403-14 17:58:29.289 1493 1731 I ActivityTaskManager: START u0 {act=fullrest flg=0x20000000 cmp=com.android.backupconfirm/.BackupRestoreConfirmation (has extras)} from uid 1000
03-14 17:58:29.289 1493 1731 W ActivityTaskManager: startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent {act=fullrest flg=0x20800000 cmp=com.android.backupconfirm/.BackupRestoreConfirmation (has extras) }
03-14 17:58:29.293 1493 1731 D BackupManagerService: [UserID:11] Waiting for restore completion...
03-14 17:59:29.388 1493 25093 I BackupManagerService: Full backup/restore timedout waiting for user confirmation
03-14 17:59:29.388 1493 1731 I BackupManagerService: [UserID:11] adb restore processing complete.
03-14 17:59:29.388 11753 11753 D bu : Finished.
Como se puede ver, BackupManagerService sabe que estoy solicitando una restauración de uid 11. También dice que está iniciando la interfaz de usuario de confirmación, aunque no veo nada. Eventualmente, las solicitudes expiran.
bu -user <uid> <backup file>
mientras está conectado al perfil de Propietario. Aquí hay líneas logcat relevantes:03-14 18:00:39.448 11948 11948 D AndroidRuntime: Calling main entry com.android.commands.bu.Backup
03-14 18:00:39.450 11948 11948 D bu : Beginning: restore
03-14 18:00:39.451 1493 2786 I BackupManagerService: [UserID:11] Beginning restore...
03-14 18:00:39.451 1493 2786 D BackupManagerService: [UserID:11] Starting restore confirmation UI, token=606614021
03-14 18:00:39.451 1493 2786 I ActivityTaskManager: START u0 {act=fullrest flg=0x20000000 cmp=com.android.backupconfirm/.BackupRestoreConfirmation (has extras)} from uid 1000
03-14 18:00:39.451 1493 2786 W ActivityTaskManager: startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { act=fullrest flg=0x20800000 cmp=com.android.backupconfirm/.BackupRestoreConfirmation (has extras) }
03-14 18:00:39.459 1493 1994 W ActivityTaskManager: Tried to set launchTime (0) < mLastActivityLaunchTime (22366588)
03-14 18:00:39.462 1493 2786 D BackupManagerService: [UserID:11] Waiting for restore completion...
03-14 18:00:39.572 1493 1757 I ActivityTaskManager: Displayed com.android.backupconfirm/.BackupRestoreConfirmation: +112ms
03-14 18:00:43.431 1493 5565 D BackupManagerService: [UserID:0] acknowledgeAdbBackupOrRestore : token=606614021 allow=true
03-14 18:00:43.432 1493 5565 W BackupManagerService: [UserID:0] Attempted to ack full backup/restore with invalid token
03-14 18:00:46.213 1493 2063 D InputDispatcher: Waiting to send key to Window{200410c u0 com.android.backupconfirm/com.android.backupconfirm.BackupRestoreConfirmation} because there are unprocessed events that may cause focus to change
03-14 18:01:39.563 1493 25093 I BackupManagerService: Full backup/restore timed out waiting for user confirmation
03-14 18:01:39.563 1493 2786 I BackupManagerService: [UserID:11] adb restore processing complete.
03-14 18:01:39.564 11948 11948 D bu : Finished.
Como en el primer intento, vemos que BackupManagerService está intentando realizar una restauración para uid 11. Inicia la interfaz de usuario de confirmación, que aparece. Luego confirmo la restauración. Pero luego vemos que su uid 0 confirma la restauración y creo que es por eso que el token resultante no es válido. Tiene sentido, ¿por qué un perfil debería poder confirmar la copia de seguridad/restauración de otro? (tiene un poco más de sentido que el perfil de Propietario pueda hacer eso)
Así que creo que me he topado con un obstáculo aquí. No estoy seguro de cómo hacer que la interfaz de usuario de confirmación se ejecute en el usuario correcto. Sospecho que esto (¡todavía!) no ha sido probado por la comunidad de Android, aunque ¿por qué tener una -user
opción?
Aquí hay algunos otros mensajes de registro que pueden ser pistas sobre el camino a seguir:
03-14 18:00:28.422 1493 5597 W WindowManager: Attempted to set replacing window on app token with no content Token{b3c5879 ActivityRecord{23cb9be u0 com.android.backupconfirm/.BackupRestoreConfirmation t1100006}}
03-14 18:00:28.610 1493 2786 I ActivityTaskManager: Activity reported stop, but no longer stopping: ActivityRecord{23cb9be u0 com.android.backupconfirm/.BackupRestoreConfirmation t1100006}
03-14 18:00:37.042 1493 2063 D InputDispatcher: Waiting to send key to Window{6f7d966 u0 com.android.backupconfirm/com.android.backupconfirm.BackupRestoreConfirmation} because there are unprocessed events that may cause focus to change
dumpsys backup users
informó? En mi Android, el servicio de copia de seguridad no se estaba ejecutando para mi cuenta de usuario secundaria, incluso cuando dicha cuenta de usuario estaba activa en el dispositivo. Por lo tanto, -user
no funcionó en mi opinión.No creo que haya forma de encontrar un exploit que permita la raíz. adb backup -apk -shared -all
solo realiza copias de seguridad para el usuario 0 tanto para /data/user/ como para /storage/emulated/ (para dispositivos que no tienen almacenamiento ampliable). No hubo suerte con 4.4 tampoco.
izzy
adb devices
Lista el Nexus?alteradoNate
adb devices
, pero cuando lo ejecutoadb backup...
y dice "desbloquee su dispositivo y confirme...", nunca se muestra nada en la pantalla. tableta. Nuevamente, como propietario, se muestra el mensaje y la copia de seguridad funciona.Raghav Sood
alteradoNate