Недавно я работаю над собственным методом android. Я нашел что-то странное, что я могу только определить и использовать собственный метод в классе 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 находятся в одном проекте андроида. Нативный код определяется в другой библиотеке Android. Интересно, почему собственный метод можно запустить в MainActivity, но не в DisplayMessageActivity. – user976385
Подпись метода JNI не просто получает имя пакета, но также получает имя класса. Возможно, ваше собственное имя метода похоже на «Java_com_package_appname_MainActivity_stringFromJNIEx». Он содержит имя класса. – mcemilg
Большое спасибо! Он работает сейчас! Ты действительно делаешь мой день! – user976385