我正在构建一个内部需要一些静态资源(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
对象的引用?
答案 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中使用链接文件夹,并将您的资源文件夹链接到您的新项目。