0

アンドロイド初心者です。そして、既存の Android ネイティブ メソッドを利用する Java クラスをいくつか書きたいと思います。簡単な例として、FloatMath クラス内から floor メソッドを公開してみました。ただし、これによりアプリが強制的に閉じられます。以下のコードをコピーしました。これは非常にシンプルで、v1.6 を対象としています。それで、私が欠けている明らかな何かがあるかどうか尋ねてもよろしいですか?特別なライブラリやコンパイラをインポートする必要がありますか?

public class MainActivity extends Activity {

    public static native float floor(float value);  

    float inputFloat = (float) 2.3;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        float outputFloat = floor(inputFloat);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
4

2 に答える 2

4

このようにしようとしていることはできません。

JNI (Java Native Interface) では、ネイティブ メソッドはその名前によって特定のクラスにリンクされます。

あなたの場合、たとえばlibfoo.so、という名前のエクスポートされた関数を持つネイティブ ライブラリを定義する必要がありますJava_com_example_app_MainActivity_floor(com.example.app はパッケージ名です)。次に、経由でライブラリをロードするSystem.loadLibrary("foo")と、そのメソッドが使用可能になります。

他のネイティブ ライブラリ (対応する Java クラスの Java リフレクションを除く) から関数を呼び出す 1 つの方法は、C/C++ からライブラリをロードし、その関数を ( などを介して) ラップすることdlopenですdlsym

あなたが何をしようとしているのかをもっと知らなければ、私はこれ以上具体的に言うことはできません.

JNI とネイティブ開発について詳しくは、https ://code.google.com/p/awesomeguy/wiki/JNITutorial をご覧ください(少し古いですが、JNI の部分はまだ保持されています)。

于 2013-07-27T15:08:43.800 に答える
0

文字を追加してみるf

float inputFloat = (float) 2.3f;
于 2013-07-27T14:58:10.257 に答える