我见过here和 here你不能覆盖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/