Google ML Kit:找不到“libbarhopper_v2.so”

9

最近我更换了旧的条形码/QR扫描库,转而使用Google ML Kit用于条形码扫描,自从更换后,我通过Crashlytics收到了一些以前没有的新崩溃报告。

Fatal Exception: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.my.app-Q4EYyt2jmFlLaZ-mHL-J5A==/base.apk"],nativeLibraryDirectories=[/data/app/com.my.app-Q4EYyt2jmFlLaZ-mHL-J5A==/lib/arm64, /system/lib64, /vendor/lib64, /product/lib64]]]无法找到 "libbarhopper_v2.so" at java.lang.Runtime.loadLibrary0(Runtime.java:1011) at java.lang.System.loadLibrary(System.java:1660) at com.google.android.libraries.barhopper.BarhopperV2.(BarhopperV2.java:5) at com.google.mlkit.vision.barcode.zza.a_(zza.java:7) at com.google.mlkit.vision.barcode.internal.zzf.b(zzf.java:17) at com.google.mlkit.common.sdkinternal.ModelResource.zza(ModelResource.java:1) at com.google.mlkit.common.sdkinternal.zzl.run(zzl.java:1) at com.google.mlkit.common.sdkinternal.zzp.run(zzp.java:3) at com.google.mlkit.common.sdkinternal.MlKitThreadPool.zzd(MlKitThreadPool.java:19) at com.google.mlkit.common.sdkinternal.MlKitThreadPool.zza(MlKitThreadPool.java:1) at com.google.mlkit.common.sdkinternal.zzh.run(zzh.java:1) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:784)

致命例外: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip文件"/data/app/com.my.app-Y8cCSVtTMYVdnQQovlR0cw==/base.apk"],nativeLibraryDirectories=[/data/app/com.my.app-Y8cCSVtTMYVdnQQovlR0cw==/lib/arm, /system/lib, /vendor/lib]]]无法找到"libbarhopper_v2.so" 在java.lang.Runtime.loadLibrary0(Runtime.java:1067)处发生错误 在java.lang.Runtime.loadLibrary0(Runtime.java:1007)处发生错误 在java.lang.System.loadLibrary(System.java:1667)处加载库 在com.google.android.libraries.barhopper.BarhopperV2.(BarhopperV2.java:5)处初始化 在com.google.mlkit.vision.barcode.zza.a_(zza.java:7)处 在com.google.mlkit.vision.barcode.internal.zzf.b(zzf.java:17)处 在com.google.mlkit.common.sdkinternal.ModelResource.zza(ModelResource.java:1)处 在com.google.mlkit.common.sdkinternal.zzl.run(zzl.java:1)处 在com.google.mlkit.common.sdkinternal.zzp.run(zzp.java:3)处 在com.google.mlkit.common.sdkinternal.MlKitThreadPool.zzd(MlKitThreadPool.java:19)处 在com.google.mlkit.common.sdkinternal.MlKitThreadPool.zza(MlKitThreadPool.java:1)处 在com.google.mlkit.common.sdkinternal.zzh.run(zzh.java:1)处 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)处的工作线程运行 在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)处的线程运行 在java.lang.Thread.run(Thread.java:919)处的线程运行
简而言之,这个错误都归结为 "无法找到“libbarhopper_v2.so”"。
有人知道如何解决吗?
=============
编辑:受影响设备列表:
- 三星 Galaxy A6,Android 10 - 三星Galaxy J7 Max,Android 8.1.0 - 小米Redmi Go,Android 8.1.0 - 三星 Galaxy Grand Prime,Android 5.1.1 - 摩托罗拉 Moto G(第二代) - OPPO A33w,Android 5.1 - Starmobile Play Plus - 三星 Galaxy J2 Pro,Android 6.0.1 - 华为Y3III,Android 6.0 - 华为GR5,Android 6.0.1 - 摩托罗拉Moto X Play,Android 7.1.1 - 华为G Elite Plus,Android 7.0 - 三星Galaxy J6,Android 9 - 三星Galaxy J7 Prime,Android 7.0 - 联想Vibe k6,Android 7.0 - Wiko Pulp Fab 4G,Android 5.1.1

你使用的是哪个依赖库?'com.google.mlkit:barcode-scanning' 还是 'com.google.android.gms:play-services-mlkit-barcode-scanning'?另外,你是如何编译你的应用程序的?是构建 APK 还是 App Bundle? - Shiyu
@Shiyu,依赖项是com.google.mlkit:barcode-scanning:16.0.2,我正在构建一个应用程序包。 - svprdga
好的,请确保.so文件在您的base.apk中。 - Shiyu
2
是的,libbarhopper_v2.so库在apk中;实际上,apk本身对99%的用户都能正常工作。错误只发生在其中一小部分用户身上。 - svprdga
我也遇到了这个错误。虽然很罕见,但有一个用户(Galaxy J7 V)一直在遇到这个问题。我也使用BarhopperV2,它是应用程序本身捆绑的。 - Amila Abeygunasekara
显示剩余5条评论
2个回答

0

在项目的运行配置中禁用了“允许并行运行”后,这种情况就不再发生了,我之前为了解决另一个无关的问题而禁用了它。

正如 OP 所述,它在第一次运行时始终会发生,但在第二次运行及以后就不会再发生了。

有趣的是,这从未发生在我的任何用户身上,只发生在开发人员身上。


-1

1
在尝试了建议的解决方案之后: 在AndnroidManifest.xml中将extractNativeLibs设置为true 在gradle.properties中将android.bundle.enableUncompressedNativeLibs设置为false我可以确认这个修复方法没有起作用,问题仍然存在。 - svprdga
@AnkitBatra 不,我仍然遇到这个问题。我必须说,自半年以来我没有更新过这个库。 - svprdga
这似乎不相关。那个 bug 提到了“权限被拒绝”,而问题似乎是找不到库。 - Vince

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接