Android - impossible d'ouvrir l'archive zip
Je suis de téléchargement fichier apk depuis le web et le stockage de lui dans son Contexte.getCacheDir(). Je suis le téléchargement de fichier par HttpURLConnection - je ne demande pas réellement sur le code (c'est entièrement de travail), donc je ne suis pas le poster ici. J'ai réussi à initier le téléchargement. Le fichier est téléchargé dans la mémoire cache, puis est invité à l'installation, mais le système ne peut pas ouvrir mon APK et écrit d'erreur d'analyse.
Donc problème est comme suit:
03-31 16:48:43.740: INFO/ActivityManager(59): Start proc com.android.packageinstaller for activity com.android.packageinstaller/.PackageInstallerActivity: pid=620 uid=10026 gids={}
03-31 16:48:44.749: WARN/zipro(620): Unable to open zip '/data/data/com.my.app/cache/myApp.apk': Permission denied
03-31 16:48:44.749: DEBUG/asset(620): failed to open Zip archive '/data/data/com.my.app/cache/myApp.apk'
03-31 16:48:44.930: WARN/PackageParser(620): Unable to read AndroidManifest.xml of /data/data/com.my.app/cache/myApp.apk
03-31 16:48:44.930: WARN/PackageParser(620): java.io.FileNotFoundException: AndroidManifest.xml
Problème - je n'ai pas la permission d'accéder à programaticaly /cache. Est-il de toute façon comment le résoudre? Je ne veux pas utiliser de stockage externe comme un répertoire de téléchargement (processus d'installation fonctionne lorsque je télécharge un fichier de stockage externe), le cache est grande parce que le fichier ne sera pas accessible pour l'utilisateur dans le gestionnaire de fichier et c'est ce que je veux. Merci pour vos pensées.
Ce problème a été pour moi insoluble pendant plus d'un mois maintenant...
Edit: Toujours pas de solution, je suis en train de penser que j'ai trouvé la 1ère chose, qui n'est pas possible avec Android
Edit2: j'ai été à la recherche bad - j'ai téléchargé l'apk est présent dans le cache... Il n'y a toujours pas d'autorisation pour permettre à installer à partir de ce dir?
openFileOutput()
....si pas, essayez avec MODE_WORLD_READABLE
Bonjour avez vous trouver la solution au problème ci-dessus. Je suis dans les mêmes corrigé maintenant.
J'ai vu
WORLD_WRITABLE
suggéré dans à peu près chaque réponse à ce commentaire. NE PAS le FAIRE pour d'autres qu'un test que les autorisations sont le problème.
OriginalL'auteur Waypoint | 2011-03-31
Vous devez vous connecter pour publier un commentaire.
chmod 666 sur le fichier apk téléchargé avant de l'installer dans votre code
plus de détail :
Je voudrais utiliser
chmod 644
plutôt que c'est l'ensemble d'autorisations pour/system
apps. Pas sûr de savoir pourquoi vous voulez unchmod 666
permettre à d'autres programmes de l'autorisation d'écriture. Vous pouvez aussi l'installer et de le faire à travers laadb
puis de la redémarrer.OriginalL'auteur Erik
C'est peut vous aider à:
OriginalL'auteur Flashok
Je vois ce qui se passe..
Le cache dir est un cache géré par Android, ce qui signifie qu'il peut être nettoyé dès que la mémoire interne commence à diminuer.
ET si votre demande est de prendre trop de place sur un cache (ce qui est une APK est sans doute) lorsque votre application est en pause/effondrés Android pouvez nettoyer votre répertoire de cache.
Pour le tester c'est le cas, faites tout ce que vous avez et quand le processus d'installation commence juste à ouvrir le DDMS et de voir si votre fichier est toujours dans le cache.
Si pas, alors android a nettoyé l'application de la cache, car ça ne fonctionne pas plus.
Essayer à l'utilisateur une approche différente, au lieu de
context.getCacheDir()
essayercontext.getFilesDir()
De même pour le contexte.getFilesDir() comme pour les getCacheDir() - pas de succès
c'est le problème...connaissez-vous la taille de l'apk? semble que c'est trop gros pour être stocké dans une mémoire de stockage interne...vous aurez besoin de le stocker dans la carte sd....installer...puis de les supprimer.
apk a 200 ko de cache doit être certainement plus grand. Je l'ai fait comme vous avez dit, maintenant. J'ai juste pensé, il doit y avoir une meilleure solution.
avez-vous essayé d'utiliser la openFileOutput()....si pas, essayez avec MODE_WORLD_READABLE developer.android.com/reference/android/content/..., int)
OriginalL'auteur Panthro