LoginSignup
0
0

flutterアプリを開発している際にAndroidのクラッシュ解決で沼ったので備忘録として残します。

症状

Androidでビルドすると1瞬立ち上がり、アプリがクラッシュする(iOSは問題なし)

原因探索

まずは flutter run -v で実行するがここから進まない。

[ +1 ms] Waiting for VM Service port to be available...

次にAndroid Studioからエミュレータを再作成して実行。

結果、変わらず。

次にChatGPTに聞いてみる。

Logcatの取得:これにより、デバイスのすべてのログがlog.txtファイルに保存されます。特にエラーメッセージや例外が発生している箇所を探します。

log.sh
adb logcat -d > log.txt

やってみて実際に得られたLogがこれです。

log.text
06-20 10:24:54.852  7017  7017 E AndroidRuntime: ******************************************************************************
06-20 10:24:54.852  7017  7017 E AndroidRuntime: * Missing application ID. AdMob publishers should follow the instructions    *
06-20 10:24:54.852  7017  7017 E AndroidRuntime: * here:                                                                      *
06-20 10:24:54.852  7017  7017 E AndroidRuntime: * https://googlemobileadssdk.page.link/admob-android-update-manifest         *
06-20 10:24:54.852  7017  7017 E AndroidRuntime: * to add a valid App ID inside the AndroidManifest.                          *
06-20 10:24:54.852  7017  7017 E AndroidRuntime: * Google Ad Manager publishers should follow instructions here:              *
06-20 10:24:54.852  7017  7017 E AndroidRuntime: * https://googlemobileadssdk.page.link/ad-manager-android-update-manifest.   *
06-20 10:24:54.852  7017  7017 E AndroidRuntime: ******************************************************************************
06-20 10:24:54.852  7017  7017 E AndroidRuntime: 
06-20 10:24:54.852  7017  7017 E AndroidRuntime: 
06-20 10:24:54.852  7017  7017 E AndroidRuntime: 	at com.google.android.gms.ads.internal.client.zzek.attachInfo(com.google.android.gms:play-services-ads-lite@@23.1.0:26)
06-20 10:24:54.852  7017  7017 E AndroidRuntime: 	at com.google.android.gms.ads.MobileAdsInitProvider.attachInfo(com.google.android.gms:play-services-ads-lite@@23.1.0:1)
06-20 10:24:54.852  7017  7017 E AndroidRuntime: 	at android.app.ActivityThread.installProvider(ActivityThread.java:7459)

どうやらapplication IDが抜けているのが原因でクラッシュしているよう。(公式にも抜けているとクラッシュすると記載あり)でもAndroidManifest.xmlmeta-dataの記述はしてあるしxmlvalidationで確認しても構文にも問題なさそうだ。

ここから沼りました。紆余曲折ありAdmobの導入に立ち返って公式ドキュメントを確認してすると

AndroidMainfest.xml
<manifest>
    <application>
        <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
    <application>
<manifest>

自分が書いていたものが以下です。なんか階層ちがくない?・・・

AndroidMainfest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:label="XXXXXXXX"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <meta-data
              android:name="com.google.android.gms.ads.APPLICATION_ID"
              android:value="ca-app-pub-XXXXXXXXX~XXXXXX"
            />

            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

ってことで公式のように<application>の次に記述位置を変更。

ビルドに成功しました。クラッシュも起きません。やっと解決できた(ここまで2日)

まとめ

公式ドキュメントはよく読みましょう。そしてLog確認まじ大事。

今回デバイスのログを確認できることがわかって勉強になりました。はじめから正しくAdmob導入してたらこのLog確認には出会わなかったと思います。

エラー解決がエンジニアの成長になると感じた1件でしたw

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0