6
votes

Accéder aux actifs d'une autre application?

Je reçois beaucoup de demandes dans mon application pour permettre aux packs d'icônes personnalisés de la maison optimale / ouverte. La façon dont il semble fonctionner est d'installer BetterCut ou ouvrez à la maison, vous pouvez installer des tonnes de ces packs d'icônes gratuits du marché. Une fois installé ces deux applications (et d'autres applications) sondera pour ces paquets d'icônes et utilisera les icônes.

Je veux savoir comment interroger les applications d'installation pour les dossiers d'actifs disponibles. J'ai ouvert quelques-uns des packs d'icônes et vérifiait qu'il existe un dossier d'actifs et ils sont pleins de tous les fichiers Icône PNG. P>

J'ai recherché ici, d'autres sites de code, Google , etc mais il n'a pas trouvé de prospects. p>

mise à jour: p>

de la réponse ci-dessous J'ai écrit du code pour essayer de répertorier un fichier de mon propre répertoire d'actifs de projets, mais il fait Il ne semble pas fonctionner. p> xxx pré>

ceci est la sortie: p> xxx pré>

update 2 99% là-bas !!!:

J'ai compris que vous pouvez lire dans le répertoire des actifs sans utiliser le nom du dossier: p>

String[] list = assetManager.list("icons");
p> Je suis compris que vous pouvez répertorier un répertoire à l'intérieur des actifs: P> XXX PRE>

qui fonctionne également bien. La seule chose qui échoue en ce moment est de savoir comment répertorier les actifs de répertoire de base. P> p>


0 commentaires

3 Réponses :


3
votes

the ressources L'objet vous donne accès à des actifs. packagemanager peut vous donner accès aux ressources pour une application.


3 commentaires

Je pensais que je devrais ramper avant de marcher et j'ai ajouté un dossier à mon dossier d'actifs de projets et j'essaie maintenant de l'énumérer à l'aide de l'Assetmanager, mais il semble que ce soit un absence de passage lorsque vous essayez de répertorier le répertoire d'actifs. Je vais mettre à jour le message original avec le code que j'essaie.


Voir Stackoverflow.com/Questtions/1495585/...


J'ai essayé d'utiliser la méthode des "displayfiles" exactes et mettez une impression pour voir la longueur de la liste, qui est toujours égale à zéro pour tous les tests, à l'exception du dossier racine "/". Je n'ai jamais obtenu une liste des fichiers dans "/ actifs" pour pouvoir les énumérer. J'ai également essayé d'aller directement à un fichier dans mon dossier d'actifs avec: INTERPENSTREAM IS = A.OPEN ("/ ACTIFS / TEST.PNG"); Qui jette un fichier non trouvé d'exception.



1
votes

Vous devriez probablement obtenir un aperçu de base sur la manière dont les ressources et les actifs fonctionnent avant de creuser dans des choses. :)

Premièrement, un fichier .apk n'est qu'un fichier zip, vous pouvez donc tout ce que vous souhaitez effectuer est de creuser à travers son contenu, vous pouvez mettre ce fichier sur votre ordinateur hôte et utiliser tous les outils zip normaux à regarder.

Deuxièmement, il existe deux types principaux de fichiers fournis par l'utilisateur dans un fichier .apk: des actifs bruts et des ressources structurées.

Le premier n'est qu'une hiérarchie arbitraire de fichiers pouvant être récupérés avec http://developer.android.com/reference/andrroid/content/res/assetmanager.html#open (java.lang.string)

Ces derniers sont traités par les outils construits dans une table structurée, ce qui leur permet de varier de la configuration. Ils sont accessibles à l'aide de ressources et de cours connexes. Des tiroirs, des cordes, des couleurs et la plupart des autres types de données que vous récupérez d'un fichier .apk est généralement stocké en tant que ressource, pas un atout.

Vous pouvez utiliser l'outil AAPT pour voir toutes les ressources dans un fichier .apk: AAPT Dump Resources

Enfin, si vous souhaitez lire les données de ces produits .apks, que diriez-vous de regarder leurs informations sur la façon de les construire? Cela devrait vous donner beaucoup d'informations très fondamentales dont vous avez besoin sur la manière dont elles sont structurées.


1 commentaires

Je n'ai pas besoin d'accéder au fichier sur mon ordinateur. J'ai besoin d'accéder au répertoire des actifs dans l'application 2 de l'application 1 sur le téléphone lui-même. Je reçois une charge de bateaux de demande d'appui à la prise en charge des packs d'icônes mieuxCut gratuits sur le marché. Donc, de mon application, je souhaite que l'utilisateur puisse sélectionner les icônes à partir de là (elles sont stockées dans le dossier d'actifs, j'ai regardé). La plupart des choses que vous mentionnez ne sont pas vraiment pertinentes pour le problème initial. Je n'ai pas besoin d'un guide pour la construction d'APK, d'extraire des images ou d'utiliser des érables ou d'autres ressources dans ma propre application à partir du dossier RES.



4
votes

Pour obtenir le dossier BASE / ARTICLE CODE> Vous devez utiliser l'actifsManager pour répertorier le répertoire avec juste des citations: xxx pré>

Il y aura des fichiers supplémentaires répertoriés: images, sons, webkit, peut-être d'autres. Vous pouvez ignorer ces répertoires, ils font partie du répertoire de l'actif de cadres. Ceci est une citation de groups.google.com : P>

Actuellement, le gestionnaire d'actifs fusionne la Répertoire d'actifs du cadre Ressources avec vos propres fichiers placé dans des "actifs". Nous devrions changer probablement ce comportement (c'était partie d'une ancienne ressource / localisation modèle), mais ça ne fait pas beaucoup de dégâts Sauf que tu vois plus Fichiers / répertoires dans vos propres atouts que vous ne pouvez vous attendre. Aucun de vos fichiers qui sont les mêmes que l'un dans le Les actifs-cadres seront utilisés à la place, lorsqu'il est accédé à travers votre Assetmanager. P> blockQuote>

Vous pouvez également répertorier un sous-dossier dans le répertoire des actifs et ne pas avoir besoin de barres obliques: p> xxx pré>

Notez que je n'ai pas inclus "/ actifs " code> dans le nom de fichier. Enfin, une fois votre liste de fichiers que vous pouvez les charger, vous pouvez les charger comme: p> xxx pré>

qui se chargera dans un fichier dans le dossier d'actifs de base. Ou vous pouvez charger un fichier dans un sous-dossier comme celui-ci: p> xxx pré>

Si vous devez charger ces PNGS dans un bitmap, vous pouvez également effectuer les éléments suivants: P>

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);


1 commentaires

Cela semble faire l'affaire, merci! De plus, la citation des actifs-cadres fusionne avec le dossier d'actifs est également drôle d'un employé de Google Hackbod, qui est la même personne qui n'a pas fourni la réponse ici.