Как исправить cra sh в PJSIP Android Xamarin.Forms (Endpoint_libCreate) - PullRequest
0 голосов
/ 05 мая 2020

Я пытался интегрировать PJSIP в свое приложение Xamarin.Forms. Я успешно получил версию iOS для работы, но столкнулся с ошибкой sh в версии Android и не нашел для нее решения. Я пробовал все версии PJSIP от 2.8 до 2.10 с той же проблемой. Я также вернулся к образцу приложения pjsua2xamarin и получил то же самое cra sh.

Cra sh log:

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

Я сделал следующее:

  1. Следовал инструкциям в заявке 2086 PJSIP.
  2. Далее следовало « Начало работы: создание для Android».
  3. Добавлены следующие разрешения Android в Manifest, чтобы быть исчерпывающими, поскольку в Ticket 2086 упоминается, что sh на этапе инициализации, скорее всего, связано с разрешениями:

    <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?

1 Ответ

0 голосов
/ 20 мая 2020

После дальнейшей отладки выясняется, что ошибка sh вызвана основными проблемами с pjsip. Это не предназначено для правильной работы с Xamarin. Базовый код pjsip использует функцию JNI_OnLoad для получения указателя JavaVM. Из-за способа загрузки библиотек в Xamarin JNI_OnLoad никогда не вызывается. Этот указатель используется для создания GUID. Я изменил базовый код (guid_ android. c), чтобы создать строку guid, аналогичную тому, как это делается в (guid_simple. c), без использования указателя JavaVM. Теперь Endpoint.LibCreate не обнаруживает sh.

Однако я подозреваю, что указатель JavaVM может использоваться где-то еще.

...