Android
AndroidStudio

Android Studio 2.3から3.0へのマイグレーションポイント

More than 1 year has passed since last update.

@eaglesakura です。

Google I/OでAndroid Studio 3.0が発表されましたね。

Preview1の段階ですが、メジャーアップデートということでいろんな機能が追加されたようです。

2.3系列から3.0へのマイグレーションガイドは(youtubeのセッション動画等で)公開されていますが、毎度のことでそれだけではなんともできないことが多いので私の個人的なアプリプロジェクトでガイド以外にマイグレーションした箇所を書いていきます。


DexCountプラグインを削除する

DexCountプラグイン(com.getkeepsafe.dexcount:dexcount-gradle-plugin) slack通知プラグイン(com.github.operando:gradle-slack-plugin)は内部で参照しているGuavaのバージョンが他のプラグインと競合するため、正常に動作しなくなりました。

※Slack通知プラグインは正常に動作していました。確認不足で申し訳ないです。

不便ですが致命傷ではないので削除しています。


dependencies{}ブロックを丹精込めてcompileからimplementationに書き換える

外部ライブラリやライブラリプロジェクトの依存解決には、従来では compile を使っていました。AS3.0ではビルド時、 compile を使っていると implementation に書き換えるように警告が出ます。

警告に従って書き換えると、ビルドが通らなくなるので注意してください。

今のところ、 implementation を使うと次のような動作となるようです。


  1. ライブラリプロジェクトがAndroidプロジェクトである場合、想定通りに動作する

  2. ライブラリプロジェクトがJavaプロジェクトである場合、それが依存しているライブラリが参照先に引き継がれない

  3. ライブラリプロジェクトがAndroid/Javaを問わず、出力される *.pom へ反映されない

ざっくりいうと、Androidライブラリプロジェクト以外は compile のままにしておかないと大幅な構成変更を余儀なくされます。

1参照1参照、それがAndroidプロジェクトであるか、Javaプロジェクトであるかを丁寧に判断しましょう。


Retrolambdaを削除してライブラリをリビルドする

Android Studio 3.0から、Java8記法がサポートされました。正確には、Java8記法で書いた部分は古いJavaバージョンでも動くようにAndroidビルドプラグインが変換してくれます。

そのためRetrolambdaと同時に使用することはできません。

それだけだったら良いのですが、ライブラリプロジェクト(参照しているjarやaar)内部でRetrolambdaを使用している場合、メソッドが正常に呼び出せません。

そのため、ライブラリプロジェクトからもRetrolambdaを削除してリビルドしなければなりません。それがサードパーティである場合、速く対応するように祈るか自力ビルドするか諦めましょう。

https://twitter.com/eaglesakura/status/865596378726019073


RobolectricのRawリソース読み込みがnullを返す問題の対処

Gradleのバージョンアップの影響か、rawリソースが読み込めない問題が再発しています。

これはissueに従ってカスタムTestRunnerを作ることで対処できました。

https://twitter.com/eaglesakura/status/866516255007678464


dataBinding=trueが原因でNPE

プロジェクトが dataBinding = true を設定していて、DataBindingを使ったLayoutがまだ1ファイルもない場合、ビルドはNullPointerExceptionで必ず失敗します。

プロジェクト初期では、面倒でもダミーでDataBindingを使ったレイアウトファイルを突っ込んでおいたほうが良いでしょう。


-Pcom.android.build.threadPoolSize=1

このオプションは無効なので、スクリプトに残っているとビルドエラーになります


Windows + 4K液晶で異様に小さく表示される

Intellijの不具合です。

studio64.exeを右クリックして プロパティ > 互換性 > 高いDPIスケール動作を上書き である程度改善します


Android Studio上での引数表示がなんか見づらい

AS上でメソッドの引数名が表示されるようになっていますが、黒背景のテーマだと異様に見づらいです。

Editor > Colors & Fonts > Language Defaults > Inline parameter hint で色設定を変更しましょう。


頑張って早めに移行する価値があるのか

ビルドがかなり速くなりました。

Instant Appsでの実行時レイアウト反映は(自分のプロジェクト構成では)行なえませんでした。インストールは早いです。小さいプロジェクトで試してるからかもしれません。

現場からは以上です。