android - 调用 Android native 方法失败

标签 android native

最近在研究android native方法。我发现了一些奇怪的事情,那就是我只允许在 MainActivity 类中定义和使用 native 方法。

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 方法签名包含包名和类名。所以你不能从不同的类中调用相同的函数。

尝试创建一个类来连接您的 native 方法。使它们公开和静态。喜欢下面的 fragment 。

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

    public static native void stringFromJNIEx();

}

在原生部分你的方法签名应该是这样的;

Java_com_package_appname_NativeInterface_stringFromJNIEx

关于android - 调用 Android native 方法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40798699/

相关文章:

android - 带报价的 ORMLite 查询,Android

java - 通过 JWS 部署的 Applet 在 JNA 中使用 native 库的正确方法(java web start)

javascript - 三星智能电视 - SEF 与 PNaCL

android - Android 6 上的 Retrofit + Robospice native 崩溃 - 致命信号 11 (SIGSEGV),代码 1

javascript - 为什么我的笑脸解析代码调用原生 javascript 函数?

android - 在 ListView 中单击部分标题的奇怪行为

android - EditText 的高度不会扩展到其父级的高度

android - IBM Worklight 6.1 中基于 X509 证书的身份验证

java-native-interface - Kotlin/Native 自己能用吗?

android - 如何在 Android 后台监控应用程序的传感器使用情况?