ローリングコンバットピッチなう!

AIとか仮想化とかペーパークラフトとか

Update your Android targetSdkVersion

[technology][android]GoogleからtargetSdkVersionを上げろというメールが来た件

今朝gmailを開くと「[Action Required] Update your Android targetSdkVersion by November 1」というメールがgoogle play様から来ておりました。

google playってちょいちょい規約変更等に伴って登録したアプリを更新する作業が発生するんですよね。
今回のメールの内容は要約すると、
「あなたがgoogle playに登録したAPKのtargetSdkVersionをandroid 9(API Level 28)以上に上げて再ビルドの上、google playに登録してね。
11/1までに完了しないと、以後、該当アプリの更新が出来なくなるよ」(該当アプリだけ?なのかがちょいビミョーですが)

google playにandroid4とか5時代に作ったアプリを4本ほど登録していて、もはや最近の新しいandroidではマトモに動かないし、作った本人もアップデートする気も無いのでほっとこうかとも思ったんですが、こーいう機会でもないとandroid studioとかの開発環境の更新もしないので、とりあえずSDKバージョンを上げてみる事に。

まずは
1.Android Studio起動
2.Android Studio更新
3.SDKSDK toolをSDK Managerから更新
くらいまでをやります。

1年くらい放置されていた環境ですが、これはとりあえず問題無し。

次にまずは1本、Projectを開きます。
いくつかやることがあるのですが、大きくはBuild Cradleの更新とAndroidManifest.xmlを更新しないと正常にビルドが通りませんでした。

4.build.gradle更新

まずはandroid StudioのFile→Project Structureメニュー→Modulesから下記をアップデートしていきます。
[Propertiesタブ]
1)Compile SDK version→29(Android Q対応に)
2)Build Tools version→28.0.3(現時点の最新...らしい)
[Default Configタブ]
3)Target SDK version→29

次にbuild.gradleを直に触っていきます。

4)dependenciesに'compile xxx'と書いてある場合は'implementation xxx'に書き換える
compileはdepreciatedだそうです。

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.android.support:support-v4:21.0.3'
    implementation 'com.google.android.gms:play-services:+'
}

5)defaultConfigにmultidex対応を追加

Cannot fit requested classes in a single dex file. Try supplying a main-dex list.
# methods: 68029 > 65536

みたいなエラーが出てBuildに失敗しました。これはアプリによる見たいですが、minSdkVersionが古かったりすると結構起きるみたいです。
下記の様にmultiDexEnabled trueをdefaultConfigに追加します。

    defaultConfig {
        applicationId "ほにゃらら"
        minSdkVersion 14
        targetSdkVersion 29
        multiDexEnabled true
    }

またdependenciesに implementation 'com.android.support:multidex:1.0.3'を追加します。

6)lintOptionsを追加
どうもdepreciated なAPIを使っていると署名付APKを作成時に失敗するので、lintでエラーが出ても無視してビルドを継続する様にします。

    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }

次にandroidManifest.xmlを触ります。
7)multidex対応
androidManifest.xmlにもmultidex対応が必要です。applicationタグ内に下記を追加します。

    <application
        android:name="android.support.multidex.MultiDexApplication"
        .....
    >

8)を削除
どうもandroidManifestにminSdkVersionやtargetSdkVersionを書いておくと、ビルド時にandroidManifestに書くな、build.gradleにだけ書けと怒られる様になったので、さくっと削除します。

とりあえずこれだけで署名付APKの生成まで通る様になりました。古いandroid 4.2実機にAPK突っ込んでアプリが起動するあたりまでは確認しました。
あと、アプリ3つ同じ作業をやって、google play developer consoleに新しいAPKを登録しなければなりません。これがまた結構めんどくさい作業なのですが。

一応admobで広告付けて今でもビミョーに(月数百円レベル)収益上がるので、とりあえず今回は対処しておきます。


なおMultidex対応は下記の記事を参考にしました。
[Android]Android 64k問題を回避するための設定方法
https://minpro.net/android-64k-problems