私たちの状況は次のとおりです。
特定の時間にユーザー定義のディレクトリをスキャンするネイティブ コードがいくつかあります。目標は、特定の種類のファイルに関するデータを収集し、そこから SQLite データベースを構築することです。照会するファイルが数万ある可能性があります。
問題は、ファイルが見つかるたびに、そのファイルについて収集されたデータが、Android SDK によって提供される SQLite クラスを介してデータベースにコミットされる前に、JNI 境界を越えて Java ランドに導かれなければならないことです。これには時間がかかりすぎます。
提案された解決策は、SQLite ソース コードをダウンロードし、それをプロジェクトにリンクして、ここで説明されているようにデータベースをネイティブに構築することです: SQLite with Android NDK。これにより、C++ レイヤーから Java レイヤーにデータを渡すのにかかる時間が完全になくなります。
問題は、これが行われた場合、Android SDK (Java レイヤー) を引き続き使用して、データベースを開いたり、通常どおり Cursor オブジェクトを取得したりできるかどうかです。データベースを非常にシンプルに保つことができます。外部キー、トリガー、制約などはありません。インデックスは非常に望ましいですが。
JNI 境界を越えてデータを移動するために、パイプとソケットを検討しました。ただし、名前付きパイプは Fat32 ファイル システムではサポートされていません (そのため、ユーザーがアプリケーションを Fat32 フォーマットの SD カードに移動した場合、これは使用できません)。マニフェストに疑わしいと思われるインターネットアクセス許可を含める必要があるため、ソケットも使用できません。
誰かがこれに関する情報を持っている場合は、ぜひご連絡ください。
どうもありがとう、P.