【问题标题】:UnsatisfiedLinkError : setMessageHandler(Native Method)UnsatisfiedLinkError:setMessageHandler(本机方法)
【发布时间】:2013-07-30 07:13:34
【问题描述】:

我正在制作一个应用程序,其中使用了一些本机方法,这些方法在单独的类中定义。当我在我的 Activity 类中创建该类的实例时,就会发生这种类型的错误。

这是我的活动类

public class LoginActivity extends Activity
{
        PortSipSdk sdk;
    @Override
    public void onCreate(Bundle savedInstanceState) 
{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.loginview);
        sdk = PortSipSdk.getInstance();//error is occurs at this line
        sdk.setOnRegisterListener(this);
    }
}

Java 类是

public class PortSipSdk {
    private final String TAG = "PortSipSdk";
    private static PortSipSdk instance;
    private PortSipNetwork mNetAssist;
    private KeyguardLock mKeyguardLock;

    private Context mContext;

    long mSessionID = PortSipErrorcode.INVALID_SESSION_ID;

    public synchronized static PortSipSdk getInstance() {
        if (instance == null) {
            instance = new PortSipSdk();            
        }
        return instance;
    }

    private PortSipSdk() {
        msgDispatcher = new MainHandler();
        setMessageHandler(msgDispatcher);
        videoRecorder = new PortSipVideoRecoder();
    }


    public native void setMessageHandler(Handler msghandler);

    // Initialize and register functions
    private native int initializeSDK(int enum_transport, String agent,
            String STUNServer, int STUNServerPort);
}

日志是

07-30 12:13:01.852: E/AndroidRuntime(651): FATAL EXCEPTION: main
07-30 12:13:01.852: E/AndroidRuntime(651): java.lang.UnsatisfiedLinkError: setMessageHandler
07-30 12:13:01.852: E/AndroidRuntime(651):  at com.portsip.PortSipSdk.setMessageHandler(Native Method)
07-30 12:13:01.852: E/AndroidRuntime(651):  at com.portsip.PortSipSdk.<init>(PortSipSdk.java:62)
07-30 12:13:01.852: E/AndroidRuntime(651):  at com.portsip.PortSipSdk.getInstance(PortSipSdk.java:55)
07-30 12:13:01.852: E/AndroidRuntime(651):  at com.portsip.test.LoginActivity.onCreate(LoginActivity.java:48)
07-30 12:13:01.852: E/AndroidRuntime(651):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-30 12:13:01.852: E/AndroidRuntime(651):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-30 12:13:01.852: E/AndroidRuntime(651):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-30 12:13:01.852: E/AndroidRuntime(651):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-30 12:13:01.852: E/AndroidRuntime(651):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-30 12:13:01.852: E/AndroidRuntime(651):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 12:13:01.852: E/AndroidRuntime(651):  at android.os.Looper.loop(Looper.java:123)
07-30 12:13:01.852: E/AndroidRuntime(651):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-30 12:13:01.852: E/AndroidRuntime(651):  at java.lang.reflect.Method.invokeNative(Native Method)
07-30 12:13:01.852: E/AndroidRuntime(651):  at java.lang.reflect.Method.invoke(Method.java:521)
07-30 12:13:01.852: E/AndroidRuntime(651):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-30 12:13:01.852: E/AndroidRuntime(651):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-30 12:13:01.852: E/AndroidRuntime(651):  at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 从 getInstance 方法中移除同步关键字。
  • 删除同步关键字后无效
  • 你加载了原生库吗?
  • 不...问题是您已声明为静态并且在活动中您已为该类创建对象..所以也删除静态关键字。
  • @blackbelt 是的本机库已加载

标签: android unsatisfiedlinkerror


【解决方案1】:

确保您的 NDK 二进制文件在您的 APK 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多