LoginSignup
13
12

More than 5 years have passed since last update.

Android Mのビルド設定で注意すること

Posted at

Googleの予定では今月中にAndroid Mがリリースされますね。
そこでさっそく試してみたのですが、ビルドの設定ではまったので問題と対策を書いておきます。

問題

Android M対応にあたってbuild.gradleを以下のように設定すると思います。

build.gradle
android {
    compileSdkVersion "android-MNC"
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 22
    }

    ...
}

しかし、この設定でビルドをして、Android Mより前のOS端末にインストールすると、
次のエラーが出てインストールができません。minSdkVersionに14を指定しているのでAndroid 4.0.3以上の端末にインストールできるはずなのですが...

Failure [INSTALL_FAILED_OLDER_SDK]

そこで、APKの中にあるAndoridManifest.xmlを見ると、minSdkVersionとtargetSdkVersionがMNC(Android Mのコードネーム)に置き替えられてしまっていました。

AndroidManifest.xml
<uses-sdk
    android:minSdkVersion="MNC"
    android:targetSdkVersion="MNC">

これではAndroid MNCより前のOS端末にはインストールできません。
調べるとAndroidのissueに上がっていました。

解決策

解決策としては、先ほどのissueにも書いてあるのですが、コンパイル後のAndroidManifest.xmlの中身を書き替えることで対応します。

次の例ではminSdkVersionとtargetSdkVersionをそれぞれ置き替えています。

build.gradle
android {

    ...

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.processManifest.doLast {
                def manifestOutFile = output.processManifest.manifestOutputFile
                def newFileContents = manifestOutFile.getText('UTF-8').replace("minSdkVersion=\"MNC\"", "minSdkVersion=\"14\"").replace("targetSdkVersion=\"MNC\"", "targetSdkVersion=\"22\"")
                manifestOutFile.write(newFileContents, 'UTF-8')
            }
        }
    }
}

こうすることでAndroid Mに対応しながら、それより前のOS端末にもインストールすることができます。これはあくまでこの問題が解決するまでの一時的な対応のため修正されることを期待しています!

まだまだAndroid Mについての実際にやってみた情報は少ないので他にも注意が必要そうです。

13
12
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
13
12