0

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

4

1 回答 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 回答