2013-04-17 25 views
2

我見過herehere,你不能重寫android的本地方法,但我想知道如果我可以有一個類聲明一些本地方法,然後擴展它與另一個類聲明一些額外的類本地方法。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類?

回答

3

好的,我剛找到解決方案。 問題是在.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(...){ ... } 

注意 「」 第二個簽名。