2017-10-19 21 views
3

J'ai besoin d'aide. J'ai une application qui est principalement écrite en code C natif. J'utilise la méthode __system_property_get(const char * name, char * value) pour lire le numéro de série. de l'appareil à divers points dans mon code natif. Avec Android 8, je reçois toujours un message "Accès refusé" maintenant.
libc: Accès refusé recherche de la propriété "ro.serialno"
Existe-t-il un moyen pour que je puisse toujours lire le numéro de série? dans Android 8? J'ai essayé de passer à targetSDKversion < 26 mais cela me donne toujours un message "Accès refusé". J'obtiens les valeurs correctes si j'utilise Java avec Build.SERIAL (indépendamment de la version SDK) et Build.getSerial() dans SDK version 26 si j'accorde la permission READ_PHONE_STATE. Mais je ne peux pas lire ces valeurs dans Java et les passer au code natif sans une énorme réécriture du code natif.Accédez à ro.serialno depuis natif dans Android 8?

Une aide?

Répondre

1

J'ai rencontré ce problème aussi. Enfin, je trouve la cause profonde du problème. Dans Android O, SELinux définit beaucoup de limitations dans la propriété système. Dans ce cas, il existe un neverallow pour limiter la lecture du numéro de série, à l'exception de certains domaines dans la liste blanche.

Pour des informations plus spécifiques, vous pouvez lire le code à system/sepolicy/public/domain.te:

neverallow { 
    domain 
    -adbd 
    -dumpstate 
    -hal_drm 
    -init 
    -mediadrmserver 
    -recovery 
    -shell 
    -system_server 
} serialno_prop:file r_file_perms; 
+0

Merci beaucoup! – carlaharris