Comment puis-je récupérer le numéro de série d'une carte SD dans Android 7.0+?

dans certaines versions D'Android, et d'autres variantes de Linux, il est possible d'obtenir le numéro de série d'une carte SD montée, par exemple en lisant le contenu de /sys/class/mmc_host/mmc0/mmc0:0001/serial ou /sys/block/mmcblk0/device/serial (les numéros spécifiques peuvent varier). Dans mes tests, cela a fonctionné de manière assez fiable, à condition que la carte SD soit insérée dans une fente de carte SD intégrée (non montée via un adaptateur USB).

mais à partir D'Android 7.0 Nougat, le OS serait de bloquer l'accès à ce informations, au moins sur certains appareils. J'ai testé cela en lançant une application test sur un nouveau Alcatel A30 GSM (Android 7.0), et en fait l'approche ci-dessus échoue avec une erreur de permission:

java.io.FileNotFoundException: /sys/block/mmcblk0/device/serial (Permission denied)
at java.io.FileInputStream.open(Native Method)

référence Pour l'avenir, nous (tester à partir d'une commande adb shell) ont des autorisations pour ls -ld le texte suivant:

  • /sys/class/mmc_host mais pas /sys/class/mmc_host/mmc0
  • /sys/block mais pas /sys/block/mmcblk0

depuis l'approche ci-dessus ne fonctionne plus,

  • Existe-t-il un autre moyen d'obtenir le numéro de série d'une carte SD montée sur Android 7.0 ou plus tard?

  • à défaut, Existe-t-il une documentation ou une autre déclaration de Google sur les plans pour fournir ou ne pas fournir cette fonction? Je n'ai rien trouvé dans l'Android suivi des problèmes , mais peut-être que je ne cherche pas bien.

pour être sûr que la question est claire, je parle de ce qu'une application ordinaire (non-système) fonctionnant sur un périphérique non-enraciné peut faire, avec toutes les permissions qu'une application peut normalement demander et recevoir.

POUR INFO, le répertoire /sbin ne semble pas lisible, donc les commandes comme /sbin/udevadm ne sont pas une option.

23
demandé sur LarsH 2017-04-19 04:04:21

3 réponses

dans Android N accès à / sys nad / proc a été considérablement restreinte, ce qui a été fait pour fournir des Sandbox plus strictes où les applications fonctionnent. Ceci est expliqué dans https://issuetracker.google.com/issues/37091475 comme intentionnel. En fait son pas dit que toutes les données dans /sys ne est pas accessible, et Google est ouvert pour permettre l'accès à d'autres fichiers à partir de cet endroit:

S'il y a des fichiers spécifiques dans /sys vous pensez devrait être disponibles pour les applications, mais ne le sont pas, veuillez déposer un nouveau bogue où la demande peut être évaluée. Par exemple, /sys/devices/system/cpu est disponible pour tous les processus, il est donc inexact de dire que tous /sys est restreint.

j'ai un mauvais pressentiment que google est en train de faire des changements similaires à Apple où il n'est pas permis d'obtenir des id-S Matériels. Si cela n'est pas résolu, alors la solution est d'utiliser les ID de Compte google à la place. Mais je sais que ce n'est pas toujours possible, et nécessitera des changements majeurs dans la logique commerciale (licence, etc.).

avec un peu de chance votre rapport de bogue sera considéré comme positif.

un autre ainsi lié que j'ai trouvé: modifications du système de fichiers sur Android Nougat

4
répondu marcinj 2017-05-23 12:26:43

Utiliser StorageVolume.getUuid () sur StorageVolume que vous obtenez de StorageManager.

la valeur est l'ID de volume assigné pendant le formatage de la carte, et sa longueur/format diffère selon le type de système de fichier. Pour FAT32 C'est XXXX-XXXX, pour NTFS c'est plus long chaîne hex, pour le stockage de masse interne il retourne null.

1
répondu Pointer Null 2017-04-21 22:03:46

adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid

vous pouvez aussi essayer

sudo hwinfo --disk

pour obtenir des informations sur vos disques, y compris les cartes SD.

essayer aussi

sudo hdparm -I /dev/sdb | more

0
répondu Zed 2017-04-27 22:39:52