Flutterのバージョンを上げるとエラーが出る対処法 'deprecated Android v1' 'app:compileDebugKotlin'

以前まで動いていたプロジェクトが動かなくなりました。原因は共通で使用しているFLutterのバージョンを上げたことです。プロジェクトのバージョンも上げようとすると結構色々いじらなければなりませんでした。対処法をまとめました。

エラー例 1
Build failed due to use of deprecated Android v1 embedding.
エラー例 2
compileSdkVersion 31
エラー例 3
Execution failed for task ':app:compileDebugKotlin'.

# Android v2 へバージョンアップ
★★マークのところが変更点です。

```xml:android/app/src/main/Androidmanifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.appname">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:name="${applicationName}" ★★
        android:label="appname"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="*****"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <meta-data
                android:name="io.flutter.embedding.android.NormalTheme"
                android:resource="@style/NormalTheme" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data ★★
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>                  
```
# Sdk をバージョンアップ

```xml:android/app/build.gradle
compileSdkVersion 31 
```
compileSdkVersion を変更します（2カ所に注意）

# Kotlin をバージョンアップ
```xml:android/build.gradle
buildscript {
    ext.kotlin_version = '1.4.32' ★★
    repositories {
        google()
        jcenter()
    }
}
```
ext.kotlin_version を変更します。

:warning: ビルドで次のようなエラーが出る時
e: 〜略〜/android/app/src/main/kotlin/com/example/new_video/MainActivity.kt: (5, 7): Redeclaration: MainActivity
エラーにあるパスに今は使っていないものが残ってたので消したら治りました。

# gradle をバージョンアップ

```xml:android/build.gradle
buildscript {
    ext.kotlin_version = '1.4.32'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
*****
```

```xml:android/gradle/wrapper/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip ★★
```

```xml:android/app/src/main/Androidmanifest.xml
*****
    <application
        android:name="${applicationName}" 
        android:label="appname"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="*****"
            android:hardwareAccelerated="true"
            android:exported="true" ★★
            android:windowSoftInputMode="adjustResize">
*****              
```
2カ所を 7.0.2 にします（他のバージョンでもOK）
今回の7.0から2カ所バージョンを同じにしたそうです。
昔は gradleが 3.5.0 wrapperが 5.6.2-all.zip とバージョンが違っていました。 
3つ目の android:exported="true" はエラーが出たら追加してください。

# まとめ
今回は環境まわりについて記事にしました。こういうのは経験と繰り返しですね。本当に1つのバージョンが変わるだけで周りが引っ張られます。
Flutter は Google が面倒を見てくれると信じてやっていこうと思います。やはり Android、iOS、Web ができるのが魅力ですよね。