0 votes

"L'installateur de paquets a cessé de fonctionner" après la mise à niveau vers OxygenOS 3.1.4 (Marshmallow)

J'ai mis à niveau mon téléphone OnePlus X (enraciné) de Oxygen OS 2.2.x à 3.1.4 (mise à niveau sale, de Lollipop à Marshmallow).

Depuis que j'ai fait cela, la vue des paramètres se bloque avec le message "Unfortunately, Package installer has stopped" lorsque j'essaie d'afficher les détails de l'autorisation pour les éléments suivants un peu de les applications. Par exemple, lorsque j'essaie d'afficher les autorisations pour Hangouts (Paramètres > Applications > Hangouts > autorisations), la boîte de dialogue ci-dessus apparaît et le résultat suivant est affiché dans logcat :

AndroidRuntime: FATAL EXCEPTION: main
AndroidRuntime: Process: com.android.packageinstaller, PID: 16689
AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.packageinstaller/com.android.packageinstaller.permission.ui.ManagePermissionsActivity}: java.lang.SecurityException: com.google.android.talk from uid 10100 not allowed to perform WRITE_CONTACTS
AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2493)
AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2576)
AndroidRuntime:        at android.app.ActivityThread.access$1000(ActivityThread.java:155)
AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:102)
AndroidRuntime:        at android.os.Looper.loop(Looper.java:148)
AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:5539)
AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
AndroidRuntime:        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
AndroidRuntime: Caused by: java.lang.SecurityException: com.google.android.talk from uid 10100 not allowed to perform WRITE_CONTACTS
AndroidRuntime:        at android.app.AppOpsManager.checkOp(AppOpsManager.java:1521)
AndroidRuntime:        at com.android.packageinstaller.permission.model.AppPermissionGroup.create(AppPermissionGroup.java:152)
AndroidRuntime:        at com.android.packageinstaller.permission.model.AppPermissionGroup.create(AppPermissionGroup.java:94)
AndroidRuntime:        at com.android.packageinstaller.permission.model.AppPermissions.loadPermissionGroups(AppPermissions.java:136)
AndroidRuntime:        at com.android.packageinstaller.permission.model.AppPermissions.<init>(AppPermissions.java:66)
AndroidRuntime:        at com.android.packageinstaller.permission.ui.handheld.AppPermissionsFragment.onCreate(AppPermissionsFragment.java:105)
AndroidRuntime:        at android.app.Fragment.performCreate(Fragment.java:2198)
AndroidRuntime:        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
AndroidRuntime:        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
AndroidRuntime:        at android.app.BackStackRecord.run(BackStackRecord.java:793)
AndroidRuntime:        at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
AndroidRuntime:        at android.app.FragmentController.execPendingActions(FragmentController.java:325)
AndroidRuntime:        at android.app.Activity.performStart(Activity.java:6305)
AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2456)
AndroidRuntime:        ... 9 more

Et lorsque j'ouvre l'accès Paramètres > Apps > Icône Gears > Autorisations d'accès, l'activité Android apparaît brièvement, puis se ferme. Il n'y a pas de boîte de dialogue d'erreur, mais logcat affiche l'erreur suivante :

AndroidRuntime: FATAL EXCEPTION: AsyncTask #4
AndroidRuntime: Process: com.android.packageinstaller, PID: 19194
AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground()
AndroidRuntime:        at android.os.AsyncTask$3.done(AsyncTask.java:309)
AndroidRuntime:        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
AndroidRuntime:        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
AndroidRuntime:        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
AndroidRuntime:        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
AndroidRuntime:        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
AndroidRuntime:        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
AndroidRuntime:        at java.lang.Thread.run(Thread.java:818)
AndroidRuntime: Caused by: java.lang.SecurityException: com.ubercab from uid 10102 not allowed to perform CAMERA
AndroidRuntime:        at android.app.AppOpsManager.checkOp(AppOpsManager.java:1521)
AndroidRuntime:        at com.android.packageinstaller.permission.model.AppPermissionGroup.create(AppPermissionGroup.java:152)
AndroidRuntime:        at com.android.packageinstaller.permission.model.PermissionApps.loadPermissionApps(PermissionApps.java:189)
AndroidRuntime:        at com.android.packageinstaller.permission.model.PermissionApps.-wrap0(PermissionApps.java)
AndroidRuntime:        at com.android.packageinstaller.permission.model.PermissionApps$PermissionAppsLoader.doInBackground(PermissionApps.java:375)
AndroidRuntime:        at com.android.packageinstaller.permission.model.PermissionApps$PermissionAppsLoader.doInBackground(PermissionApps.java:374)
AndroidRuntime:        at android.os.AsyncTask$2.call(AsyncTask.java:295)
AndroidRuntime:        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
AndroidRuntime:        ... 4 more

Pourquoi cela se produit-il, et comment puis-je y remédier ?

0voto

Rob W Points 270

Les deux messages d'erreur de la question comprennent un message au format suivant :

java.lang.SecurityException : [app id] de uid [user id] n'est pas autorisé à exécuter [permission id].

Je me suis souvenu que pour les applications concernées, j'avais déjà désactivé certaines permissions à l'aide de la fonction "App Permissions" d'OxygenOS 2/Lollipop. Dans OxygenOS 3/Marshmallow, "App Permissions" a été remplacé par le système de gestion des autorisations d'Android 6. Bien que l'interface utilisateur ait disparu après la mise à niveau, le backend n'a pas disparu et a provoqué des plantages lorsque la page des paramètres a tenté de vérifier la permission.

Pour résoudre ces problèmes, j'ai supprimé certaines autorisations d'appops, comme suit :

  1. Au téléphone : Activez le "débogage USB" (Paramètres > Options du développeur > Débogage USB).
  2. Connectez votre téléphone à votre ordinateur (où ADB est installé).
  3. Sur l'ordinateur : Démarrez adb logcat pour obtenir un flux continu de messages de journal (vous pouvez également utiliser Logcat sur le téléphone, mais il est plus facile d'utiliser l'ordinateur car vous aurez besoin de l'espace écran du téléphone à une étape ultérieure).
  4. Sur l'ordinateur : Utilisez adb shell pour obtenir un shell (Root est très probablement no nécessaire).
  5. Répétez maintenant les étapes suivantes pour chaque application dans Paramètres > Apps :

    • Tapez sur l'icône de l'application pour afficher ses paramètres.

    • Si la section "Autorisations" n'est pas vide, ignorez les étapes suivantes et passez à l'application suivante (par exemple, lorsqu'elle affiche "Aucune autorisation accordée" ou "Aucune autorisation demandée" ou une autorisation spécifique telle que "Localisation").

    • Sinon (la section "Permission" est vide), tapez sur "Permissions".

    • Maintenant vous verrez "Package installer has stopped working".

    • Regardez la sortie de logcat, et recherchez le message suivant :

      java.lang.RuntimeException : Unable to start receiver com.Android.packageinstaller.permission.model.PermissionStatusReceiver : java.lang.SecurityException : com.google.Android.talk de l'uid 10100 non autorisé à exécuter WRITE_CONTACTS

      Dans les exemples ci-dessous, je vais utiliser com.google.Android.talk comme identifiant de l'application et WRITE_CONTACTS comme identifiant de l'opération/permission.

    • OPTIONNEL : Regardez d'abord l'opération existante, au cas où vous voulez restaurer la valeur originale (dans ce cas, la sortie est "WRITE_CONTACTS : deny"), exécutez ce qui suit dans adb shell :

      appops get com.google.android.talk WRITE_CONTACTS

      ( Exécutez "appops" sans arguments pour plus d'options et d'aide. .)

    • Autorisez l'opération, en exécutant la commande suivante dans l'interface de l'entreprise adb shell (si cela ne fonctionne pas, essayez "allow" au lieu de "default") :

      appops set com.google.android.talk WRITE_CONTACTS default
    • Si vous obtenez "No operations", alors le nom de la permission est probablement différent. Exécutez appops get com.google.android.talk (sans la permission spécifique) pour voir toutes les permissions existantes. Par exemple, logcat affiche "READ_ICC_SMS", mais l'ID de l'opération réelle, tel qu'il est indiqué par la balise appops La commande est "READ_SMS"

    • Sur votre téléphone, tapez sur "Permissions". S'il se bloque à nouveau, répétez les étapes ci-dessus (regardez la sortie logcat, ...). S'il ne se plante pas, les autorisations pour l'application sélectionnée sont affichées et vous pouvez révoquer les autorisations si vous le souhaitez.

Après avoir suivi toutes les étapes, je n'ai pas eu de plantage "Package installed has stopped working" dans le menu des paramètres, et j'ai également pu utiliser Paramètres > Apps > Icône Gears > Autorisations d'accès.

PS : toutes les autorisations d'appops ne sont pas problématiques. Voici quelques-unes des opérations que j'ai dû autoriser pour certaines apps : COARSE_LOCATION, CALL_PHONE, CAMERA, READ_CONTACTS, READ_SMS, RECEIVE_SMS, SEND_SMS, WRITE_CONTACTS. Par exemple, pour Hangouts, refuser les opérations suivantes n'empêche pas l'écran des paramètres de fonctionner : WRITE_SMS, WRITE_WALLPAPER.

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