Les documents d'API du gestionnaire de règles de périphérique } et vue d'ensemble d'Android 5.0 mentionnent tous deux quelque chose à propos d'une application propriétaire périphérique. Comment puis-je configurer mon application en tant que propriétaire du périphérique ?
Edit: Existe-t-il d’autres moyens que l’enracinement et NFC s’ils sont disponibles, veuillez les partager.
En fait, il existe un moyen autre que NFC et l’enracinement de définir une application en tant qu’application propriétaire .. .. Vous pouvez utiliser l’outil de ligne de commande dpm à partir de adb Shell
.
Utilisation:
usage: dpm [subcommand] [options]
usage: dpm set-device-owner <COMPONENT>
usage: dpm set-profile-owner <COMPONENT> <USER_ID>
dpm set-device-owner: Sets the given component as active admin, and its package as device owner.
dpm set-profile-owner: Sets the given component as active admin and profile owner for an existing user.
UPDATE: L'utilitaire dpm
est réellement simple. Son objectif est de créer un nouveau fichier appelé device_owner.xml
sous /data/system/device_owner.xml
qui fait référence aux applications propriétaire du périphérique/du profil.
La plate-forme Android lit alors ce fichier pour vérifier quelle application est considérée comme un propriétaire du périphérique ou application du propriétaire du profil.
Sur un périphérique root, vous pourriez bien créer ce fichier par vous-même , mais puisque l'outil dpm
le fait, vous feriez mieux de l'utiliser (principe DRY):
Par exemple via une commande Runtime.exec()
:
Runtime.getRuntime().exec("dpm set-device-owner com.foo.deviceowner/.DeviceAdminRcvr");
Notez également que cet outil ne fonctionne que si aucun compte n'est défini pour l'utilisateur (assurez-vous qu'aucun compte n'est défini dans Paramètres> Comptes) avant son utilisation.
Source et informations complémentaires sur Outil de commande Android Shell: Device Policy Manager
Si vous êtes root sur votre appareil, vous pouvez suivre cette méthode pour devenir propriétaire de l’appareil.
Commencez par créer un fichier device_owner.xml
avec le contenu suivant:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<device-owner package="your.owner.app.package.id" name="Your app name" />
Maintenant, suivez les étapes suivantes
adb Push device_owner.xml /sdcard/
adb Shell
su
cp /sdcard/device_owner.xml /data/system/
cd /data/system/
chown system:system device_owner.xml
redémarrer
Remarque: avant de redémarrer le périphérique, assurez-vous d'avoir installé l'application que vous essayez de rendre propriétaire du périphérique. Si vous ne le faites pas, vous obtiendrez une animation de démarrage pour une durée infinie.
Vous pouvez également utiliser la réflexivité en appelant la méthode DevicePolicyManager
appelée setProfileOwner
qui était masquée dans la documentation du SDK.
N'oubliez pas de l'annuler, sinon vous aurez des conflits avec Google Play;)
Mettre à jour:
Sur mon décodeur Android 7.1.2 (AOSF et enraciné), j'ai trouvé quelques éléments qui ont évolué au fil du temps.
exec("dpm set-device-owner ...")
lève et exception sauf si <uses-permission Android:name="Android.permission.MANAGE_DEVICE_ADMINS" />
est déclaré dans le fichier AndroidManifest.xml. Mais cela soulève d’autres problèmes, plus à ce sujet ici ./data/system/device_policy.xml
n'apparaît plus. Au lieu de cela, il s’agit maintenant de /data/system/device_policy_2.xml
et le schéma est légèrement différent. Exécuter dpm set-device-owner com.myDomain.myPackage/.myComponent
via un adb Shell génère le fichier comme suit: <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<root>
<device-owner package="com.myDomain.myPackage" name="" component="com.myDomain.myPackage/com.myDomain.myPackage.myComponent" userRestrictionsMigrated="true" />
</root>