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?
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
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.
Ou vous pouvez utiliser un dossier lié dans Eclipse et lier votre dossier d'actifs à votre nouveau projet.