我有一个Android项目,在该项目中我有一个包含一些图像的文件夹。现在我想要的是在jni函数中访问该文件夹。那我该怎么做呢?
答案 0 :(得分:1)
Android应用程序本质上是一个zip文件,但是有很多很好的助手来获取这些资源。您需要记住的第一件事是这些文件实际上并不在文件夹中,除非您将它们放在那里。
尽管如此,对于您来说有很多可能的解决方案。
JNI-y最常用的方法是使用像
这样的方法private native void processResources(AssetManager assets);
在你的Activity
中,并使用JNI从中撬取所有必要的资源,将它们放在磁盘上的某个位置,然后处理它们。
可能更简单的方法是使用一些有助于资源管理的Java代码;
之类的东西private void processAll() {
for (String resource : getResources().getAssets().list(mydir)) {
process(getResources().getAssets().open(resource));
}
// exception handling omitted for readability
}
private void process(InputStream in) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for (int read = in.read(buf); read > 0; read = in.read(buf)) {
out.write(buf, 0, len);
}
process(out.toByteArray());
}
private native void process(byte[] resource);
并根据byte[]
进行原生处理。
第三种解决方案是将文件从包中移出并移到文件系统上,然后将本机代码指向该目录。
最后,这完全取决于您对资源的确切要求,以及他们真正是否需要在文件系统上。我会尽可能地保持与Java的接近,并且只在必要时才会出现(例如,您的图像处理代码)。