如何访问android库项目中的资源

时间:2013-04-17 06:35:06

标签: android resources

我正在构建一个内部需要一些静态资源(images / xml等)的android库项目。

然后我想知道我可以把这些资源放在哪里以及如何访问它们?

因为我将资源放在assets文件夹中。我使用AssetManager访问资源:

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();
    }
}

但是我收到错误:W/System.err(19583): java.io.FileNotFoundException: t.jpg

有什么问题?


由于Sankar V表示图书馆项目不支持原始资产。然后似乎我必须将resurces放在res文件夹下。

但我尝试使用Resources.getSystem().getResources()....方法无法得到我想要的东西。人们说这种方法只能获得系统级资源而不是应用级资源。

如果这是事实。这是否意味着我必须在任何想要获取任何资源的地方持有Context对象的引用?

2 个答案:

答案 0 :(得分:8)

然后我想知道我可以在哪里放置这些资源以及如何访问它们?

来自Android Doc's

图书馆项目不能包含原始资产

这些工具不支持在库项目中使用原始资产文件(保存在assets /目录中)。应用程序使用的任何资产资源都必须存储在应用程序项目本身的assets /目录中。但是,支持保存在res /目录中的资源文件

文档参考链接: LibraryProjects

解决方案: How to access resource files saved in res/ directory of library project from application project

注意:如果您想从图书馆计划本身访问资源,请将资源添加到res/ directory而不是assets。因为资产中的文件不会与.jar文件捆绑在一起。 您可以使用R.java文件中生成的引用照常访问它。

例如:要从可绘制的使用中访问图像

R.drawable.image_name

这是否意味着我必须在任何想要获取任何资源的地方持有Context对象的引用?

你真的应该持有对上下文的引用来访问资源

<强>更新

现在可以将Android库项目生成为aar(Android Archive)文件,该文件允许您捆绑库项目所需的资源文件,而不是旧jar(Java Archive)文件,该文件只允许您捆绑Java类。 / p>

答案 1 :(得分:0)

或者您可以在Eclipse中使用链接文件夹,并将您的资源文件夹链接到您的新项目。