3

JNIで使用するための単純なクラスがあり、ヘッダーファイル(.h)にエクスポートする必要があります。

プロジェクトのフォルダーにjavah移動して、コマンドを使用する必要があることを読み、次のように入力します。src

javah -jni com.main_package.NativeClass 

Windowsでは正常に動作しますが、私のメインOS(Linux)では動作しません。クラスが見つからないと言い続けます。コマンドの多くの組み合わせを使用して、考えられる多くのパスで実行しようとしましたが、機能しませんでした。私は多くのチュートリアルとWebサイト(ここを含む)に従い、それらの組み合わせも試しました。

ここに示すように、これにはEclipseの外部ツールを使用してみましたが、同じエラーも表示されています。

私が得るエラーは次のようになります:

error: cannot access com.main_package.NativeClass 
class file for com.main_package.NativeClass  not found
javadoc: error - Class com.main_package.NativeClass  not found.
Error: No classes were specified on the command line.  Try -help.

誰か助けてくれませんか?私はLinuxでの作業が本当に好きで、このツールを使用する必要があるたびにOSを切り替えたくありません。


正解は次のとおりです。

  1. コンソールの場合は、「bin / classes」フォルダーに移動し、使用したコマンドを実行します。

    javah -jni com.main_package.NativeClass

  2. ${project_loc}/bin/Eclipseの場合は、私が提供したリンクを使用しますが、使用する代わりに${project_loc}/bin/classes/、パッケージエクスプローラーで、NativeClass.javaに移動し、外部ツールを実行します。出力は、Javaファイルと同じパスになります。

4

2 に答える 2

3

srcプロジェクトのフォルダーには移動しませんが、コンパイルされた.classファイルのルート(comサブフォルダーが存在するか作成されている場所)に移動します。javahソースファイルではなく、コンパイルされたクラスを探しています。手動で実行した場合javac、クラスファイルは元のソースと同じ場所にあります。次に、「srcフォルダーに移動する」というステートメントは正しいです。ただし、Eclipseにプロジェクトがある場合、またはantなどを使用している場合は、プロジェクトの設定方法に応じて、クラスが完全に異なる場所にある可能性があります。WindowsとLinuxのEclipseプロジェクトは異なって設定されていると思います。

于 2012-06-21T10:54:01.923 に答える
3

クラスファイルでjavahを使用する必要はありません。ソースファイル(.java)でjavahを直接使用して、ネイティブC / ++署名(ヘッダー)ファイルを生成できます。元:

javah -cp /Users/Android/android-sdk/platforms/android-xy/android.jar;. com.test.JniTest
于 2013-09-21T05:26:50.440 に答える