android 使用 native 方法扩展类

标签 android inheritance native extends

我见过herehere你不能覆盖android中的 native 方法,但我想知道是否可以有一个类声明一些 native 方法,然后用另一个类声明一些额外的 native 方法来扩展它。

我的情况如下:

public class A{
    public native int aMethod();
}

public class B extends A{
    public native int bMethod();

    static {
        try{
            System.loadLibrary("MyNativeLibraryWithBothaMethodAndbMethod");
        }
        catch (java.lang.UnsatisfiedLinkError e){
            System.out.println (e);
        }
    }
}

public class MyActivity extends Activity {
    private B bClass;

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        bClass = new B();
        bClass.aMethod();//Working fine
        bClass.bMethod();//UnsatisfiedLinkError

    }
}

库加载没有问题,并且调用了第一个方法,但没有调用第二个方法。

如果我将 bMethod 从 B 移至 A,一切正常。

将 System.loadlibrary() 从 B 移动到 A 似乎没有效果。

是否可以使用额外的 native 方法来扩展 A 类?

最佳答案

好的,我刚刚找到了解决方案。 问题出在 .cpp 文件中:

我编辑了 MyNativeLibraryWithBothaMethodAndbMethod 文件:

#include "my_package_name_A.h"
JNIEXPORT jint JNICALL Java_my_package_name_A_aMethod( ... ){ ... }
JNIEXPORT jint JNICALL Java_my_package_name_A_bMethod( ... ){ ... }

#include "my_package_name_A.h"
JNIEXPORT jint JNICALL Java_my_package_name_A_aMethod( ... ){ ... }
JNIEXPORT jint JNICALL Java_my_package_name_B_bMethod( ... ){ ... }

请注意第二个签名中的“B”。

关于android 使用 native 方法扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16056765/

相关文章:

android - 动画没有开始!! (安卓)

java - ViewPager.SimpleOnPageChangeListener 不起作用

java - Android Studio 事件监听器之谜(给我)(setOnClickEventListener)

javascript - Chrome 开发者工具 - JavaScript 继承

java - Java中接口(interface)实现的继承

javascript - 是否可以通过网络浏览器 api 访问移动设备的电池状态或充电?

java - 如何在签名中使用泛型正确覆盖抽象方法

java - 在哪里可以找到 java.lang native 方法的源代码?

c# - P/Invoke 更改传递参数的值