调用Android Native方法失败



最近我正在研究Android Native方法。我发现一些怪异的东西,我只允许在MainAttivity类中定义和使用本机方法。

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