我有一个 android 项目,在该项目中我有一个包含一些图像的文件夹。现在我想要的是在 jni 函数中访问该文件夹。那么我该怎么做呢?
问问题
1009 次
1 回答
1
Android 应用程序本质上是一个 zip 文件,但是有很多很好的帮手可以获取这些资源。您需要记住的第一件事是,这些文件实际上并不在文件夹中,除非您将它们放在那里。
也就是说,对于您的情况,有许多可能的解决方案。
JNI(几乎)一路走来
最适合 JNI 的方式是使用类似的方法
private native void processResources(AssetManager assets);
在你的Activity
, 并使用 JNI 从中撬出所有必要的资源,将它们放在磁盘上的某个位置,然后处理它们。
混入一点Java
可能更简单的方法是使用一些有助于资源管理的 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,并且只有在你真的需要时才使用本地(例如,你的图像处理代码)。
于 2012-05-31T08:47:17.400 回答