16

我正在构建一个内部需要一些静态资源(图像/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想要获取任何资源的任何地方保存对象的引用?

4

2 回答 2

8

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

来自 Android 文档

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

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

文档参考链接: LibraryProjects

解决方案: 如何从应用程序项目中访问库项目的 res/ 目录中保存的资源文件

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

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

R.drawable.image_name

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

确实,您应该保留对上下文的引用以访问资源

更新:

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

于 2013-04-17T06:57:47.483 回答
0

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

于 2014-10-29T23:44:14.937 回答