调用 Android 本机方法失败
Calling Android native method fail
最近我在研究 android 本机方法。我发现了一些奇怪的东西,我只允许在 MainActivity class.
定义和使用本机方法
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();
.....
}
当我尝试在其他 class
中调用相同的方法时
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 方法签名包含包名称和 class 名称。所以你不能从不同的 classes.
调用同一个函数
尝试创建一个 class 来连接您的本机方法。使它们 public 和静态。喜欢以下片段。
public class NativeInterface {
static {
System.loadLibrary("native-lib");
}
public static native void stringFromJNIEx();
}
在原生部分你的方法签名应该是这样的;
Java_com_package_appname_NativeInterface_stringFromJNIEx
最近我在研究 android 本机方法。我发现了一些奇怪的东西,我只允许在 MainActivity class.
定义和使用本机方法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();
.....
}
当我尝试在其他 class
中调用相同的方法时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 方法签名包含包名称和 class 名称。所以你不能从不同的 classes.
调用同一个函数尝试创建一个 class 来连接您的本机方法。使它们 public 和静态。喜欢以下片段。
public class NativeInterface {
static {
System.loadLibrary("native-lib");
}
public static native void stringFromJNIEx();
}
在原生部分你的方法签名应该是这样的;
Java_com_package_appname_NativeInterface_stringFromJNIEx