3 votes

J'ai restauré "App+Data" avec Titanium Backup pour com.Android.providers.telephony et maintenant la messagerie se bloque.

J'ai un Moto G 4ème édition (harpia) fonctionnant sous LineageOS 14.1 nightly. J'essayais de déboguer certains problèmes avec ses MMS et j'ai utilisé Titanium Backup pour prendre une sauvegarde des paramètres APN parce que j'étais sur le point de suivre certains tutoriels et je voulais savoir que je pourrais certainement les défaire si j'en avais besoin. Je n'ai pas réussi à résoudre le problème, alors j'ai essayé de restaurer les paramètres en utilisant Titanium Backup. Lors de la restauration des paramètres, il m'a été demandé si je voulais restaurer App, Data ou App+Data. Sans trop y réfléchir, j'ai cliqué sur "App+Data". Ensuite, je suis retourné à la page des paramètres APN pour voir si les paramètres APN que j'avais étaient restaurés. Lorsque j'ai cliqué sur un APN, il a planté. Je pense que l'exception en question est :

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)

(Mais un autre message suspect que je vois est 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) .) J'ai contacté Titanium Track via leur page "Contactez-nous" mais je n'ai pas encore reçu de réponse (cela fait seulement 36 heures). Entre-temps, j'ai remarqué que je ne peux même pas utiliser l'application Messagerie de mon téléphone. Lorsque j'essaie d'entrer dans une conversation SMS, elle se bloque. Je pense que l'exception à cette règle est :

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

Sur la base de ces deux exceptions, je suppose que je n'aurais pas dû restaurer l'application mais seulement les données, et que certaines métadonnées importantes de l'application ont été perdues ou n'ont pas été restaurées correctement. Cependant, je ne sais pas où je pourrais trouver ces métadonnées ou ce qu'elles devraient être.

  • J'ai essayé TWRP "Restore Contexts".
  • Quelqu'un sur le /r/Android Discourse m'a suggéré de charger la même ROM. Malheureusement, le support de LineageOS sur mon appareil est interrompu et il n'y a pas d'images à télécharger. J'ai essayé de réutiliser la dernière mise à jour de /data/lineageos_updates mais cela n'a pas résolu mon problème.
  • J'ai fait une sauvegarde de mon téléphone dans son état actuel (semi-fonctionnel) et j'ai essayé d'effacer les données de l'application de messagerie, du fournisseur de téléphonie, de l'application de paramètres, mais j'ai toujours les mêmes plantages.

Quelqu'un a-t-il déjà vu ces exceptions ? Quels sont ces fournisseurs ? Où sont-ils conservés sur un système Android normal ? Qu'est-ce qui les crée, et y a-t-il un moyen de les faire créer manuellement ?

3voto

Ethan Points 61

OK, j'ai compris. Pour la postérité, voici le processus que j'ai suivi.

  • J'ai fait une sauvegarde complète en utilisant TWRP avant d'empirer les choses.

  • J'ai eu la chance d'avoir une idée assez précise de ce que j'avais fait pour que tout se passe mal (restaurer "App+Data"). Cela signifie que je pouvais recommencer et essayer de comprendre ce que l'application avait fait. J'ai utilisé find sur l'appareil pour obtenir une liste de tous les fichiers qui ont été modifiés lorsque j'ai fait la mauvaise restauration. (busybox find n'a pas -mmin alors j'ai fait touch somefile; [do the bad thing]; find . -newer somefile .) Cela m'a donné une liste de fichiers "suspects" : quelques trucs dans la partition de données /data/data des trucs dans /data/misc/profiles que je n'arrivais pas à comprendre ; certaines choses en /data/app y compris un APK et des trucs ODEX ; et une poignée de fichiers en /data/system : users/0/runtime-permissions.xml , users/0/package-restrictions.xml , packages.xml , packages.list et quelques autres.

  • Dans Titanium Backup, l'élément restauré (" Phone and Messaging ") semble en fait être un alias de com.android.providers.telephony -- Lorsque vous cliquez sur "Ouvrir les détails du système", c'est l'application qui s'affiche. Cela correspond en quelque sorte aux erreurs des journaux.

  • J'ai trouvé https://github.com/TilesOrganization/support/wiki/How-to-use-ADB-to-grant-permissions y https://gist.github.com/Arinerron/1bcaadc7b1cbeae77de0263f4e15156f qui étaient intéressants. Quand j'ai essayé de adb pm dump el com.android.providers.telephony paquet, j'ai vu qu'il avait WRITE_APN_SETTINGS: granted=true . Cela m'a conforté dans l'idée que les autorisations n'étaient pas vraiment le problème.

  • J'ai aussi regardé dans le /data/data para la com.android.providers.telephony paquet. Tout appartenait à system plutôt que par un compte spécifique à l'application, mais peut-être que c'était OK. restorecon n'a rien fait sur aucun de ces fichiers non plus.

  • Parmi les choses que j'ai essayées pour que tout fonctionne à nouveau, j'ai flashé LineageOS 15.1 à partir d'un post aléatoire sur XDA-Developers. Cela a entraîné d'autres problèmes, mais au moins mon application de messagerie ne plantait plus. Cela m'a donné un état "connu et bon". A partir de là, j'ai adb pull ed un tas de trucs de /data : system , misc , app , user_de , data .

  • J'ai parcouru tous les fichiers à la recherche de telephony puisque j'étais presque sûr que c'était la chose qui avait été mal restaurée. Rien dans runtime-permissions.xml avait telephony (et je n'ai pas vraiment soupçonné de permissions de toute façon à cause de la WRITE_APN_SETTINGS chose, ci-dessus). package-restrictions.xml semblait OK -- il n'y avait qu'une seule entrée qui faisait référence au providers et il n'y avait rien dedans à part stopped="true" . ( telephony s'est produite dans d'autres entrées pour d'autres paquets, mais toujours sous enabled-components donc cela me semblait correct). telephony est apparu dans packages.xml mais je ne comprenais pas assez le format des données pour savoir ce qu'il disait. (Les attributs présents sont ft , it , ut y isOrphaned .)

  • En comparant les packages.xml de l'installation 14.1 "cassée" et celle de l'installation 15.1 "fonctionnelle", j'ai fait quelques progrès. De la version 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 version 15.1 "de travail" :

    <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>

OK ! Il semble que le codePath y nativeLibraryPath sont foutus. Il est possible que le ft , it y ut les champs aussi. Je ne sais toujours pas à quoi ils servent, mais ils correspondent à des champs dans d'autres applications dans le cadre de l'initiative de l'UE. packages.xml fichier. Ils représentent peut-être une sorte de partage inter-applications. Quoi qu'il en soit, j'ai utilisé vim sur l'appareil pour faire quelques changements -- d'abord en supprimant stopped de package-restrictions.xml et (lorsque cela n'a pas fonctionné) en éditant packages.xml pour fusionner les deux entrées en une seule <package> avec l'entrée codePath , nativeLibraryPath , ft , it y ut des champs de la <updated-package> (et ensuite supprimer l'élément <updated-package> ). J'ai redémarré le téléphone après chaque modification pour voir si cela fonctionnait. Je peux à nouveau modifier les APN et lire les SMS, ce qui est appréciable.

J'ai pu trouver https://dzone.com/articles/depth-Android-package-manager qui dit que le ft , it y ut Les champs représentent des timestamps donc probablement ils ne correspondent à rien de particulier. Les chemins ont probablement été le changement essentiel.

Dans l'ensemble, je dirais que je pense qu'Android pourrait un jour devenir aussi accessible et convivial que Linux, à condition de faire suffisamment d'efforts. Je ne pense même pas que cela nécessiterait quelque chose de difficile - juste plus d'efforts pour documenter comment les choses fonctionnent du point de vue de l'utilisateur/administrateur système (pour équilibrer toute la documentation existante sur comment les choses fonctionnent du point de vue du développeur d'applications). Un bon exemple serait "Qu'est-ce que le fichier package.xml et que signifient ft, it, et ut". Ce serait également formidable si la source de vérité pour les distributions Android n'était pas un forum incrusté de publicités comme XDA, mais bon, un pas après l'autre.

0voto

Russ Lockwood Points 11

Aujourd'hui, j'ai fait la même erreur (en restaurant toute l'application "Phone and SMS Storage" avec Titanium Backup) et je l'ai résolue en

  • en la désinstallant depuis TitaniumBackup (un avertissement est apparu, mais j'ai pu l'ignorer sans risque et la désinstallation de la mise à jour n'est pas possible via les paramètres normaux de l'application Android)
  • et de restaurer ensuite mes SMS à partir d'un fichier XML (Titanium Backup -> Bouton de menu -> Restaurer les données à partir de XML...).

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X