2010-11-17 32 views
1

J'ai créé un répertoire de stockage interne (/data/data/com.my_app) et a donné des autorisations de lecture/écriture globale de mon application dans le répertoire via la méthodeAndroid/Linux File Permissions problème

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

Grâce à mon application, je l'ai vérifié que les autorisations de fichiers linux sont corrects:

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

Et j'ai pu lire/écrire des fichiers dans à/hors du répertoire App_Data très bien. Cependant, un de mes développeurs n'a soudainement plus été capable d'écrire dans le répertoire. Notre application a également des difficultés à accéder au répertoire sur son appareil.

La chose étrange est que l'autorisation de fichier pour le répertoire est toujours la même. Nous ne pouvons effectuer aucune sorte d'écriture dans le répertoire, et nous ne pouvons plus lire aucun fichier dans le répertoire (les fichiers ont déjà reçu l'autorisation globale de rw).

La seule chose que nous pouvons faire est adb shell ls /data/data/my_app/app_data pour voir notre liste de fichiers. Faire adb shell ls -l /data/data/my_app/app_data étrangement ne retourne rien. Et nous ne pouvons pas CD dans le répertoire non plus.

Quelqu'un at-il un pointeur sur ce problème ou comment résoudre ce problème? Nous sommes à la fin de notre esprit.

Très apprécié.

+0

Y a-t-il quelque chose d'utile dans les journaux alors que vous essayez d'accéder au répertoire depuis le téléphone qui ne l'ouvre pas? – apps

+0

Les commandes ADB Shell ne renvoient rien d'utile. Si j'essaie de lire/écrire un fichier dans le répertoire via mon application, il déclenche une exception qui décrit l'autorisation refusée. Avec drw-rw-rw- autorisations pour le répertoire, je m'attendrais à pouvoir au moins écrire un fichier. Et rien d'autre que l'exception stacktrace n'est imprimé dans logcat. – LLTLL

+0

Post le backtrace? – JimR

Répondre

1

Les répertoires doivent avoir le bit d'exécution (X) défini pour pouvoir accéder au contenu du répertoire. Je ne connais pas les modes android, mais cherchez MODE_WORLD_EXECUTABLE et voyez si vous pouvez définir cela. Fondamentalement, vous avez besoin du mode 0777 (rwxrwxrwx) pour qu'un répertoire soit accessible globalement avec toutes les autorisations.

La raison ls fonctionne est que vous avez l'autorisation de lire les noms de fichiers dans le répertoire. ls -l ne fonctionne pas, car vous ne pouvez pas accéder aux fichiers dans le répertoire pour obtenir les métadonnées que -l va imprimer.

+0

Je vais essayer, merci pour le conseil! – LLTLL