Android 6.0 autorisations et de montage OBB
J'ai un problème avec les autorisations sur Android 6.0 et supérieur.
Le jeu que je suis en train de travailler sur a été à l'aide de la WRITE_EXTERNAL_STORAGE autorisation. Sur Android 6.0 et supérieur de l'alerte qui demande à l'utilisateur pour lui permettre devait être affiché.
J'ai reçu une demande pour se débarrasser de cette alerte, ce qui signifie que le jeu ne peut pas utiliser WRITE_EXTERNAL_STORAGE plus.
Techniquement le jeu n'est pas de l'écriture et de la lecture, le stockage externe n'importe où maintenant. Tous les jets de sauvegarde et les fichiers mis en cache sont stockées dans l'application répertoire spécifique (/storage/emulated/0/Android/data/com.de l'entreprise.productname)
Mais, le jeu a à lire (et parfois en téléchargement) le fichier OBB, qui est stocké dans /storage/emulated/0/Android/obb/com.de l'entreprise.productname répertoire.
Le jeu dispose d'un accès à ce répertoire, même sans WRITE_EXTERNAL_STORAGE ou READ_EXTERNAL_STORAGE sur les appareils:
- Motorola Nexus 6
- LG Nexus 5
Mais il semble qu'il n'a pas na accès à ce répertoire:
- Samsung Galaxy S5, S6 et S7
- Nvidia Shield tablet
Je l'ai vérifié, même à l'aide de l'Alpha de Tests afin de simuler de télécharger le jeu à partir de la boutique.
Lorsque l'autorisation pour le Stockage (via les Paramètres de l'Application), puis tout fonctionne très bien.
Comment l'OBB est monté?
Le Moteur Unreal engine 4, que j'utilise, soit à l'aide de la C fonction open() pour gérer le fichier OBB:
int32 Handle = open(LocalPath, O_RDONLY);
Où LocalPath est un chemin complet vers le fichier obb: /storage/emulated/0/Android/obb/com.de l'entreprise.nom du produit/main.10003.com.de l'entreprise.productname.obb
Les questions sont:
- Le jeu doit-il en LECTURE/ÉCRITURE _EXTERNAL_STORAGE pour lire et télécharger le fichier OBB?
- Si oui, alors comment puis-je me débarrasser de l'alerte, qui demande à l'utilisateur les autorisations.
- Si non, alors pourquoi Samsung Galaxy S série faire de tels troubles?
received a request to get rid of this alert
. Idiot demande. Dites-leur! Les laisser aller dans les Paramètres de votre application swich la permission.Comment êtes-vous montage de OBB et ce que vous êtes de passage à UE4 comme
LocalPath
?Aussi, quelle version(s) d'Android sont en cours d'exécution sur ces différents dispositifs?
Tous ces appareils tournant sous Android 6.0.1. Un chemin local est un const char* pointant vers /storage/emulated/0/Android/obb/com.de l'entreprise.nom du produit/main.10003.com.de l'entreprise.productname.obb Exactement, c'est une combinaison de la getExternalStorageDirectory() + "/Android/obb/" + PackageName Si Vous avez accès à UE4 github, Vous pouvez vérifier le code source github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/... (MountOBB fonction)
OriginalL'auteur zompi | 2016-07-13
Vous devez vous connecter pour publier un commentaire.
Ok, il semble que la question a été inscrite quelque part d'autre, mais je ne pouvais pas trouver parce que je ne savais pas, c'était exactement le problème...
https://code.google.com/p/android/issues/detail?id=197287
La API23 pour une raison quelconque de l'ensemble de l'utilisateur de l'OBB à la racine, pas la bonne de l'utilisateur et à cause de cela l'application n'a pas accès à elle.
Après le redémarrage de l'appareil tout fonctionne bien.
À ce stade, il n'existe aucune solution de contournement pour ce.
Merci @Larry pour fournir toutes les informations utiles 🙂
OriginalL'auteur zompi
Vous êtes cordialement invités à vérifier si votre application à partir de la banque a écrit la permission.
OriginalL'auteur Ciprian Jijie
Grâce à @Larry pour pointer vers la bonne solution.
Pour ceux qui se poseraient la question, pourquoi PSBA APK de Soutien à l'Expansion des bibliothèques n'est pas de travail sans autorisation, ici, c'est la modification de
APKExpansionSupport.java
OriginalL'auteur Dima Rostopira
Fournir une réponse ici, basé sur le commentaire ci-dessus du fil. Le problème est dans la façon de
LocalPath
est fourni. Dans Android, le système de fichiers chemins ne sont pas cohérentes entre les différents fabricants et vous devez faire aucune hypothèse sur les chemins d'enregistrement.Donc, plutôt que d'avoir (juste un exemple de code):
Vous avez besoin de faire quelque chose comme ceci:
Cela permettra d'assurer que votre code est correct OBB emplacement pour votre application sur les primaires externes de stockage de l'appareil donné. Vous pouvez ensuite enregistrer les OBB là et plus tard, lorsque votre application obtient UE4 commencé il peut pointer droit sur le fichier.
Une application de localisation sur primaire de stockage externe pour les OBB (et d'autres fichiers) ne nécessite pas d'autorisations de lecture et d'écriture pour cette application. Si le chemin de stockage externe n'est pas celui généré par les méthodes ci-dessus, puis la
WRITE_EXTERNAL_STORAGE
autorisation est nécessaire pour l'écriture de données.EACCES 13 /* Permission denied */
Il y a aussi une chose... j'ai installer le jeu en mettant apk et obb pour le répertoire créé dans Android/obb et installer APK. Quand j'ai mis Obb dans la racine de stockage, puis de le copier via l'intérieur Android Gestionnaire de Fichiers vers le répertoire approprié et ensuite installer... il fonctionne et a accès...Est l'UE4 moteur d'exécution au sein de votre application, ou est-il un élément distinct / paquet?
OK, ça sonne très bizarre ce que tu fais pour installer l'application et le fichier obb. L'installation de l'application devrait être fait par le biais
adb
ou le play store, de sorte qu'aucune d'emplacement de stockage nécessaire. En général, votre fichier obb(s) sont téléchargés par l'application et placé dans le obb répertoire ou, vous pouvez les héberger sur Google Play et les tirer vers le bas de cette façon. Le cadre doit être la chose qui crée l'obb répertoire, pour le APK doit d'abord être installée de sorte autorisations d'obtenir le programme d'installation correctement. Si vous créez manuellement le répertoire (commande adb shell?) puis d'essayer de l'utiliser, ce qui va causer des problèmes.UE4 moteur est en marche au sein de l'application (c'est à dire le moteur et le jeu est de la même entité). Quoi de plus mystarious, j'ai vérifié le fichier avec getExternalStorageState et a reçu MEDIA_MOUNTED en tant que résultat. Donc... il doit être accessible, mais pas via le C ouvert? :/ J'ai aussi l'installation de l'application via Alpha Tests et le même problème se produit.
Après une assez longue recherche j'ai trouvé le problème ici code.google.com/p/android/issues/detail?id=197287 et comments.gmane.org/gmane.comp.handhelds.android.devel/244716 et je peux confirmer que l'utilisateur de l'application installée, j'racine de l'utilisateur.
OriginalL'auteur Larry Schiefer