【WIP】Flutter speech_to_text 5.4.2 を Android シミュレータで動かしたい

大苦戦。

概要

Flutter プラグイン speech_to_text を Andoroid で使いたい。

初学者なのでアホなことしてエラーに遭遇したが、戒めとして残す。

環境

flutter doctor で調べられる範囲は以下。

  • Flutter 2.8.1
  • Android SDK 30.0.3
  • Android Stuido 4.2
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.8.1, on macOS 11.4 20F71 darwin-x64, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.2)
[✓] VS Code (version 1.63.2)
[✓] Connected device (3 available)

flutter create で作成される build.gradle に記載されている諸々のバージョン。

  • Gradle 4.1.0
  • JVM 1.8
  • Kotlin 1.3.50
  • build tools 4.1.0

speech_to_text 5.4.2 に必要なバージョン。ただし、サンプルプログラムとは異なった。

  • minSdkVersion 21
  • targetSdkVersion 28
  • compileSdkVersion 28 (targetSdkVersionと合わせると吉らしい)

サンプルプログラム

  • minSdkVersion 21
  • targetSdkVersion 30
  • compileSdkVersion 31 (targetSdkVersionと合わせると吉らしい)

Android はバージョニングが大変らしく、本家サイトに組み合わせが載っている。

遭遇したエラー

uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared in library

minSdkVersion を指定しなかった場合に起きたエラー。バージョンが低いとのこと。

以下を追加し、意図的にバージョンを指定。

android {
  defaultConfig {
    minSdkVersion 21
  }
}

エラーが変わる。

A problem occurred evaluating root project ‘android’. Could not find method defaultConfig() for arguments [] on root project ‘android’ of type org.gradle.api.Project.

修正する build.gradle を間違えていたために起きたエラー1。

以下全文。

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/xxxx/private/flutter/TEST/Speach/test6/android/build.gradle' line: 1

* What went wrong:
A problem occurred evaluating root project 'android'.
> Could not find method android() for arguments [[email protected]] on root project 'android' of type org.gradle.api.Project.

プラグインの宣言をする必要があったよう。Flutterさん、デフォルトで付けておいてくれてもいいのよ。

apply plugin: 'com.android.application'

エラーが変わる。

compileSdkVersion is not specified. Please add it to build.gradle

修正する build.gradle を間違えていたために起きたエラー2。

エラー発生

2: Task failed with an exception.
-----------
* What went wrong:
A problem occurred configuring root project 'android'.
> compileSdkVersion is not specified. Please add it to build.gradle

* 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.

compileSdkVersion が必要とのこと。以下を追加

android {
  defaultConfig {
    minSdkVersion 21
    compileSdkVersion 28
  }
}

Cannot add task ‘clean’ as a task with that name already exists.

修正する build.gradle を間違えていたために起きたエラー3。

clean というタスクが既に存在するとのこと。

とりあえずコメントアウトしておく

//task clean(type: Delete) {
//    delete rootProject.buildDir
//}

違うエラーが出た。

Execution failed for task ‘:generateDebugBuildConfig’.

修正する build.gradle を間違えていたために起きたエラー4。

タスク ‘generateDebugBuildConfig’ に失敗したとのこと。

ここでようやく違う build.gradle を修正していたと判明。

エラー内容を見ると AndroidManifest.xml のパスが違っているとのこと。 app がない。パスが違う。。

AILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':generateDebugBuildConfig'.
> Failed to calculate the value of task ':generateDebugBuildConfig' property 'buildConfigPackageName'.
   > Failed to query the value of property 'packageName'.
      > Manifest file does not exist: /Users/xxxx/private/flutter/TEST/Speach/test6/android/src/main/AndroidManifest.xml

記載すべき build.gradle を間違えていた。app 配下の方を修正する必要あり。

✗ : project/android/build.gradle

● : project/android/app/build.gradle

該当の方を修正。

vi project/android/app/build.gradle

とりあえずベタ書き。

//minSdkVersion flutter.minSdkVersion
minSdkVersion 21

違うエラーが発生。

AndroidManifest.xml:55: AAPT: error: unexpected element <queries> found in <manifest><application>.

AndroidManifest の <manifest><application> 内で <queries> が見つかったとのこと

本家サイトでは compileSdkVersion と targetSdkVersion は 28 を指定していたが、29 にする。

android {
    compileSdkVersion 29
    ~ 省略 ~
    defaultConfig {
        targetSdkVersion 29

speech_to_text/SpeechToTextPlugin.kt: Unresolved reference

下記エラー。Unresolved reference は、コンパイラーが名前解決できなかったため。

e: /Users/xxxx/work/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/speech_to_text-5.4.2/android/src/main/kotlin/com/csdcorp/speech_to_text/SpeechToTextPlugin.kt: (458, 87): Unresolved reference: BLUETOOTH_CONNECT
e: /Users/xxxx/work/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/speech_to_text-5.4.2/android/src/main/kotlin/com/csdcorp/speech_to_text/SpeechToTextPlugin.kt: (651, 30): Unresolved reference: ERROR_LANGUAGE_NOT_SUPPORTED
e: /Users/xxxx/work/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/speech_to_text-5.4.2/android/src/main/kotlin/com/csdcorp/speech_to_text/SpeechToTextPlugin.kt: (652, 30): Unresolved reference: ERROR_LANGUAGE_UNAVAILABLE
e: /Users/xxxx/work/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/speech_to_text-5.4.2/android/src/main/kotlin/com/csdcorp/speech_to_text/SpeechToTextPlugin.kt: (653, 30): Unresolved reference: ERROR_SERVER_DISCONNECTED
e: /Users/xxxx/work/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/speech_to_text-5.4.2/android/src/main/kotlin/com/csdcorp/speech_to_text/SpeechToTextPlugin.kt: (654, 30): Unresolved reference: ERROR_TOO_MANY_REQUESTS
2

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':speech_to_text:compileDebugKotlin'.
> Compilation error. See log for more details

Android を利用する場合の permission 許可を AndroidManifest.xml に追記。

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>

また AndroidSDK のバージョンを 30 以降で使う場合、以下も記載。

<queries>
    <intent>
        <action android:name="android.speech.RecognitionService" />
    </intent>
</queries>

指定されたの 28 だったからやらなくていいだろうと思ってたけど動かなったので、サンプルに合わせる。

compileSdkVersion 31
targetSdkVersion 30

これでようやく起動できた。起動したが音声認識してくれない。。

参考

How to change Android minSdkVersion in flutter project

Android Studio の Gradle の備忘録

[Flutter/Android]【重要】2020/11/2までにAndroidアプリの「targetSdkVersion」を「29」に上げる必要あり!

compileSdk・minSdk・targetSdkの違い(Android)

僕たちはいつまでこんな楽しいAndroid Studio設定をし続けるのか? Android Studio 3.x時代の設定不足解消メモ

コメント

タイトルとURLをコピーしました