Я создал каталог в моем внутреннем хранилище приложений (/data/data/com.my_app) и дал глобальные права на чтение/запись в каталог с помощью метода
context.getDir(DATA_DIR_NAME, Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
Через мое приложение я проверил, что права на файл Linux корректны:
drw-rw-rw- app_71 app_71 2010-11-16 18:38 app_data
И я смог нормально читать/записывать файлы в/из каталога app_data. Однако один из моих разработчиков внезапно не смог больше написать в каталог. Наше приложение также имеет проблемы с доступом к каталогу на своем устройстве.
Странно то, что разрешение файла для каталога остается тем же. Мы не можем делать какие-либо записи в каталог, и мы больше не можем читать какие-либо файлы в каталоге (файлы получили глобальное разрешение rw ранее).
Единственное, что мы можем сделать, это adb shell ls /data/data/my_app/app_data
увидеть наш список файлов. Выполнение adb shell ls -l /data/data/my_app/app_data
странно ничего не возвращает. И мы не можем записывать CD в каталог.
Есть ли у кого-нибудь указатель на то, что проблема или как это решить? Мы находимся в нашем остроумном конце.
Большое значение.
В каталогах должен быть установлен бит бит (X) для доступа к содержимому каталога. Я не знаю режимы Android, но смотрю MODE_WORLD_EXECUTABLE
и вижу, можете ли вы это установить.
В принципе, вам нужен режим 0777 (rwxrwxrwx) для каталога, доступ к которому глобально доступен со всеми разрешениями.
Причина ls
заключается в том, что у вас есть разрешение на чтение имен файлов в каталоге. ls -l
не работает, потому что вы не можете получить доступ к файлам в каталоге, чтобы получить метаданные, которые будет печататься -l
.