调用Android本机方法失败
最近我正在研究android原生方法。我发现了一些奇怪的事情,那就是我只能在MainActivity类中定义和使用本机方法调用Android本机方法失败,android,native,Android,Native,最近我正在研究android原生方法。我发现了一些奇怪的事情,那就是我只能在MainActivity类中定义和使用本机方法 public class MainActivity extends AppCompatActivity { static { System.loadLibrary("native-lib"); } public final static String EXTRA_MESSAGE = "com.example.myfirstapp.
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();
}
这些应用程序将引发异常。我错过什么了吗 JNI方法签名包含包名和类名。所以不能从不同的类调用相同的函数 尝试创建一个类来连接本机方法。使它们公开和静态。就像下面的片段一样
public class NativeInterface {
static {
System.loadLibrary("native-lib");
}
public static native void stringFromJNIEx();
}
在本机部分,您的方法签名应该是这样的
Java_com_package_appname_NativeInterface_stringFromJNIEx
MainActivity和DisplayMessageActivity都在同一个android项目中。本机代码在其他android库中定义。我想知道为什么本机方法可以在MainActivity中运行,而不能在DisplayMessageActivity中运行。JNI方法签名不仅获取包名,还获取类名。可能是您的本机方法名,如“Java\u com\u package\u appname\u main activity\u stringFromJNIEx”。它包含类名。