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

hgu*_*ser 15 resources android

我正在构建一个内部需要一些静态资源(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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

问题是什么?


如上所述Sankar V,图书馆项目不支持原始资产.然后我似乎必须把resurces放在res文件夹下.

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

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

San*_*r V 8

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

来自Android Doc's

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

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

文档参考链接: LibraryProjects

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

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

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

R.drawable.image_name
Run Code Online (Sandbox Code Playgroud)

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

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

更新:

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