2016-11-25 3 views
2

最近、私はアンドロイドのネイティブメソッドに取り組んでいます。私は奇妙なものを見つけました。私は、MainActivityクラスでネイティブメソッドを定義して使用することしか許されていません。Androidネイティブメソッドの呼び出しに失敗する

public class MainActivity extends AppCompatActivity { 

    static { 
     System.loadLibrary("native-lib"); 
    } 

    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; 
    private static final int REQUEST_FINE_LOCATION=0; 

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

     //registerForContextMenu(); 
     stringFromJNIEx(); 
    } 

    public native String stringFromJNIEx(); 
..... 
} 

私はアプリが例外をスローします

public class DisplayMessageActivity extends Activity { 

    static { 
     System.loadLibrary("native-lib"); 
    } 

    private MyGLSurfaceView mGLView; 

    public static String qrCode=""; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent intent = getIntent(); 
     String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
     qrCode=message; 

     mGLView = new MyGLSurfaceView(this); 
     setContentView(mGLView); 

     registerForContextMenu(mGLView); 

     stringFromJNIEx(); 
} 

他のクラスで同じメソッドを呼び出すようにしてみてください。私は何かが欠けていますか?

答えて

1

JNIメソッドのシグネチャには、パッケージ名とクラス名が含まれています。したがって、異なるクラスから同じ関数を呼び出すことはできません。

ネイティブメソッドをインターフェイスするクラスを作成してください。それらを公開し静的にします。以下のスニペットのように。

public class NativeInterface { 
    static { 
     System.loadLibrary("native-lib"); 
    } 

    public static native void stringFromJNIEx(); 

} 

ネイティブの部分では、メソッドシグネチャは次のようになります。

Java_com_package_appname_NativeInterface_stringFromJNIEx 
+0

MainActivityとDisplayMessageActivityの両方が同じアンドロイドプロジェクトにあります。ネイティブコードは、他のアンドロイドライブラリで定義されています。 MainActivityではネイティブメソッドを実行できますが、DisplayMessageActivityでは実行できないのはなぜですか? – user976385

+0

JNIメソッドのシグネチャは、パッケージ名を取得するだけでなく、クラス名も取得します。おそらく、このような 'Java_com_package_appname_MainActivity_stringFromJNIEx'のようなネイティブメソッド名。クラス名が含まれています。 – mcemilg

+0

ありがとう!それは今働きます!あなたは本当に私の一日を作る! – user976385

関連する問題