【问题标题】:android extend class with native methodsandroid扩展类与本机方法
【发布时间】:2013-04-17 09:45:03
【问题描述】:

我已经看到 herehere 不能在 android 中覆盖本地方法,但我想知道我是否可以让一个类声明一些本地方法,然后用另一个类声明一些额外的本地方法来扩展它.

我的情况如下:

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 似乎没有效果。

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

【问题讨论】:

    标签: android inheritance native extends


    【解决方案1】:

    好的,我刚刚找到了解决方案。 问题出在 .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”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 2012-07-05
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 2012-08-27
      相关资源
      最近更新 更多