在 TextReconiger 上实例化期间,我如何处理由于 Google Ocr lib 而导致的应用程序中的本机崩溃?

Posted

技术标签:

【中文标题】在 TextReconiger 上实例化期间,我如何处理由于 Google Ocr lib 而导致的应用程序中的本机崩溃?【英文标题】:How can i handle native crash in my app due to Google Ocr lib, during instantiation on TextReconiger? 【发布时间】:2018-04-22 13:19:56 【问题描述】:

我正在使用 Google 的 OCR 库从我的应用中的图像中检测文本。早些时候它工作正常,但突然开始出错。我在 TextReconiger 的实例化过程中崩溃了。我在三星 S6 edge、三星 S7 等设备上遇到了这种崩溃,而在某些设备上它运行良好。

我在代码中的这一行遇到了崩溃

TextRecognizer textRecognizer = new TextRecognizer.Builder(context).build();

崩溃日志:

  native: pc 000000000006f9fc  /system/lib64/libc.so (tgkill+8)
  native: pc 000000000006cd10  /system/lib64/libc.so (pthread_kill+64)
  native: pc 0000000000025078  /system/lib64/libc.so (raise+24)
  native: pc 000000000001cc04  /system/lib64/libc.so (abort+52)
  native: pc 00000000004750d0 
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000475770  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000475814  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000474830  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 000000000026cee4  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000271190  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000065794  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000065488  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 000000000027caf4  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000280274  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000067c84  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000067f64  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000063dec  
  /data/data/com.google.android.gms/app_vision/ocr/libs/arm64-
  v8a/libocr.so
  native: pc 0000000000387e60  
/data/user_de/0/com.google.android.gms/app_chimera/m/00000027/oat/arm64
/DynamiteModulesA_GmsCore_prodmnc_xxhdpi_release.odex

此崩溃正在影响我的应用在 Google Play 商店中的评级。从这个崩溃日志中,我不知道如何解决这个问题。如果有人知道此问题的解决方案,请帮助我。

【问题讨论】:

如果您有问题并且您有答案,如果 SO 上没有解决方案,请使用相关信息解释问题,然后提供您的解决方案作为答案。跨度> 【参考方案1】:

我在 App 端实现了一些逻辑来减少崩溃。

从应用程序方面,我们可以做一件事来最大程度地减少崩溃。我们可以编写代码来跟踪在 TextRecognizer 对象实例化期间应用程序是否在设备上崩溃,然后从下一次我们可以绕过/禁用 OCR 功能。但在其他设备上(没有崩溃)它会完美运行。

这将导致在受影响的设备上崩溃一次,并且下次不会崩溃(是的,它会影响功能)。

boolean isFirstTimeUser = getBooleanFromPreference (default value TRUE) 
boolean isGVSupportThisDevice = getBooleanFromPreference (default value False)

if (isFirstTimeUser || isGVSupportThisDevice) 

     Update Preference to make isFirstTimeUser to false

     textRecognizer = new TextRecognizer.Builder(context).build();

     Update Preference to make isGVSupportThisDevice to True

这可能会有所帮助。谢谢

【讨论】:

Update Preference to make isGVSupportThisDevice to false 最后一行应该是 true 而不是 false,如果我错了请纠正我。 我们正在做的是保留在 Firebase 上崩溃的设备列表。如果有任何设备崩溃,那么我们将在 firebase 中手动添加设备。从 GitHub 问题页面我们已经拥有数百台设备。【参考方案2】:

我有同样的问题和同样的错误跟踪。

我了解到,带有 OCR 修复的新 Google Play 服务版本目前处于 Beta 通道中。我刚刚测试过它并且正在工作!

https://play.google.com/apps/testing/com.google.android.gms

【讨论】:

以上是关于在 TextReconiger 上实例化期间,我如何处理由于 Google Ocr lib 而导致的应用程序中的本机崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

模仿`super`关键字:在实例化期间设置`base`类和`derived`类字段

在类的实例化期间如何检查该类的对象是不是已经存在,如果存在,则指向已经存在的对象? [复制]

如果一个元素正在被动画,我如何用 jQuery 找出?

始终如一--单例模式分析总结

仅实例化一个类的唯一对象

如何正确实例化 os.FileMode