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();
}
他のクラスで同じメソッドを呼び出すようにしてみてください。私は何かが欠けていますか?
MainActivityとDisplayMessageActivityの両方が同じアンドロイドプロジェクトにあります。ネイティブコードは、他のアンドロイドライブラリで定義されています。 MainActivityではネイティブメソッドを実行できますが、DisplayMessageActivityでは実行できないのはなぜですか? – user976385
JNIメソッドのシグネチャは、パッケージ名を取得するだけでなく、クラス名も取得します。おそらく、このような 'Java_com_package_appname_MainActivity_stringFromJNIEx'のようなネイティブメソッド名。クラス名が含まれています。 – mcemilg
ありがとう!それは今働きます!あなたは本当に私の一日を作る! – user976385