Попытка открыть выходной файл внутри аудиофлингера (AOSP)
Я пытаюсь написать простой файл журнала из av/services/audioflinger/AudioStreamOut.cpp для тестирования собственного ПЗУ. Мне нужно, чтобы он работал на Nexus 5X (подкаменщик).
if (logFile1 == NULL)
logFile1 = fopen("/sdcard/log_before.pcm", "ab");
if (logFile1 == NULL)
ALOGE("can't open 1, errno %d", errno);
Я получаю разрешение отказано (ERRNO 13).
Я попытался изменить frameworks/base/data/etc/platform.xml, добавив следующее:
<assign-permission name="android.permission.WRITE_EXTERNAL_STORAGE" uid="media" />
<assign-permission name="android.permission.WRITE_EXTERNAL_STORAGE" uid="audioserver" />
<assign-permission name="android.permission.WRITE_EXTERNAL_STORAGE" uid="audio" />
Все еще без изменений. Как я могу заставить это работать? Или есть другое место в файловой системе, где системная служба, такая как аудиофлингер, должна использовать для записи файлов?
ОБНОВИТЬ:
Я только что нашел решение, которое работает для эмулятора - в Android N напишите /data/misc/audioserver.
Когда я использую оболочку ADB, она показывает, что в этой конкретной папке есть группа "audioserver", поэтому она работает.
Об этой папке я узнал по этой ссылке: https://source.android.com/devices/audio/debugging.html
Но эта папка кажется недоступной на Nexus 5X - не может получить к нему доступ с помощью оболочки, даже с su root.
1 ответ
Я нашел способ разрешения проблемы.
Сначала запишите файл журнала в /data/misc/audioserver
Затем:
adb shell su root cp /data/misc/audioserver/log_before.pcm sdcard/.
И т.п.
И тогда я могу вытащить файл:
adb pull /sdcard/log_before.pcm .