FlutterでAndroidのbuildをしたらエラーが出た!
Firebaseの接続する設定が変わっている?
内容を修正しました😅
- タイトルの変更
- 英語の小文字と大文字の違いでエラーが出ることを書いてなかった!!!
- わかりずらいなと思い修正しました。読者の皆様ご迷惑をおかけいたしました🙇♂️
最近Firebase CLIなるものが流行っていて、google-service.jsonをあまり使っていなかったのですが、2022年の6月4日土曜日に使うと久しぶりに、buildエラーにハマった😱
こちらのサイトのサンプルコードを使って学習を進めていたときに起きました!
解決法
こちらのコードを変更する必要があります!
applicationId "com.example.messagesApp"// "この中のcom.example.アプリ名"
Firebaseからダウンロードしたファイルに書かれていたこちらのコードと異なるとエラーが発生する!
なぜかというと、build.gradleほapplicationIDは、小文字で書かれていて、google-service.jsonの方は、大文字で書かれているからです😱
applicationId "com.example.crud_sample"
こちらをapp/build.gradleで使用する。
"package_name": "com.example.messagesApp" // "この中のcom.example.アプリ名"
google-services.json
{
"project_info": {
"project_number": "870802808383",
"project_id": "flutter-demo007-f14d2",
"storage_bucket": "flutter-demo007-f14d2.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:870802808383:android:9d0646122b24c36e58628a",
"android_client_info": {
"package_name": "com.example.messagesApp" // こちらをapp/build.gradleのapplicationIdにコピーアンドペーストする
}
},
app/build.gradle
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.google.gms.google-services'// 追加
android {
compileSdkVersion flutter.compileSdkVersion
ndkVersion flutter.ndkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.messagesApp" // google-services.jsonの"package_name": "com.example.messagesApp"と同じにする
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion 21 // 21に設定
targetSdkVersion 31 // 31に設定
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true // Android公式より追加
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation platform('com.google.firebase:firebase-bom:30.1.0')// 追加
implementation "androidx.multidex:multidex:2.0.1" // Android公式より追加
}
設定後にAndroidでbuildできていたので、大丈夫だと思われます。エラーにハマって焦りました😅
追加情報
業務をやっていて、最近FlutterSDK本体の方の設定をすれば、作成したプロジェクトの「minSdkVersion」と「targetSdkVersion」を自分で入力しなくても良いことに気づきました!
app/src/build.gradle
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion flutter.compileSdkVersion
ndkVersion flutter.ndkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.page_provider"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion flutter.minSdkVersion // Flutter3では数値が書かれていない!
targetSdkVersion flutter.targetSdkVersion // Flutter3では数値が書かれていない!
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
実は、数値の設定はしなくても良かったのを今日知った😇
Flutter本体を設定する⚙️
Developフォルダの中に配置されたダウンロードされたFlutterSDKのパス
/Users/hashimotojunichi/Development/flutter/packages/flutter_tools/gradle
flutter.gradleというファイルを開く!
ファイルはVScodeを起動してドラッグ&ドロップすると簡単に開けます🧑🏼🎓
ファイルの中身
16と書いてあるところを21に変更するだけです。簡単でした。これだけです😅
調べても全然情報が出てこないから驚きましたね!!!
Googleさんもあまり親切ではないな😅😅😅
新手に出てきた問題!
x-codeのキャッシュを消す作業をして余計なもの削除して、x-codeぶっ壊して、Flutterでbuildできなくなったので、古いx-codeを削除して、AppStoreから、新しいバージョンをインストール。
x-codeぶっ壊れたときは、SwiftUIとStoryboard選ぶ場所がなくなってたような?
選択画面を間違えただけかも?
こちらの記事が参考になった?
flutter channel stable
flutter upgrade --force
flutter pub cache repair
flutter channel stableしたら、赤いエラーでたが、治ったみたい?
新しいFlutterをダウンロードして、Developフォルダに配置すればよい?
コマンドでアップデートするより、こっちの方がいいかも?
Flutterを3.0.1から3.0.2へコマンドでアップデートしたのですが、minSdkVersion flutter.minSdkVersion(最小バージョン)が16に戻ってしまうようです😇
ですので、新しいのを入れたら毎回リセットされるよな...
出ないと整合性の不具合というものが出てくる!
20230913 WED
また、本体の設定を変えようとしたらファイルの場所が移動してました!
最新版はこちらにminSDKの数字が書かれています!
パスしか書かれてない?
ここにある!
Discussion