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 nombres spécifiques peuvent varier). Lors de mes tests, cela a fonctionné de manière assez fiable, tant que la carte SD est insérée dans un emplacement de carte SD intégré (non monté via un adaptateur USB).
Mais depuis Android 7.0 Nougat, le OS est censé bloquer l'accès à cette information, du moins sur certains appareils. J'ai testé cela en exécutant une application de test sur un nouvel Alcatel A30 GSM (Android 7.0). En fait, l'approche ci-dessus échoue avec une erreur d'autorisation:
Java.io.FileNotFoundException: /sys/block/mmcblk0/device/serial (Permission denied)
at Java.io.FileInputStream.open(Native Method)
Pour référence future, nous (testons à partir d'un shell adb) avons les autorisations suivantes pour ls -ld
:
/sys/class/mmc_Host
mais pas /sys/class/mmc_Host/mmc0
/sys/block
mais pas /sys/block/mmcblk0
Puisque 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 dans Android 7.0 ou une version ultérieure?
À défaut, existe-t-il une documentation ou une autre déclaration de Google sur les projets visant à fournir ou non cette fonction? Je n'ai rien trouvé dans Android Issue Tracker , mais je ne cherche peut-être pas correctement.
Pour m'assurer que la question est claire, je parle de ce qu'une application ordinaire (non système) exécutée sur un périphérique non root peut faire, avec toutes les autorisations qu'une application peut normalement demander et recevoir.
Pour votre information, le répertoire /sbin
ne semble pas lisible, aussi des commandes telles que /sbin/udevadm
ne sont pas une option.
Dans Android N, l'accès à/sys nad/proc était considérablement restreint. Il s'agissait de fournir des sandbox plus stricts dans lesquels les applications s'exécutaient. Ceci est expliqué dans https://issuetracker.google.com/issues/37091475 comme intentionnel. En réalité, cela n’a pas été dit que toutes les données de/sys ne sont pas accessibles, et Google est ouvert pour autoriser l’accès à d’autres fichiers à partir de cet emplacement:
S'il y a des fichiers spécifiques dans/sys qui, à votre avis, devraient être disponibles pour les applications, mais ne le sont pas, veuillez créer un nouveau bogue permettant à la demande d'être évaluée. Par exemple,/sys/devices/system/cpu est disponible pour tous les processus. Il est donc inexact de dire que tout/sys est restreint.
J'ai le mauvais pressentiment que Google apporte des modifications similaires à celles d'Apple, où il est interdit de gagner des identifiants matériels. Si cela n'est pas résolu, la solution consiste à utiliser des identifiants de compte Google. Mais je suis conscient que ce n'est pas toujours possible et qu'il faudra d'importants changements dans la logique métier (licences, etc.).
Espérons que votre rapport de bogue sera considéré comme positif.
autre SO liée: Modifications apportées au système de fichiers dans Android Nougat
Utilisez StorageVolume.getUuid () sur StorageVolume que vous obtenez de StorageManager.
La valeur est l'ID de volume attribué lors du formatage de la carte et sa longueur/format varie en fonction du type de système de fichiers. Pour FAT32, il s'agit de XXXX-XXXX, pour NTFS, de la chaîne hexagonale plus longue, pour le stockage de masse interne, elle renvoie la valeur null.
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.
Essayez aussi
Sudo hdparm -I /dev/sdb | more