如何在jni函数中访问图像文件夹

时间:2012-05-29 16:25:04

标签: android java-native-interface

我有一个Android项目,在该项目中我有一个包含一些图像的文件夹。现在我想要的是在jni函数中访问该文件夹。那我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

Android应用程序本质上是一个zip文件,但是有很多很好的助手来获取这些资源。您需要记住的第一件事是这些文件实际上并不在文件夹中,除非您将它们放在那里。

尽管如此,对于您来说有很多可能的解决方案。

JNI(几乎)一路

JNI-y最常用的方法是使用像

这样的方法
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的接近,并且只在必要时才会出现(例如,您的图像处理代码)。