如何访问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(); } } 

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

问题是什么?


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

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

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

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

来自Android Doc’s

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

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

文档参考链接: LibraryProjects

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

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

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

 R.drawable.image_name 

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

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

更新:

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

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