web-dev-qa-db-fra.com

comment accéder aux ressources d'un projet de bibliothèque Android

Je construis un projet de bibliothèque Android qui nécessite des ressources statiques (images/xml, etc.) en interne. 

Alors je me demande où je peux mettre ces ressources et comment y accéder?

Depuis que j'ai mis les ressources dans le dossier assets. Et j'utilise AssetManager pour accéder aux ressources:

public class DataProvider {
    byte[] getDrawableData(int num) {
        AssetManager am = Resources.getSystem().getAssets();
        InputStream is = null;
        try {
            is = am.open("t.jpg");
        } catch (IOException e) {
            return "".getBytes();
        }
        if (is != null) {
            Drawable dw = Drawable.createFromStream(is, null);
            Bitmap bm = ((BitmapDrawable) dw).getBitmap();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            return stream.toByteArray();
        }

        return "".getBytes();
    }
}

Cependant, j'ai eu l'erreur: W/System.err(19583): Java.io.FileNotFoundException: t.jpg

Quel est le problème?


Comme Sankar V l'a indiqué, le projet de bibliothèque ne prend pas en charge les ressources brutes. Ensuite, il me semble que je dois placer les ressources dans le dossier res

Mais j'ai essayé d'utiliser la méthode Resources.getSystem().getResources().... qui ne peut pas obtenir ce que je veux. Et les gens ont dit que cette méthode ne peut obtenir que les ressources de niveau système plutôt que les ressources de niveau application. 

Si c'est la vérité. Cela signifie-t-il que je dois conserver une référence de l'objet Context partout où je souhaite obtenir des ressources?

15
hguser

Alors je me demande où je peux mettre ces ressources et comment y accéder?

À partir d'Android Doc

Les projets de bibliothèque ne peuvent pas inclure d'actifs bruts

Les outils ne prennent pas en charge l'utilisation de fichiers d'actif bruts (enregistrés dans le répertoire assets /) dans un projet de bibliothèque. Toute ressource d'actif utilisée par une application doit être stockée dans le répertoire assets/du projet d'application lui-même. Cependant, les fichiers de ressources enregistrés dans le répertoire res/sont pris en charge .

Lien de référence de la documentation: LibraryProjects

Solution: Comment accéder aux fichiers de ressources enregistrés dans le répertoire res/du projet de bibliothèque à partir du projet d'application

Remarque: Si vous souhaitez accéder aux ressources à partir de Library Project, ajoutez les ressources à res/ directory pas dans assets. Parce que les fichiers des actifs ne seront pas associés au fichier .jar. Vous pouvez y accéder comme d’habitude en utilisant la référence générée dans le fichier R.Java

Ex: Pour accéder à une image d'utilisation attrayante 

R.drawable.image_name

Cela signifie-t-il que je dois conserver une référence de l'objet Context où je souhaite obtenir des ressources?

Vraiment, vous devriez avoir une référence au contexte pour accéder aux ressources

Mise à jour:

Maintenant, le projet de bibliothèque Android peut être généré sous forme de fichier aar (Android Archive), ce qui vous permet de regrouper les fichiers de ressources nécessaires au projet de bibliothèque au lieu de l'ancien fichier jar (Java Archive), qui vous permet uniquement de regrouper les classes Java.

8
Sankar V

Ou vous pouvez utiliser un dossier lié dans Eclipse et lier votre dossier d'actifs à votre nouveau projet.

0
Moz