2012-03-09 5 views
1

今すぐ.soファイルとC++ヘッダーファイルがあります。 次のように機能があります:ネイティブメソッドを作成するにはどうすればよいですか?

public class Decoder { 
    static { 
     System.loadLibrary("SingleDecode"); 
    } 

    public native boolean HK_STD_CreateHandle(
     byte[] pFileHdrBuffer, 
     int dwFileHdrSize, 
     int dwBufferSize, 
     int hHandle); 
} 

しかし、私はネイティブ関数を記述するのか分からない:

BOOL __stdcall HK_STD_CreateHandle(IN PBYTE pFileHdrBuffer, IN DWORD dwFileHdrSize, IN DWORD dwBufferSize, OUT HANDLE& hHandle); 
typedef BYTE *  PBYTE; 
typedef unsigned long DWORD; 
typedef void * HANDLE; 

私は.soのファイルを使用するJavaクラスを実装することができると思います。誰か助けてくれますか?

+0

あなたのJNIファイルから.soファイルを取得しました –

+0

アンドロイドをコンパイルしましたか?NDK –

+0

ありがとうございます。サードパーティの.soファイルを使用したいと思います。 Javaでネイティブメソッドを宣言するだけで直接使用できると思っていましたが、サードパーティの.soファイルを使用するには、新しい.soファイルをndkで実装する必要があります。 –

答えて

0

まず、ネイティブ関数に特定の名前が必要です。あなたはネイティブメソッドを宣言しているパッケージcom.android.testにクラスMyActivityを持っている場合たとえば、対応するネイティブ関数は、指定されている必要があります

Java_com_android_test_MyActivity_functionName(); 

次に、ネイティブ関数は2つの引数を受け取る必要がありますあなたが明示的に定義していないもの(Java環境によって送信されます)。私はここでそれを説明することができましたが、JNIを読んでいればおそらく最も簡単です。例えばウィキペディアを試してみてください:

http://en.wikipedia.org/wiki/Java_Native_Interface

はあなたを助けますNDKに付属しているいくつかのサンプルもあります。

関連する問題