J'ai un OnePlus 5 sur lequel j'ai installé LineageOS 18.1 avec Google Apps.
Je souhaite que ce soit le téléphone de mon enfant, qui est mineur et dont le compte est limité par Google Family Link. (Je ne suis pas particulièrement amoureux de Family Link ; il est simplement fourni automatiquement avec l'honnêteté lors de l'enregistrement du compte Google de l'enfant, c'est-à-dire ne pas mentir sur son âge. La limitation du temps d'écran est la seule fonctionnalité que je trouve réellement utile).
J'ai également installé Magisk v23 pour Rooter le téléphone. Je réalise qu'avec suffisamment de détermination, mon enfant pourrait potentiellement contourner Family Link en utilisant Root et par exemple adb, et cela ne me dérange pas.
J'ai utilisé mon propre compte Google pour la configuration initiale, mais j'aimerais éventuellement transférer les applications et les données de mon enfant depuis un appareil précédent.
Ma première idée a été d'utiliser la fonction "utilisateurs multiples". J'ai créé un compte pour l'enfant sur le téléphone, et j'allais utiliser Titanium Backup pour restaurer les sauvegardes des applications et des données du téléphone précédent.
Cependant, je commence à avoir des doutes. Est-ce une bonne façon d'aborder la question ? Par exemple, si je continue à être le "propriétaire de l'appareil", cet appareil ne va-t-il pas polluer le partage et l'historique de ma localisation ?
Ai-je bien compris qu'il n'y a aucun moyen de changer le propriétaire (c'est-à-dire de promouvoir l'enfant de "utilisateur" à "propriétaire" et de me rétrograder simultanément de "propriétaire" à "utilisateur") ?
Serait-il préférable, dans l'environnement du propriétaire de l'appareil, de supprimer mon compte Google et d'ajouter celui de l'enfant ?
Je voudrais éviter les longues expériences si possible, mais je répondrai à ma propre question si cela devait arriver.
Ma principale question spécifique est la suivante : quelles seraient les conséquences de ces deux approches ?
- l'enfant continue comme utilisateur ; je suis propriétaire
- ajouter le compte google de l'enfant au profil du propriétaire de l'appareil ; supprimer le mien
Mise à jour : ajouter kid en tant qu'utilisateur n'est pas simple ; apparemment (et logiquement) il y a un tout nouvel espace de noms de montage, donc le répertoire TitaniumBackup que j'ai copié dans le répertoire /sdcard du compte principal n'est pas visible, et même un shell adb élevé n'a pas accès à /storage/emulated/10
(qui, je suppose, est l'endroit où se trouve le nouvel espace de stockage). Je n'ai pas pu m'embêter à contourner ce problème, alors j'ai supprimé l'utilisateur de l'enfant.
J'ai ensuite essayé d'ajouter le compte de l'enfant à côté du mien, mais cela ne fonctionne pas car il est géré par le lien familial ; je dois d'abord supprimer mon compte. J'ai fait cela, et lorsque j'ai essayé d'ajouter le compte de l'enfant, je suis entré dans une boucle sans fin où il est dit qu'il va installer le gestionnaire de lien familial, je clique sur suivant, et il m'informe que cette étape est nécessaire ; répéter ad nauseam. I pensez à le problème est peut-être qu'il ne passe pas le contrôle de SafetyNet, car logcat
a des lignes comme
06-16 15:49:05.915 11187 11187 I BaseTask: ScheduleSafetyNetJobTask started. [CONTEXT service_id=42 ]
06-16 15:49:05.916 11187 12931 I KidsJobScheduler: schedule job DEVICE_SETUP_SAFETY_NET [CONTEXT service_id=42 ]
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: java.lang.ClassCastException: java.lang.String cannot be cast to android.content.Intent
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: at com.aviraxp.adblocker.continued.hook.h$a.beforeHookedMethod(ShortcutHook.java:2)
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: at de.robv.android.xposed.MethodHooker.handleHookedMethod(MethodHooker.java:61)
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: at EdHooker_d6cb3615b07510db932c119335b0668763709397.hook(Unknown Source:171)
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:16728)
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2283)
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2867)
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: at android.os.Binder.execTransactInternal(Binder.java:1154)
06-16 15:49:05.918 1444 3734 E EdXposed-Bridge: at android.os.Binder.execTransact(Binder.java:1123)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: java.lang.ClassCastException: java.lang.String cannot be cast to android.content.Intent
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at com.aviraxp.adblocker.continued.hook.h$a.beforeHookedMethod(ShortcutHook.java:2)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at de.robv.android.xposed.MethodHooker.handleHookedMethod(MethodHooker.java:61)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at EdHooker_1d32fd428893610d3914110116abed3745926464.hook(Unknown Source:185)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:15914)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at java.lang.reflect.Method.invoke(Native Method)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at de.robv.android.xposed.MethodHooker.handleHookedMethod(MethodHooker.java:81)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at EdHooker_d6cb3615b07510db932c119335b0668763709397.hook(Unknown Source:171)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:16728)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2283)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2867)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at android.os.Binder.execTransactInternal(Binder.java:1154)
06-16 15:49:05.919 1444 3734 E EdXposed-Bridge: at android.os.Binder.execTransact(Binder.java:1123)
06-16 15:49:05.921 11187 12930 I BaseTask: ScheduleSafetyNetJobTask finished (5 ms). [CONTEXT service_id=42 ]
06-16 15:49:05.928 1444 3734 W ActivityTaskManager: Tried to set launchTime (0) < mLastActivityLaunchTime (1954917)
06-16 15:49:05.938 10959 10959 W DeviceAdminAdd: Unable to set profile owner post-setup, no default supervisorprofile owner defined
06-16 15:49:05.993 11187 11187 I BaseTask: ScheduleSafetyNetJobTask started. [CONTEXT service_id=42 ]
06-16 15:49:05.994 11187 12931 I KidsJobScheduler: schedule job DEVICE_SETUP_SAFETY_NET [CONTEXT service_id=42 ]
06-16 15:49:05.996 11187 11187 W System.err: java.lang.Exception: Result is true
06-16 15:49:05.996 11187 11187 W System.err: at m.cqr.c(:com.google.android.gms.policy_kids@211980404@211980404057.377187554.377187554:6)
06-16 15:49:05.996 11187 11187 W System.err: at m.cqv.j(:com.google.android.gms.policy_kids@211980404@211980404057.377187554.377187554:0)
06-16 15:49:05.996 11187 11187 W System.err: at com.google.android.gms.kids.setup.fragment.KidSetupFragment.cm(:com.google.android.gms.policy_kids@211980404@211980404057.377187554.377187554:0)
06-16 15:49:05.996 11187 11187 W System.err: at com.google.android.gms.kids.setup.fragment.ActivateProfileOwnerFragment.onActivityResult(:com.google.android.gms.policy_kids@211980404@211980404057.377187554.377187554:6)
06-16 15:49:05.996 11187 11187 W System.err: at com.google.android.chimera.FragmentProxy.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:49:05.996 11187 11187 W System.err: at fd.ht(:com.google.android.gms@212116046@21.21.16 (150400-378233385):6)
06-16 15:49:05.996 11187 11187 W System.err: at aes.g(:com.google.android.gms@212116046@21.21.16 (150400-378233385):6)
06-16 15:49:05.996 11187 11187 W System.err: at eic.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:49:05.996 11187 11187 W System.err: at eih.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:49:05.996 11187 11187 W System.err: at edb.support_onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:49:05.996 11187 11187 W System.err: at edg.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:49:05.996 11187 11187 W System.err: at edg.public_onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:49:05.997 11187 11187 W System.err: at rie.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):4)
06-16 15:49:05.997 11187 11187 W System.err: at android.app.Activity.dispatchActivityResult(Activity.java:8310)
06-16 15:49:05.997 11187 11187 W System.err: at android.app.ActivityThread.deliverResults(ActivityThread.java:5002)
06-16 15:49:05.997 11187 11187 W System.err: at android.app.ActivityThread.handleSendResult(ActivityThread.java:5050)
06-16 15:49:05.997 11187 11187 W System.err: at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
06-16 15:49:05.997 11187 11187 W System.err: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
06-16 15:49:05.997 11187 11187 W System.err: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
06-16 15:49:05.997 11187 11187 W System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
06-16 15:49:05.997 11187 11187 W System.err: at android.os.Handler.dispatchMessage(Handler.java:106)
06-16 15:49:05.997 11187 11187 W System.err: at android.os.Looper.loop(Looper.java:223)
06-16 15:49:05.997 11187 11187 W System.err: at android.app.ActivityThread.main(ActivityThread.java:7660)
06-16 15:49:05.997 11187 11187 W System.err: at java.lang.reflect.Method.invoke(Native Method)
06-16 15:49:05.997 11187 11187 W System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
06-16 15:49:05.997 11187 11187 W System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: java.lang.ClassCastException: java.lang.String cannot be cast to android.content.Intent
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at com.aviraxp.adblocker.continued.hook.h$a.beforeHookedMethod(ShortcutHook.java:2)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at de.robv.android.xposed.MethodHooker.handleHookedMethod(MethodHooker.java:61)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at EdHooker_d6cb3615b07510db932c119335b0668763709397.hook(Unknown Source:171)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:16728)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2283)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2867)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at android.os.Binder.execTransactInternal(Binder.java:1154)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at android.os.Binder.execTransact(Binder.java:1123)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: java.lang.ClassCastException: java.lang.String cannot be cast to android.content.Intent
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at com.aviraxp.adblocker.continued.hook.h$a.beforeHookedMethod(ShortcutHook.java:2)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at de.robv.android.xposed.MethodHooker.handleHookedMethod(MethodHooker.java:61)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at EdHooker_1d32fd428893610d3914110116abed3745926464.hook(Unknown Source:185)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:15914)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at java.lang.reflect.Method.invoke(Native Method)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at de.robv.android.xposed.MethodHooker.handleHookedMethod(MethodHooker.java:81)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at EdHooker_d6cb3615b07510db932c119335b0668763709397.hook(Unknown Source:171)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:16728)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2283)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2867)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at android.os.Binder.execTransactInternal(Binder.java:1154)
06-16 15:49:05.999 1444 4198 E EdXposed-Bridge: at android.os.Binder.execTransact(Binder.java:1123)
06-16 15:49:06.003 11187 12930 I BaseTask: ScheduleSafetyNetJobTask finished (9 ms). [CONTEXT service_id=42 ]
J'ai désactivé EdXposed, ce qui me laisse avec
06-16 15:58:55.797 6486 6486 W DeviceAdminAdd: Unable to set profile owner post-setup, no default supervisorprofile owner defined
06-16 15:58:55.852 6269 6269 I BaseTask: ScheduleSafetyNetJobTask started. [CONTEXT service_id=42 ]
06-16 15:58:55.853 6269 6634 I KidsJobScheduler: schedule job DEVICE_SETUP_SAFETY_NET [CONTEXT service_id=42 ]
06-16 15:58:55.855 6269 6269 W System.err: java.lang.Exception: Result is true
06-16 15:58:55.855 6269 6269 W System.err: at m.cqr.c(:com.google.android.gms.policy_kids@211980404@211980404057.377187554.377187554:6)
06-16 15:58:55.855 6269 6269 W System.err: at m.cqv.j(:com.google.android.gms.policy_kids@211980404@211980404057.377187554.377187554:0)
06-16 15:58:55.855 6269 6269 W System.err: at com.google.android.gms.kids.setup.fragment.KidSetupFragment.cm(:com.google.android.gms.policy_kids@211980404@211980404057.377187554.377187554:0)
06-16 15:58:55.855 6269 6269 W System.err: at com.google.android.gms.kids.setup.fragment.ActivateProfileOwnerFragment.onActivityResult(:com.google.android.gms.policy_kids@211980404@211980404057.377187554.377187554:6)
06-16 15:58:55.855 6269 6269 W System.err: at com.google.android.chimera.FragmentProxy.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:58:55.855 6269 6269 W System.err: at fd.ht(:com.google.android.gms@212116046@21.21.16 (150400-378233385):6)
06-16 15:58:55.855 6269 6269 W System.err: at aes.g(:com.google.android.gms@212116046@21.21.16 (150400-378233385):6)
06-16 15:58:55.855 6269 6269 W System.err: at eic.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:58:55.855 6269 6269 W System.err: at eih.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:58:55.855 6269 6269 W System.err: at edb.support_onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:58:55.855 6269 6269 W System.err: at edg.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:58:55.856 6269 6269 W System.err: at edg.public_onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):0)
06-16 15:58:55.856 6269 6269 W System.err: at rie.onActivityResult(:com.google.android.gms@212116046@21.21.16 (150400-378233385):4)
06-16 15:58:55.856 6269 6269 W System.err: at android.app.Activity.dispatchActivityResult(Activity.java:8310)
06-16 15:58:55.856 6269 6269 W System.err: at android.app.ActivityThread.deliverResults(ActivityThread.java:5002)
06-16 15:58:55.856 6269 6269 W System.err: at android.app.ActivityThread.handleSendResult(ActivityThread.java:5050)
06-16 15:58:55.856 6269 6269 W System.err: at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
06-16 15:58:55.856 6269 6269 W System.err: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
06-16 15:58:55.856 6269 6269 W System.err: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
06-16 15:58:55.856 6269 6269 W System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
06-16 15:58:55.856 6269 6269 W System.err: at android.os.Handler.dispatchMessage(Handler.java:106)
06-16 15:58:55.856 6269 6269 W System.err: at android.os.Looper.loop(Looper.java:223)
06-16 15:58:55.856 6269 6269 W System.err: at android.app.ActivityThread.main(ActivityThread.java:7660)
06-16 15:58:55.856 6269 6269 W System.err: at java.lang.reflect.Method.invoke(Native Method)
06-16 15:58:55.856 6269 6269 W System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
06-16 15:58:55.856 6269 6269 W System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
06-16 15:58:55.858 6269 6618 I BaseTask: ScheduleSafetyNetJobTask finished (6 ms). [CONTEXT service_id=42 ]
06-16 15:58:55.952 1395 2506 I system_server: oneway function results will be dropped but finished with status OK and parcel size 4
Je vais maintenant désactiver tous les modules Magisk un par un pour voir si je peux éventuellement passer cette étape.
Mise à jour 2 : le problème de la boucle "activer le gestionnaire de liens familiaux" n'est peut-être pas du tout lié à Magisk. Il a été signalé à Google, notamment à l'adresse suivante https://support.google.com/googleplay/thread/15850322/activation-family-link-manager-error-message-loop?hl=en y https://support.google.com/googleplay/forum/AAAA8CVOtD88XvbDIUaPF0/?hl=en&gpf=%23!topic%2Fplay%2F8XvbDIUaPF0 . Pour au moins une personne, des astuces comme faire manuellement de l'application Family Link un administrateur de périphérique dans "Paramètres -> Sécurité -> Administrateur de périphérique" ainsi que "Paramètres -> Gestionnaire d'applications -> Réinitialiser les préférences de l'application" ont aidé, mais "il semble que le Family Link Manager s'attende à pouvoir ouvrir l'application de paramètres sur une page spécifique, qui ne semble pas exister sur tous les appareils. Cela se produit également sur le Xiaomi MiPad... https://xiaomi.eu/community/threads/first-xiaomi-eu-rom-released-for-mipad-4.46337/
La configuration manuelle de l'application en tant qu'administrateur de périphérique ne vous permet pas de passer ce contrôle", ce que je peux confirmer.
Mise à jour 3 : J'ai passé la boucle "Ensuite, vous allez activer Family Link" en convertissant manuellement com.google.android.apps.kids.familylinkhelper
y com.google.android.apps.kids.familylinkmanager
dans les applications du système. Avec Magisk, /system/app
est un tmpfs accessible en écriture (c'est-à-dire non persistant) ; j'ai remonté / (qui est le vrai tmpfs). /system/app
est allumée) rw
en utilisant mount -n / -o rw,remount
puis l'a monté dans un répertoire : mkdir /mnt/root; mount --bind / /mnt/root
. J'ai copié les deux APKs de mes sauvegardes Titanium à /mnt/root/system/app
Puis j'ai redémarré et l'installation de Family Link a pu se faire.
Maintenant, voyons comment restaurer toutes les applications à partir de la sauvegarde.