Android 中的 OpenTok + Twilio SDK 冲突

OpenTok + Twilio SDK conflicts in Android

我正在为 Android 和 iOS 开发一个 phonegap 应用程序。我也在使用 Twilio 和 OpenTok SDK。经过一段时间的努力,我可以让这两个 SDK 在 IOS 中工作。 openssl 库有问题,因为两个 sdk 都使用它。

但是,在 Android 上进行测试时,我遇到了链接器问题。在存在 twilio-native.so 的情况下,链接器无法找到 opentok.so。删除 twilio 引用后,一切正常。

我已经在 Android 4.3 和 Android 5.0 上测试过了。

I/OTPlugin( 7998): initSession
I/OTPlugin( 7998): created new session with data: ["45149131","1_MX40NTE0OTEzMX5-MTQ0MTAyOTY2NTEyMX5xR1c2WGpJTlozNW1QODM4NjBQVlAyYUJ-UH4"]
W/dalvikvm( 7998): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/opentok/android/Session;
W/System.err( 7998): java.lang.UnsatisfiedLinkError: Couldn't load opentok from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.biotech.treatmd-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.biotech.treatmd-2, /vendor/lib, /system/lib]]]: findLibrary returned null
W/System.err( 7998): at java.lang.Runtime.loadLibrary(Runtime.java:355)
W/System.err( 7998): at java.lang.System.loadLibrary(System.java:525)
W/System.err( 7998): at com.opentok.android.Session.<clinit>(Session.java:46)
W/System.err( 7998): at com.tokbox.cordova.OpenTokAndroidPlugin.execute(OpenTokAndroidPlugin.java:394)
W/System.err( 7998): at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:84)
W/System.err( 7998): at org.apache.cordova.PluginManager.exec(PluginManager.java:151)
W/System.err( 7998): at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:63)
W/System.err( 7998): at org.apache.cordova.ExposedJsApi.exec(ExposedJsApi.java:40)
W/System.err( 7998): at android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
W/System.err( 7998): at android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
W/System.err( 7998): at android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113)
W/System.err( 7998): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 7998): at android.os.Looper.loop(Looper.java:213)
W/System.err( 7998): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:819)
W/System.err( 7998): at java.lang.Thread.run(Thread.java:841)

如您在日志中所见,加载程序无法找到库。去掉twilio引用后就没有问题了

 ── src
    ├── com
    │   ├── biotech
    │   │   └── treatmd
    │   │       └── MainActivity.java
    │   ├── phonegap
    │   │   └── plugins
    │   │       └── twilioclient
    │   │           ├── IncomingConnectionActivity.java
    │   │           └── TCPlugin.java
    │   ├── pushwoosh
    │   │   └── plugin
    │   │       └── pushnotifications
    │   │           └── PushNotifications.java
    │   └── tokbox
    │       └── cordova
    │           └── OpenTokAndroidPlugin.java
    └── org
        └── apache
            └── cordova
                ├── device
                │   └── Device.java
                ├── dialogs
                │   └── Notification.java
                    └── statusbar
                    └── StatusBar.java

这里是 android 平台文件夹的一部分。

├──  libs
│   ├── Pushwoosh.jar
│   ├── android-support-v4.jar
│   ├── armeabi
│   │   ├── libopentok.so
│   │   └── libtwilio-native.so
│   ├── armeabi-v7a
│   │   └── libtwilio-native.so
│   ├── mips
│   │   └── libtwilio-native.so
│   ├── opentok-android-sdk-2.3.1.jar
│   ├── twilioclient-android.jar
│   └── x86
│       ├── libopentok.so
│       └── libtwilio-native.so

在这里你可以看到libs文件夹。正如我之前所说,当我删除 twilio 库时,OpenTok 完美运行。

我在使用 iOS 时遇到的问题是两个 sdk 都使用 libssl,而且它们是不同的版本。解决方案是删除 twilio openssl 库。 (即使在那种情况下,我认为唯一的问题是 twilio 坏了,而不是 openTok,所以这很奇怪)。

我想出了解决办法。 android 的 Twilio cordova 插件与较新版本的 twilio sdk 不兼容。所以你必须使用twilio sdk version 1.2.2。 此外,为了使两个插件一起工作,您必须使用 opentok sdk 版本 2.5.0。