调用 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