2010-11-17 18 views
1

ich ein Verzeichnis in meiner app internen Speicher erstellt haben (/data/data/com.my_app) und gab globale Lese-/Schreibrechte auf das Verzeichnis über die MethodeAndroid/Linux-Dateiberechtigungen Problem

context.getDir(DATA_DIR_NAME, Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

Durch meine app, überprüfte ich, dass die linux-Dateiberechtigungen korrekt sind:

drw-rw-rw- app_71 app_71 2010-11-16 18:38 app_data

Und ich war in der Lage/schreiben von Dateien in lesen/out-of Verzeichnis App_Data just fine. Einer meiner Entwickler konnte jedoch plötzlich nicht mehr in das Verzeichnis schreiben. Unsere Anwendung hat Probleme beim Zugriff auf das Verzeichnis auf seinem Gerät.

Das Merkwürdige ist, dass die Dateiberechtigung für das Verzeichnis immer noch die gleiche ist. Wir können keine Art von Schreiboperationen in das Verzeichnis durchführen, und wir können auch keine Dateien innerhalb des Verzeichnisses mehr lesen (die Dateien erhielten zuvor die globale rw-Berechtigung).

Das einzige, was wir tun können, ist adb shell ls /data/data/my_app/app_data, um unsere Liste der Dateien zu sehen. Doing adb shell ls -l /data/data/my_app/app_data gibt seltsamerweise nichts zurück. Und wir können auch keine CD in das Verzeichnis aufnehmen.

Hat jemand irgendeinen Zeiger auf, was das Problem ist oder wie man das löst? Wir sind am Ende unseres Geistes.

Sehr geschätzt.

+0

Gibt es irgendetwas Nützliches in den Protokollen, während Sie versuchen, auf das Verzeichnis von dem Telefon zuzugreifen, das es nicht öffnet? – apps

+0

ADB Shell-Befehle gibt nichts Nützliches zurück. Wenn ich versuche, eine Datei im Verzeichnis über meine Anwendung zu lesen/schreiben, wird eine Ausnahme ausgelöst, die die Berechtigung verweigert beschreibt. Mit drw-rw-rw- Berechtigungen für das Verzeichnis würde ich erwarten, zumindest eine Datei schreiben zu können. Und nichts außer der Ausnahme stacktrace wird in logcat gedruckt. – LLTLL

+0

Veröffentlichen Sie das Backtrace? – JimR

Antwort

1

Verzeichnisse müssen das execute (X) Bit gesetzt haben, um auf den Inhalt des Verzeichnisses zugreifen zu können. Ich kenne die Android-Modi nicht, aber suchen Sie nach MODE_WORLD_EXECUTABLE und sehen Sie, ob Sie das einstellen können.

Grundsätzlich benötigen Sie den Modus 0777 (rwxrwxrwx) für einen globalen Zugriff auf ein Verzeichnis mit allen Berechtigungen.

Der Grund ls funktioniert, dass Sie die Leseberechtigung der Dateinamen im Verzeichnis haben. ls -l funktioniert nicht, da Sie nicht auf die Dateien im Verzeichnis zugreifen können, um die Metadaten zu erhalten, die -l gedruckt werden.

+0

Ich werde das ausprobieren, danke für den Tipp! – LLTLL