调用Android本机方法失败

时间:2016-11-25 06:05:13

标签: android native

最近我正在开发android native方法。我发现了一些奇怪的东西,我只允许在MainActivity类中定义和使用本机方法。

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();
}

应用程序将抛出异​​常。我想念什么吗?

1 个答案:

答案 0 :(得分:1)

JNI方法签名包含包名称和类名。所以你不能从不同的类中调用相同的函数。

尝试创建一个用于连接本机方法的类。让它们公开和静止。像下面的片段一样。

public class NativeInterface {
    static {
        System.loadLibrary("native-lib");
    }

    public static native void stringFromJNIEx();

}

在本机部分,您的方法签名应该是这样的;

Java_com_package_appname_NativeInterface_stringFromJNIEx