AndroidXに移行するために

Da5a59469ce3ebb55619ce34f85f8c4f?s=47 syarihu
July 26, 2018

 AndroidXに移行するために

potatotips #53で発表した資料です。

Da5a59469ce3ebb55619ce34f85f8c4f?s=128

syarihu

July 26, 2018
Tweet

Transcript

  1. AndroidXに移行するために 2018/07/26 (Thu) potatotips #53 @syarihu

  2. Taichi Sato (@syarihu) • Money Forward, Inc. ◦ Android Engineer

    • TechBooster
  3. Support Library

  4. Support Library • Android Framework の API に下位互換性 を保つために 7

    年以上前から開発されて いる • さまざまな機能が含まれている ◦ 端末固有の UX ◦ デバッグ ◦ テスト ◦ その他ユーティリティ
  5. Support Library • 現在ほとんどの Android アプリで Support Library が導入されている •

    長年のアップデートによるライブラリの成 長が開発者に混乱をもたらしている ◦ サポートされているのは v14 以降だけ ど、パッケージ名は v7 など
  6. AndroidX

  7. AndroidXとは • Android の新しい拡張機能ライブラリ • Support Library は v28 で終了し、今後は

    AndroidX に移行する必要がある • AndroidX のバージョンは v1.0.0 から 新たに始まる ◦ 2018 年 7 月現在の最新は beta01 • パッケージ名も androidx になる
  8. android.*とandroidx.* • android.* ◦ プラットフォームにバンドルされている API • androidx.* ◦ すべての

    Android バージョンで可能な 限り一貫して動作する機能を提供する
  9. AndroidXへの移行

  10. AndroidXへの移行 • AndroidX への移行には移行ツールが 用意されている • 試しに Money Forward の

    Android アプリ を AndroidX に移行してみる
  11. build.gradle buildscript { dependencies { classpath "com.android.tools.build:gradle:3.3.0-alpha03"

  12. app/build.gradle android { compileSdkVersion 28 buildToolsVersion "28.0.0"

  13. いざビルド!

  14. None
  15. None
  16. None
  17. shortcuts.xml • App Shortcuts のための設定ファイル • Build Variants によってパッケージ名を分けてお り、

    shortcuts.xml 内に記述するパッケージ名をビ ルド後のファイルを replace することで動的に切り替 えられるようにしていた
  18. aapt2 • Android Asset Packaging Tool 2.0 • リソース処理の改善 •

    Android Gradle Plugin 3.0.0 からデフォルトで有効 ◦ android.enableAapt2=false で無効にできた • Android Gradle Plugin のアップデートにより enableAapt2 のプロパティが削除された
  19. aapt2 • リソースの出力が生の xml ファイルではなく、圧縮 された flat ファイルが生成される • そのため、

    shortcuts.xml を動的に変更することが できなくなった • パッケージごとに手動で shortcuts.xml を 作らないとダメそう …
  20. とりあえず動的変更部分を 修正することで回避…

  21. Migrate to AndroidX

  22. Migrate to AndroidX • Android Studio 3.2 Canary 14 以降で利用できる

    Android X への移行ツール • 今回は Android Studio 3.3 Canary 3 を使用
  23. Refactor -> Migrate to AndroidX…

  24. None
  25. None
  26. いざビルド!

  27. * What went wrong: A problem occurred configuring project ':app'.

    > Could not resolve all files for configuration':app:xxxxxxxxxxCompileClasspath'. > Failed to transform file 'xxxxxxxxxx.aar' to match attributes {artifactType=processed-aar}using transform JetifyTransform > Failed to transform
  28. android.useAndroidX=true android.enableJetifier=true gradle.properties

  29. enableJetifier • AAR/JAR のマイグレーションツール • ライブラリ内部で使用されている Support Library などを AndroidX

    に置き換えてく れる • エラー出たライブラリ内部で利用されている Support Library がうまく置き換え出来なかったぽ い
  30. とりあえずエラー出たライブラリを 使わないようにして回避…

  31. もう一回ビルド!

  32. /app/build/generated/source/kapt/xxxxx/xxxxx/DeepLinkDelegate.java:8: エラー : シンボルを見つけられません import android.support.v4.app.TaskStackBuilder; ^ シンボル : クラス

    TaskStackBuilder 場所 : パッケージ android.support.v4.app
  33. DeepLinkDispatch • このライブラリが自動生成する java ファイルが Support Library のクラスを出力してしまっていたた めにエラーが発生していた

  34. https://github.com/airbnb/DeepLinkDispatch/issues/222

  35. https://github.com/airbnb/DeepLinkDispatch/pull/223

  36. PRは上がってたけどCI周りの問題が あるっぽく、6月から何も動いてなかった…

  37. \(^o^)/

  38. AndroidX移行差分 • 今回ビルドは通せませんでしたが、参考程度に …

  39. まとめ • Android X への移行には Android Studio の移行 ツールを使う •

    compileSdkVersion 28 以上必須なので、 27 以下のアプリはその対応も必要 ◦ 特に 25 -> 26 へ上げるのが大変なので早めに やっておいたほうがよい ◦ どちらにせよ今後のアップデートでは必須
  40. まとめ • 移行ツールを使っても、手直しはだいたい 必要になる

  41. まとめ • 特に OSS をたくさん利用している プロジェクトは注意! ◦ 今回紹介した以外にも問題はたくさん出てくる と予想できる ◦

    利用している OSS が AndroidX 対応していない 場合はコントリビュートの機運 … ?
  42. まとめ • 正式リリースはまだだが、 Beta が出ているためそろそろ準備をしておいたほ うがよさそう ◦ 少なくとも、とりあえず試しにやってみて、どれく らい工数がかかりそうかは見ておいたほうがよさ そう

  43. コントリビュートもできるらしい • AOSP AndroidX Contribution Guide ◦ https://android.googlesource.com/platform/framewo rks/support/+/androidx-master-dev/README.md https://twitter.com/yuichi_araki/status/1021607877801168896?s=21

  44. 参考資料 • Google Developers Japan: AndroidX の紹介 https://developers-jp.googleblog.com/2018/05/hello-world-androidx.h tml

  45. ありがとうございました