Android Dynamic Libary Load vs LoadLibrary

时间:2014-06-12 02:16:51

标签: android android-ndk

当我在我的应用程序中嵌入libabc.so时,它可以正常工作 System.LoadLibrary("abc");

但是,当我将libabc.so移动到/ system / lib /并尝试加载它时 System.Load("/system/lib/libabc.so");我在logcat中收到以下链接器错误:

  

06-12 04:42:09.864:D / dalvikvm(17630):尝试加载lib /system/lib/libabc.so 0x4254afd8

     

06-12 04:42:09.869:E / linker(17630):“libabc.so”:忽略共享库中的2项DT_PREINIT_ARRAY!

     

06-12 04:42:09.869:D / dalvikvm(17630):添加了共享库/system/lib/libabc.so 0x4254afd8

     

06-12 04:42:09.869:D / dalvikvm(17630):在/system/lib/libabc.so 0x4254afd8中找不到JNI_OnLoad,跳过init

它实际上加载了我的库,但是我无法调用导出的函数(它告诉我们没有实现本机方法)。

为什么?

1 个答案:

答案 0 :(得分:0)

public class TestService extends IntentService {

    static { System.loadLibrary("abc"); }

    private Handler handler = new Handler();

    public native long myfunc(String arg);

    public TestService() {
        super("TestService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        runnable.run();
    }

    private Runnable runnable = new Runnable() 
    {
        public void run() 
        {
            System.out.println(">>> " + myfunc("test"));
        }
    };
}