0

私はAndroidプロジェクトを持っており、そのプロジェクト内にいくつかの画像を含むフォルダがあります.今、私が欲しいのは、jni関数内でそのフォルダにアクセスすることです. では、どうすればよいのでしょうか。

4

1 に答える 1

1

Androidアプリケーションは基本的にzipファイルですが、これらのリソースにアクセスするための優れたヘルパーがたくさんあります。最初に覚えておく必要があるのは、これらのファイルは、そこに配置しない限り、実際にはフォルダーにないということです。

そうは言っても、あなたの状況に対して考えられる解決策はたくさんあります。

JNI(ほぼ)ずっと

物事を進めるための最もJNI-yの方法は、次のようなメソッドを使用することです。

private native void processResources(AssetManager assets);

で、ActivityJNIを使​​用して必要なすべてのリソースをそこからこじ開け、ディスク上のどこかに配置して処理します。

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[]ます。

ファイルシステムでファイルを準備する

3番目の解決策は、ファイルをバンドルからファイルシステムに移動してから、ネイティブコードをそのディレクトリにポイントすることです。

それで?

結局のところ、それはすべて、リソースで正確に何をしたいか、そしてそれらが本当にファイルシステム上にある必要があるかどうかに依存します。私は物事を可能な限りJavaに近づけ、本当に必要な場合にのみネイティブにします(たとえば、画像操作コード)。

于 2012-05-31T08:47:17.400 に答える