Я пытаюсь написать приложение Android SYSTEM, которое извлекает пароль Wi-Fi из файла конфигурации запрашивающего (/data/misc/wifi/wpa_supplicant.conf).
Используя adb с правами root, я могу без проблем прочитать файл и увидеть пароль в виде обычного текста.
Однако, когда я пытаюсь открыть файл программно, я получаю сообщение об ошибке EACCES (Отказано в доступе). Это происходит даже несмотря на то, что мое приложение работает как «системный» пользователь (я определяю android:sharedUserId="android.uid.system" в манифесте), приложение подписано закрытым ключом системы и помещено в /system/app.
Я точно знаю, что это можно сделать с помощью системных разрешений, потому что в исходном коде Android в frameworks/base/wifi/java/android/net/wifi/WifiConfigStore.java есть код, который читает этот файл. Этот код выполняется в рамках процесса «system_server», который использует пользователя «system», как и мое приложение.
Мой код для открытия файла, который не работает:
reader = new BufferedReader(new FileReader(SUPPLICANT_CONFIG_FILE));
Если оба приложения работают с системным пользователем и имеют системные разрешения, почему system_server может прочитать этот файл, а мое приложение не работает? Что мне не хватает?
Пожалуйста, не предлагайте решения, которые полагаются на root-доступ, так как в моем случае это неактуально. Мне нужно решение, основанное только на системных разрешениях, а не на root.
wifi
может бытьgroup
, к которому принадлежит пользовательsystem
, а не полноправным пользователем... хотя это не поможет решить вашу проблему. - person Mike Ounsworth   schedule 12.11.2014