如何修复PJSIP Android Xamarin.Forms(Endpoint_libCreate)中的崩溃问题。

问题描述 投票:0回答:1

我一直试图将PJSIP集成到我的Xamarin.Forms应用中。我成功地让iOS版本工作,但在Android版本上一直面临崩溃,没有找到解决方法。我尝试了从2.8到2.10的所有PJSIP版本,都出现了同样的问题。我也回到了样本 pjsua2xamarin 应用程序,但我得到了同样的崩溃。

崩溃日志。

[Mono] Found as 'CSharp_pjsua2xamarinfpjsua2_Endpoint_libCreate___'.
[libc] Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 30101

我做了这些事情

  1. 按照PJSIP的2086号票据中的指示.
  2. 按照"入门。构建安卓系统".
  3. 在Manifest中添加了以下Android权限,只是为了更全面,因为Ticket 2086提到初始化阶段的崩溃很可能与权限有关。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.USE_SIP" />
    <uses-permission android:name="android.permission.CAMERA" />
    
  4. 我试图在模拟器和Android SDK 22版本中运行,所以我不用担心请求权限的问题。

  5. 我还尝试了不同的NDK版本,从r13b到r20,并尝试针对不同的Android SDK级别。
  6. 我使用了以下配置参数。

    APP_PLATFORM=android-18 TARGET_ABI=x86 ./configure-android --use-ndk-cflags --disable-video
    

我不知道我可以做什么来调试这个问题。有人遇到过这个问题吗?当在Xamarin Visual Studio内运行时,我可以做些什么来调试这个问题?

android xamarin xamarin.forms pjsip
1个回答
0
投票

经过进一步调试,发现是由于pjsip的底层问题导致的崩溃。它没有指定与Xamarin正常工作。pjsip的底层代码利用JNI_OnLoad函数来检索JavaVM指针。由于Xamarin中加载库的方式,JNI_OnLoad从未被调用。这个指针是用来创建guid的。我修改了底层代码(guid_android.c),以创建guid字符串,类似于(guid_simple.c)中的方式,而不需要JavaVM指针。现在Endpoint.LibCreate没有崩溃。

然而,我怀疑JavaVM指针可能在其他地方被使用了。

© www.soinside.com 2019 - 2024. All rights reserved.