【问题标题】:Java.Lang.ClassNotFoundException: Didn't find class "com.google.android.gms.vision.text.TextRecognizer$Builder" Xamarin AndroidJava.Lang.ClassNotFoundException:找不到类“com.google.android.gms.vision.text.TextRecognizer$Builder”Xamarin Android
【发布时间】:2019-08-22 05:10:10
【问题描述】:

在 Xamarin Android 的以下行中出现 Java.Lang.ClassNotFoundException 错误

TextRecognizer textRecognizer = new TextRecognizer.Builder(ApplicationContext).Build();

{Java.Lang.ClassNotFoundException: Didn't find class "com.google.android.gms.vision.text.TextRecognizer$Builder" on path: DexPathList[[zip file "/data/app/dine.dine-4Lcxwvl8j7kQmp8qGBPDCA==/base.apk"],nativeLibraryDirectories=[/data/app/dine.dine-4Lcxwvl8j7kQmp8qGBPDCA==/lib/x86, /data/app/dine.dine-4Lcxwvl8j7kQmp8qGBPDCA==/base.apk!/lib/x86, /system/lib]]
      at Java.Interop.JniEnvironment+Types.FindClass (System.String classname) [0x00114] in <286213b9e14c442ba8d8d94cc9dbec8e>:0 
      at Java.Interop.JniType..ctor (System.String classname) [0x00006] in <286213b9e14c442ba8d8d94cc9dbec8e>:0 
      at Java.Interop.JniType.GetCachedJniType (Java.Interop.JniType& cachedType, System.String classname) [0x00018] in <286213b9e14c442ba8d8d94cc9dbec8e>:0 
      at Java.Interop.JniPeerMembers.get_JniPeerType () [0x0000c] in <286213b9e14c442ba8d8d94cc9dbec8e>:0 
      at Java.Interop.JniPeerMembers+JniInstanceMethods.get_JniPeerType () [0x0000a] in <286213b9e14c442ba8d8d94cc9dbec8e>:0 
      at Java.Interop.JniPeerMembers+JniInstanceMethods.StartCreateInstance (System.String constructorSignature, System.Type declaringType, Java.Interop.JniArgumentValue* parameters) [0x0003f] in <286213b9e14c442ba8d8d94cc9dbec8e>:0 
      at Android.Gms.Vision.Texts.TextRecognizer+Builder..ctor (Android.Content.Context context) [0x0005b] in <3d29e02cc4534fbf8547810969e46514>:0 
      at dine.MainActivity.Ocr (Android.Graphics.Bitmap bitmap) [0x00001] in D:\dine\dine\MainActivity.cs:753 
      at dine.MainActivity.StartCapture () [0x001ad] in D:\dine\dine\MainActivity.cs:711 
      --- End of managed Java.Lang.ClassNotFoundException stack trace ---
    java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.vision.text.TextRecognizer$Builder" on path: DexPathList[[zip file "/data/app/dine.dine-4Lcxwvl8j7kQmp8qGBPDCA==/base.apk"],nativeLibraryDirectories=[/data/app/dine.dine-4Lcxwvl8j7kQmp8qGBPDCA==/lib/x86, /data/app/dine.dine-4Lcxwvl8j7kQmp8qGBPDCA==/base.apk!/lib/x86, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at mono.java.lang.RunnableImplementor.n_run(Native Method)
        at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
    }

【问题讨论】:

  • 您是否启用了 ProGuard?
  • 是的,ProGaurd 和 MultiDex 已启用 @Pierre
  • 另一个提示,您应该始终尝试使用 proguard 进行编译,并且首先不使用 multidex,proguard 在减少方法数方面做得很好,所以请先尝试不使用 multidex。

标签: android xamarin xamarin.android google-play-services vision


【解决方案1】:

如果您启用了 proguard,请在项目的 proguard.cfg 文件中添加以下内容:

# Google GMS
-keep public class com.google.android.gms.* { public *; }
-keep class com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver
-dontwarn com.google.android.gms.**

这将在编译时保留提到的类,因此在运行时可用。

编辑

当您在项目设置中启用 Proguard 时,您需要在项目中添加一个 *.cfgfile,即。 proguard.cfgmypg.cfg

然后右键新建文件->选择Properties然后设置:

  • Build Action : ProguardConfiguration
  • Copy to Output Directory : Do not copy

最后将你的 proguard 行添加到这个文件中。每一行都是一个单独的设置

EDIT2

也添加GMS TextRecognizer 部分,看看是否有效?

# Google GMS
-keep public class com.google.android.gms.* { public *; }
-keep class com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver
-dontwarn com.google.android.gms.**

# GMS TextRecognizer
-keep public class com.google.android.gms.vision.text.TextRecognizer { public *; }
-keep public class com.google.android.gms.vision.text.TextRecognizer.** { public *; }
-keep class com.google.android.gms.vision.text.TextRecognizer
-keep class com.google.android.gms.vision.text.TextRecognizer.**

【讨论】:

  • 无法在我的项目文件夹中找到 progaurd.cfg
  • @VINNUSAURUS 查看编辑,添加文件,然后添加 GMS 行 - 你应该很高兴
  • 添加到项目的根目录并运行应用程序,但仍然出现同样的错误prntscr.com/n5pjs6
  • @VINNUSAURUS 您是否将构建操作设置为 ProguardConfiguration?也禁用 MultiDex
  • 是的,如果我禁用 multidex,它会给出 outofmemoryindex 有点错误
【解决方案2】:

问题是我使用的是导致问题的预览版包,我将预览版包更改为稳定版本,即 Xamarin.GooglePlayServices.Vision 71.1502.0-preview1Xamarin.GooglePlayServices.Vision 60.1142.1,现在没有更多例外了。

【讨论】:

  • 请将其标记为答案,它将帮助其他有类似问题的人。
  • @LeonLu-MSFT 是的,两天内不能接受答案,这是规则:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2021-03-31
  • 2016-12-19
  • 2014-11-28
  • 2021-08-30
  • 2019-05-11
  • 2018-04-04
相关资源
最近更新 更多