web-dev-qa-db-fra.com

Comment faire de mon application un propriétaire d'appareil?

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.

53
Vishal Santharam

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

50
Florent Dupont

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

  1. adb Push device_owner.xml /sdcard/

  2. adb Shell

  3. su

  4. cp /sdcard/device_owner.xml /data/system/

  5. cd /data/system/

  6. chown system:system device_owner.xml

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

12
Spynet

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

0
Ektos974

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. 

  1. 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 .
  2. Le fichier /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>
0
Gary Kumfert