DeepSpeechDemo 应用程序可与 Gradle cli 一起使用,但在使用 Android Studio 构建时会崩溃

DeepSpeechDemo App works with Gradle cli but crashes when built with Android Studio

android-mic-streaming demo 使用现成的 ./gradlew installDebug,但是当 Android Studio 中的播放按钮用于编译和安装完全相同的项目时,它会崩溃并显示以下内容点击记录后:

2020-08-19 00:44:24.862 12872-12872/org.deepspeechdemo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.deepspeechdemo, PID: 12872
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:7448)
        at android.view.View.performClickInternal(View.java:7425)
        at android.view.View.access00(View.java:810)
        at android.view.View$PerformClick.run(View.java:28296)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:7448) 
        at android.view.View.performClickInternal(View.java:7425) 
        at android.view.View.access00(View.java:810) 
        at android.view.View$PerformClick.run(View.java:28296) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
     Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libdeepspeech-jni.so" not found
        at java.lang.Runtime.loadLibrary0(Runtime.java:1087)
        at java.lang.Runtime.loadLibrary0(Runtime.java:1008)
        at java.lang.System.loadLibrary(System.java:1664)
        at org.mozilla.deepspeech.libdeepspeech.DeepSpeechModel.<clinit>(DeepSpeechModel.java:9)
        at org.deepspeechdemo.MainActivity.createModel(MainActivity.kt:90)
        at org.deepspeechdemo.MainActivity.onRecordClick(MainActivity.kt:120)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
        at android.view.View.performClick(View.java:7448) 
        at android.view.View.performClickInternal(View.java:7425) 
        at android.view.View.access00(View.java:810) 
        at android.view.View$PerformClick.run(View.java:28296) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 


该问题似乎与使用 Android Studio 时未包含 libdeepspeech-jni.so 有关。我对 Android 开发完全陌生(我正在构建一个 Mozilla-STT React Native 模块,只支持 iOS 是没用的)所以这特别令人困惑。

谢谢!

编辑:

数小时后的随机试验和错误:在 Android Studio 中将此选项从“默认 APK”更改为“来自应用程序包的 APK”使演示开始工作

但是,在我的 React Native 模块示例应用程序(它有一个最终依赖于实际 libdeepspeech 的依赖项 android 项目)上做同样的事情并没有奏效。它在使用 x86_64 时开始工作,因此必须没有 libdeepspeech x86 二进制文件。

数小时后的随机试验和错误:在 Android Studio 中将此选项从“默认 APK”更改为“来自应用程序包的 APK”使演示开始工作

但是,在我的 React Native 模块示例应用程序(它有一个最终依赖于实际 libdeepspeech 的依赖项 android 项目)上做同样的事情并没有奏效。它在使用 x86_64 时开始工作,因此 一定没有 libdeepspeech x86(32 位)二进制文件