1

ネイティブ コード (Android OS 内) にアクセスし、jni インターフェイスを介してアプリケーションで使用する必要があるという要件があります。

例: HttpLiveSource.cppvoid NuPlayer::HTTPLiveSource::start() {..}内のメソッド へのアクセス。

私は、from Android - Include native StageFright features in my own projectから、これが 2 つのオプションを使用して可能であることを発見しました。

  1. Android の完全なソース ツリーを使用してプロジェクトをビルドします。
  2. インクルードファイルをプロジェクトにコピーするだけです

オプション1を使用できないため、オプション2を使用しようとしています...私はjniが初めてなので知りたいです:

  • プロジェクト内に含めるファイルは何ですか?
  • ネイティブメソッドにアクセスするには?
  • 将来性のあるアプローチですか? (OS のバージョンによって、ソース ファイルが別のフォルダーに移動されるのを見たことがあります)

ポインタや詳細な説明は非常に役立ちます。

4

1 に答える 1

2

プロジェクト内に含めるファイルは何ですか?

これはプロジェクトによって異なります。通常、増分アプローチを使用できます。コンパイラがインクルードの欠落について不平を言う場合、Google ソースに移動して、Git リポジトリの関連部分を複製します。ただし、完全な AOSP ツリーをダウンロードすることもできます。

最終段階で .so をリンクするには、非 NDK 共有ライブラリが必要になることに注意してください。/system/lib最も簡単な方法は、ターゲット デバイスからすべてのライブラリを取得することです。ただし、必要に応じてエミュレータを使用することもできます。

ネイティブメソッドにアクセスするには?

JNI を使用して Java アプリと通信するネイティブ コード ラッパー共有ライブラリを構築する必要があります。場合によっては、これは基本的にすべての基礎となるメソッドを完全な美しさで Java に公開する薄いレイヤーです。ただし、ネイティブ アクセスを集約し (結局のところ、すべての JNI トラバーサルには固有のオーバーヘッドがあります)、ネイティブ オブジェクト、スレッド、ユーザー名を処理する使いやすい高レベルの JNI クラスを考え出すことが望ましいです。 -それ。

将来性のあるアプローチですか? (OS のバージョンによって、ソース ファイルが別のフォルダーに移動されるのを見たことがあります)

いいえ、将来、または明示的にテストしていないデバイスの 1 つでさえも、100% 動作することが保証されているわけではありません。これは、ネイティブ コードの使用だけでなく、文書化されていない Java API にも当てはまります。OTOH、ソース ファイルを別のフォルダーに移動するような変更 (stagefright の 4.2 前後で起こったことなど) は、必ずしも非互換性を引き起こすわけではありません。

私はjniが初めてです

システム ライブラリを操作するには、JNI と Android NDK の基本的な理解以上のものが必要だと思います。飛び込む前に、http://www.apress.com/9781430248279または同様の本を読むことを強くお勧めします。

于 2013-12-26T15:32:07.080 に答える