Android
gradle
AndroidStudio

Android Studioを2.3から3.0へ移行する

はじめに

Android Studio 3.0 がリリースされました。
ということで、Android Studioを2.3から3.0に移行しました。

手順

1. Android Studioのアップデート

Android Studio -> Check for Updates...からアップデート

2. Gradleのアップデート

Gradleを最新の 4.1 にアップデート

gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

3. Android Plugin for Gradleのアップデート

Googleから提供されたmavenリポジトリを使うようにもする

build.gradle
buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}
allprojects {
    repositories {
        google()
    }
}

4. SDK Build Toolsのアップデートのアップデート

app/build.gradle
android {
    buildToolsVersion '26.0.2'
}

5. Flavor Dimensionsの設定

Android Studio 3.0 から、すべての Flavor に対して、Flavor Dimensions の設定が必須

app/build.gradle
android {
    flavorDimensions "source"
    productFlavors {
        free {
            dimension "source"
        }
    }
}

Flavor Dimensionsを設定していなかったら、以下のようなエラーになる

Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

6. Dependencyの設定

Android Studio 3.0 から、compileは非推奨で、その代わりにimplementationapiを使うことが推奨されている
implementationapiの違いはここに詳しく書いているhttps://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html?utm_source=android-studio#new_configurations

また、providedcompileOnlyに、apkruntimeOnlyを使うことも推奨されている

app/build.gradle
// before
dependencies {
    compile 'com.xxx.yyy:zzz:1.0.0'
    freeCompile 'com.xxx.zzz:yyy:1.0.0'
}
app/build.gradle
// after
dependencies {
    implementation 'com.xxx.yyy:zzz:1.0.0'
    freeImplementation 'com.xxx.zzz:yyy:1.0.0'
}

7. その他行ったこと

Retrolambda

ビルドしたときに以下のような警告

Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle:
apply plugin: 'me.tatarka.retrolambda'
To learn more, go to https://d.android.com/r/tools/java-8-support-message.html

Android Studio 3.0から、Java8記法がサポートされて、Retrolambdaが不要になったので、RetrolambdaをDependencyから削除

Error:Error converting bytecode to dex

ビルドしたときに以下のようなエラー

Information:Gradle tasks [:app:assembleDebug]
Error:Error converting bytecode to dex:

プロジェクトをクリーンしたら直りました

FATAL EXCEPTION: android.view.InflateException: Binary XML file line #0:

特定の画面に遷移したときにアプリが落ちて、以下のようなエラー

FATAL EXCEPTION: android.view.InflateException: Binary XML file line #0:

Android Studio 3.0 から、Android Asset Packaging Tool 2.0 (AAPT2) を使ったリソース処理がデフォルト動作となったらしい
これを無効にしたいので、以下の追記をした

gradle.properties
android.enableAapt2=false

APKの出力先が変わった

Flavor Dimensionsの設定をしたことで、APKの出力先が変わり、CI環境でエラーとなった
APKの出力先が
/app/build/outputs/apk/[flavor]/[buildType]/app-[flavor]-[buildType].apkに変わっていました

参考