alphacep / vosk-android-demo

Offline speech recognition for Android with Vosk library.
Apache License 2.0
740 stars 198 forks source link

App crashes , gives Didn't find class "com.sun.jna.PointerType" on path: DexPathList #175

Closed taouichaimaa closed 2 years ago

taouichaimaa commented 2 years ago

Trying to pass audio file to VOSK, it's in wav format however it causes the application to crash . this is my code:

 private fun recognizeFile() {
            try {
                Log.i("recognizer1","trying recognizer")
                val rec = Recognizer(
                    model, 16000f, "[\"one zero zero zero one\", " +
                            "\"oh zero one two three four five six seven eight nine\", \"[unk]\"]"
                )
                Log.i("recognizer2","trying recognizer")
                val ais: InputStream = audioFileRecordedOuput.inputStream()
                Log.i("recognizer3","trying recognizer")
                if (ais.skip(44) != 44L) throw IOException("File too short")
                Log.i("recognizer4","trying recognizer")
                speechStreamService = SpeechStreamService(rec, ais, 16000F)
                Log.i("recognizer5","trying recognizer")
                speechStreamService.start(this)
                Log.i("recognizer6","trying recognizer")
            } catch (e: IOException) {
                Log.e("Recognizer file",e.stackTraceToString())
            }

    }

and this is the stacktrace:

    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/sun/jna/PointerType;
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:615)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sun.jna.PointerType" on path: DexPathList[[zip file "/data/app/~~kQQaehvNNV4-ksOKpwffaQ==/beatview.android.huru-0tT3AW-m2jLUNZZMlUIP3Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~kQQaehvNNV4-ksOKpwffaQ==/beatview.android.huru-0tT3AW-m2jLUNZZMlUIP3Q==/lib/arm64, /data/app/~~kQQaehvNNV4-ksOKpwffaQ==/beatview.android.huru-0tT3AW-m2jLUNZZMlUIP3Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)

The logs only show up to Log.i("recognizer1","trying recognizer") and then crashes.

nshmyrev commented 2 years ago

You probably didn't add jna library as a dependency for your project.

On most phones it is included as a default I think, but some time it might be missing.

taouichaimaa commented 2 years ago

Thank you I added it when I checkout the sample app build gradle.

maxkrieger commented 2 years ago

Adding

implementation group: 'net.java.dev.jna', name: 'jna', version: '5.10.0'

to my app's build.gradle fixed this issue for me!