3 votos

Restaurado "App+Data" con Titanium Backup para com.Android.providers.telephony y ahora la mensajería se bloquea

Tengo un Moto G 4th Edition (harpia) corriendo LineageOS 14.1 nightly. Estaba tratando de depurar algunos problemas con sus MMS y usé Titanium Backup para tomar una copia de seguridad de la configuración de APN porque estaba a punto de seguir algunos tutoriales y quería saber que ciertamente podría deshacerlos si lo necesitaba. No pude solucionar el problema, así que intenté restaurar usando Titanium Backup. Cuando estaba restaurando los ajustes, me preguntó si quería restaurar App, Datos o App+Datos. Sin pensarlo demasiado, hice clic en "App+Data". A continuación, volví a la página de ajustes de APN para ver si los ajustes de APN que tenía se habían restaurado. Cuando hice clic en un APN, se bloqueó. Creo que la excepción en cuestión es:

06-27 18:44:22.454  2067  3374 E DatabaseUtils: java.lang.SecurityException: Permission Denial: reading com.android.providers.telephony.TelephonyProvider uri content://telephony/carriers/1265 from pid=4901, uid=1000 requires the provider be exported, or grantUriPermission()
06-27 18:44:22.454  2067  3374 E DatabaseUtils:     at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:608)
06-27 18:44:22.454  2067  3374 E DatabaseUtils:     at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:483)
06-27 18:44:22.454  2067  3374 E DatabaseUtils:     at android.content.ContentProvider$Transport.query(ContentProvider.java:212)
06-27 18:44:22.454  2067  3374 E DatabaseUtils:     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
06-27 18:44:22.454  2067  3374 E DatabaseUtils:     at android.os.Binder.execTransact(Binder.java:565)

(Pero otro mensaje sospechoso que veo es 06-27 18:44:20.760 2067 5631 W ContextImpl: Failed to ensure /data/user_de/0/com.android.settings/databases: mkdir failed: EACCES (Permission denied) .) Me puse en contacto con Titanium Track a través de su página de "Contacto", pero no he obtenido respuesta hasta ahora (sólo han pasado unas 36 horas). Mientras tanto, me he dado cuenta de que tampoco puedo utilizar la aplicación de mensajería de mi teléfono. Cuando intento entrar en una conversación por SMS, se bloquea. Creo que la excepción es:

06-27 18:43:54.101  1141  2774 W ActivityManager: Permission Denial: opening provider com.android.providers.telephony.SmsProvider from ProcessRecord{890eeb3 3530:com.android.messaging/u0a73} (pid=3530, uid=10073) that is not exported from uid 1001
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel: wtf
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel: SyncMessagesAction: unexpected failure in scan
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.telephony.SmsProvider from ProcessRecord{890eeb3 3530:com.android.messaging/u0a73} (pid=3530, uid=10073) that is not exported from uid 1001
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.os.Parcel.readException(Parcel.java:1684)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.os.Parcel.readException(Parcel.java:1637)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:4199)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.app.ActivityThread.acquireProvider(ActivityThread.java:5534)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2239)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1520)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.content.ContentResolver.query(ContentResolver.java:518)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.content.ContentResolver.query(ContentResolver.java:475)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.mmslib.a.VL(SourceFile:40)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.sms.i.ahs(SourceFile:1498)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.sms.DatabaseMessages$SmsMessage.getProjection(SourceFile:120)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.datamodel.action.q.<init>(SourceFile:450)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.datamodel.action.m.Lg(SourceFile:131)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.datamodel.action.SyncMessagesAction.Jf(SourceFile:293)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.datamodel.action.SyncMessagesAction.IU(SourceFile:244)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.datamodel.action.BackgroundWorkerService.Kk(SourceFile:146)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at com.android.messaging.datamodel.action.BackgroundWorkerService.onHandleIntent(SourceFile:123)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.os.Handler.dispatchMessage(Handler.java:102)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.os.Looper.loop(Looper.java:154)
06-27 18:43:54.103  3530  3843 F MessagingAppDataModel:     at android.os.HandlerThread.run(HandlerThread.java:61)
06-27 18:43:54.103  3530  3843 E MessagingAppDataModel: SyncMessagesAction: unexpected failure in scan

Basándome en estas dos excepciones, supongo que no debería haber restaurado la aplicación sino sólo los datos, y algunos metadatos importantes de la aplicación se perdieron o no se restauraron correctamente. Sin embargo, no estoy seguro de dónde podría encontrar esos metadatos o cuáles deberían ser.

  • He probado con TWRP "Restore Contexts".
  • Alguien en el /r/Android El discurso me sugirió cargar suciamente la misma ROM. Desafortunadamente el soporte para LineageOS en mi teléfono está descontinuado y no hay imágenes para descargar. Intenté reutilizar la última actualización de /data/lineageos_updates pero eso no solucionó mi problema.
  • Hice una copia de seguridad de mi teléfono en su estado actual (semiprofesional) y he probado a borrar los datos de la aplicación de mensajería, del proveedor de telefonía, de la aplicación de ajustes, pero sigo teniendo los mismos fallos.

¿Alguien ha visto estas excepciones antes? ¿Qué son estos proveedores? ¿Dónde se guardan en un sistema Android normal? ¿Qué los crea, y hay una manera de hacer que se creen manualmente?

0 votos

Parece que por alguna razón los permisos (aquí: propiedad) de la aplicación se desordenaron. Usted podría tratar de averiguar dónde (lo que el archivo; lo más probable es el APK) y arreglar eso - o simplemente realizar un "flash sucio" de la misma ROM, que debe arreglar implícitamente ("sucio" significa sin restablecimiento de fábrica, etc, por lo que todas sus aplicaciones, configuraciones y tal no se tocan). Y sí, con las aplicaciones del sistema, normalmente sólo se restauran los datos ;)

0 votos

He intentado hacer un "dirty flash" varias veces (borrar la partición del sistema, sideload la última Lineage 14.1 disponible para mi dispositivo, sideload un paquete de gapps con borrado de caché y caché Dalvik). No se soluciona el problema. (No sólo eso, sino que cuando lo hago, empiezo a recibir errores de "El calendario se ha detenido").

3voto

Ihor Bats Puntos 14

Vale, ya lo he resuelto. Para la posteridad, aquí está el proceso que hice.

  • Hice una copia de seguridad completa usando TWRP antes de empeorar nada.

  • Tuve la suerte de tener una idea bastante clara de lo que había hecho para que todo saliera mal (restaurar "App+Data"). Eso significaba que podía hacerlo de nuevo y tratar de tener una idea de lo que la aplicación había hecho. Utilicé find en el dispositivo para obtener una lista de todos los archivos que se cambiaron cuando hice la mala restauración. (busybox find no tiene -mmin así que lo hice touch somefile; [do the bad thing]; find . -newer somefile .) Esto me dio una lista de archivos "sospechosos": algunas cosas en la partición de datos /data/data , algunas cosas en /data/misc/profiles que no pude entender; algunas cosas en /data/app incluyendo un APK y cosas de ODEX; y un puñado de archivos en /data/system : users/0/runtime-permissions.xml , users/0/package-restrictions.xml , packages.xml , packages.list y algunos otros.

  • En Titanium Backup, lo que se estaba restaurando ("Teléfono y Mensajería") parece ser en realidad un alias de com.android.providers.telephony -- al hacer clic en "Abrir detalles del sistema", esa es la "Aplicación" que aparece. Esto coincide con los errores de los registros.

  • He encontrado https://github.com/TilesOrganization/support/wiki/How-to-use-ADB-to-grant-permissions y https://gist.github.com/Arinerron/1bcaadc7b1cbeae77de0263f4e15156f que eran interesantes. Cuando intenté adb pm dump el com.android.providers.telephony paquete, vi que tenía WRITE_APN_SETTINGS: granted=true . Esto aumentó mi confianza en que los permisos no eran realmente el problema.

  • También miré a través de la /data/data para el com.android.providers.telephony paquete. Todo era propiedad de system en lugar de por una cuenta específica de la aplicación, pero tal vez eso estaba bien. restorecon tampoco hizo nada en ninguno de esos archivos.

  • Entre las cosas que probé para que las cosas volvieran a funcionar fue flashear LineageOS 15.1 desde un post al azar en XDA-Developers. Eso llevó a otros problemas, pero al menos mi aplicación de mensajería no se estrelló más. Esto me dio un estado "bueno conocido". A partir de esto adb pull ed un montón de cosas de /data : system , misc , app , user_de , data .

  • Revisé todos los archivos en busca de telephony ya que estaba bastante seguro de que eso era lo que se había restaurado mal. Nada en runtime-permissions.xml tenía telephony en él (y en realidad no sospechaba de los permisos de todos modos debido a la WRITE_APN_SETTINGS cosa, arriba). package-restrictions.xml parecía estar bien - sólo había una entrada que hacía referencia a la providers paquete y no había nada en él excepto stopped="true" . ( telephony se produjo en algunas otras entradas para otros paquetes, pero siempre bajo enabled-components Así que me pareció bien). telephony apareció en packages.xml pero no entendí lo suficiente el formato de los datos para saber lo que decía. (Los atributos presentes son ft , it , ut y isOrphaned .)

  • Comparando el packages.xml de la instalación "rota" de la 14.1 y la de la instalación "funcional" de la 15.1, he hecho algunos progresos. De la versión 14.1:

    <package name="com.android.providers.telephony" codePath="/data/app/com.android.providers.telephony-2" nativeLibraryPath="/data/app/com.android.providers.telephony-2/lib" publicFlags="1007402629" privateFlags="8" ft="16b952851c0" it="11e8f7d4c00" ut="16b95285980" version="25" sharedUserId="1001" installer="com.android.vending" isOrphaned="true">
        <sigs count="1">
            <cert index="1" />
        </sigs>
        <perms>
        <!-- Some stuff that I disregarded because again I didn't think this was a permissions issue -->
        </perms>
        <proper-signing-keyset identifier="1" />
    </package>

    <!-- much later... --> <updated-package name="com.android.providers.telephony" codePath="/system/priv-app/TelephonyProvider" ft="11e8f7d4c00" it="11e8f7d4c00" ut="11e8f7d4c00" version="25" nativeLibraryPath="/system/priv-app/TelephonyProvider/lib" sharedUserId="1001" />

De la versión 15.1 "que funciona":

    <package name="com.android.providers.telephony" codePath="/system/priv-app/TelephonyProvider" nativeLibraryPath="/system/priv-app/TelephonyProvider/lib" publicFlags="1007402501" privateFlags="8" ft="11e8e4f2c40" it="11e8e4f2c40" ut="11e8e4f2c40" version="27" sharedUserId="1001" isOrphaned="true">
        <sigs count="1">
            <cert index="1" />
        </sigs>
        <perms>
        <!-- snip -->
        </perms>
        <proper-signing-keyset identifier="97" />
    </package>

¡UNA VEZ MÁS! Parece que el codePath y nativeLibraryPath están jodidos. Posiblemente el ft , it y ut campos también. Todavía no sé realmente para qué sirven, pero corresponden a campos de otras aplicaciones en el packages.xml archivo. Tal vez representen algún tipo de intercambio entre aplicaciones. De todos modos, usé vim en el dispositivo para hacer algunos cambios -- primero eliminando stopped de package-restrictions.xml y (cuando eso no funcionó) editar packages.xml para fusionar las dos entradas en una sola <package> con el codePath , nativeLibraryPath , ft , it y ut campos de la <updated-package> (y luego borrar el elemento <updated-package> ). He reiniciado el teléfono después de cada cambio para ver si funcionaba. Puedo editar APNs / leer mensajes SMS de nuevo, así que eso es bueno.

Pude encontrar https://dzone.com/articles/depth-Android-package-manager que dice que el ft , it y ut Los campos representan marcas de tiempo, por lo que probablemente no correspondan a nada en particular. Probablemente las rutas fueron el cambio esencial.

En general, creo que Android podría llegar a ser un día tan accesible y fácil de usar como Linux, con el suficiente esfuerzo. Ni siquiera creo que requiera nada difícil, sólo un mayor esfuerzo para documentar cómo funcionan las cosas desde la perspectiva del usuario/administrador del sistema (para equilibrar toda la documentación existente sobre cómo funcionan las cosas desde la perspectiva del desarrollador de aplicaciones). Un buen ejemplo sería "Qué es el archivo package.xml y qué significan ft, it y ut". También sería genial si la fuente de la verdad para las distribuciones de Android no fuera un foro incrustado de publicidad como XDA, pero bueno, un paso a la vez.

0 votos

Parece que TiBu restauró el APK como aplicación de usuario y luego estropeó el XML considerando que era una aplicación de usuario - ignorando así el "estado del sistema". Aparte de que ambos sabemos a estas alturas que no se debe restaurar "app + data" en una app de sistema, como TiBu ofrece esta opción no debería estropearlo. Me alegra ver que lo has solucionado finalmente; pero sin duda sería una buena idea informar de esto a Joël (el desarrollador de TiBu) para que pueda arreglarlo. ¡¡¡Gracias por compartir tu evaluación y solución!!!

0voto

JepZ Puntos 131

Hoy he cometido el mismo error (restaurar toda la aplicación 'Almacenamiento de Teléfono y SMS' con Titanium Backup) y lo he solucionado

  • desinstalarlo desde TitaniumBackup (apareció una advertencia, pero para mí fue seguro ignorarla y desinstalar la actualización no es posible a través de la configuración normal de la aplicación de Android)
  • y restaurar mis SMS desde un archivo XML después (Titanium Backup -> Botón de menú -> Restaurar datos desde XML...).

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X