flutter-ml / google_ml_kit_flutter

A flutter plugin that implements Google's standalone ML Kit
MIT License
912 stars 709 forks source link

Unable to build TextRecognition in release mode on Android when targeting API 34 without adding all langages #528

Open Tom3652 opened 9 months ago

Tom3652 commented 9 months ago

PLEASE FILL THIS before submitting your issue. We have noticed that many people do NOT know how to report an issue, please follow this guide to report your issue, otherwise we wont be able to help you.

NOTE: Did you try our example app? If not, then stop try our example app and try to reproduce with it? If your app is failing and not the example app then it might be something related to your app. If the example app also fails then it is more likely for us to help you.

Title: In a few words summarize your issue. This is a short title.

Describe the bug

As the title said :

ERROR: Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in /Users/foxtom/StudioProjects/myapp/build/app/outputs/mapping/release/missing_rules.txt.
ERROR: R8: Missing class com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions$Builder (referenced from: com.google.mlkit.vision.text.TextRecognizer com.google_mlkit_text_recognition.TextRecognizer.initialize(io.flutter.plugin.common.MethodCall))
Missing class com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions (referenced from: com.google.mlkit.vision.text.TextRecognizer com.google_mlkit_text_recognition.TextRecognizer.initialize(io.flutter.plugin.common.MethodCall))
Missing class com.google.mlkit.vision.text.devanagari.DevanagariTextRecognizerOptions$Builder (referenced from: com.google.mlkit.vision.text.TextRecognizer com.google_mlkit_text_recognition.TextRecognizer.initialize(io.flutter.plugin.common.MethodCall))
Missing class com.google.mlkit.vision.text.devanagari.DevanagariTextRecognizerOptions (referenced from: com.google.mlkit.vision.text.TextRecognizer com.google_mlkit_text_recognition.TextRecognizer.initialize(io.flutter.plugin.common.MethodCall))
Missing class com.google.mlkit.vision.text.japanese.JapaneseTextRecognizerOptions$Builder (referenced from: com.google.mlkit.vision.text.TextRecognizer com.google_mlkit_text_recognition.TextRecognizer.initialize(io.flutter.plugin.common.MethodCall))
Missing class com.google.mlkit.vision.text.japanese.JapaneseTextRecognizerOptions (referenced from: com.google.mlkit.vision.text.TextRecognizer com.google_mlkit_text_recognition.TextRecognizer.initialize(io.flutter.plugin.common.MethodCall))
Missing class com.google.mlkit.vision.text.korean.KoreanTextRecognizerOptions$Builder (referenced from: com.google.mlkit.vision.text.TextRecognizer com.google_mlkit_text_recognition.TextRecognizer.initialize(io.flutter.plugin.common.MethodCall))
Missing class com.google.mlkit.vision.text.korean.KoreanTextRecognizerOptions (referenced from: com.google.mlkit.vision.text.TextRecognizer com.google_mlkit_text_recognition.TextRecognizer.initialize(io.flutter.plugin.common.MethodCall))

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:minifyReleaseWithR8'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable
   > Compilation failed to complete

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 30s

To Reproduce

Use targetSdkVersion 34 in your app/build.gradle file and run flutter build apk

NOTE: Did you try our example app? If not, then stop try our example app and try to reproduce with it? If your app is failing and not the example app then it might be something related to your app. If the example app also fails then it is more likely for us to help you.

Expected behavior

The app should build without requiring to add :

implementation 'com.google.mlkit:text-recognition-chinese:16.0.0'
    implementation 'com.google.mlkit:text-recognition-devanagari:16.0.0'
    implementation 'com.google.mlkit:text-recognition-japanese:16.0.0'
    implementation 'com.google.mlkit:text-recognition-korean:16.0.0'

Note : adding the above lines allow me to build with API 34, but also add an extra 30MB size to the app that i don't need.

Platform (please complete the following information):

IAmJulianAcosta commented 8 months ago

I'm getting this one too. Using latest version 0.11.1

IAmJulianAcosta commented 8 months ago

@Tom3652 Adding the following to /android/app/proguard-rules.pro fixed the error for me:

-dontwarn com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions$Builder
-dontwarn com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions
-dontwarn com.google.mlkit.vision.text.devanagari.DevanagariTextRecognizerOptions$Builder
-dontwarn com.google.mlkit.vision.text.devanagari.DevanagariTextRecognizerOptions
-dontwarn com.google.mlkit.vision.text.japanese.JapaneseTextRecognizerOptions$Builder
-dontwarn com.google.mlkit.vision.text.japanese.JapaneseTextRecognizerOptions
-dontwarn com.google.mlkit.vision.text.korean.KoreanTextRecognizerOptions$Builder
-dontwarn com.google.mlkit.vision.text.korean.KoreanTextRecognizerOptions
bensonarafat commented 8 months ago

finding a solution to this. 💡

Tom3652 commented 8 months ago

@IAmJulianAcosta thanks this is working !

gerken-tss commented 5 months ago

@IAmJulianAcosta While I appreciate your fix, I was wondering what this does? Why are there suddenly missing files and why do we need to manually add those lines to this file? Is this safe? Can we revert this in the future? What is this all about?

IAmJulianAcosta commented 4 months ago

@gerken-tss I don't remember where did I get it, IIRC, what it does is telling the compiler? that it's fine if it doesn't find the files so the build doesn't break