Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AndroidXに移行するために

syarihu
July 26, 2018

 AndroidXに移行するために

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

syarihu

July 26, 2018
Tweet

More Decks by syarihu

Other Decks in Technology

Transcript

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

    View full-size slide

  2. Taichi Sato (@syarihu)

    Money Forward, Inc.

    Android Engineer

    TechBooster

    View full-size slide

  3. Support Library

    View full-size slide

  4. Support Library

    Android Framework

    API
    に下位互換性
    を保つために
    7
    年以上前から開発されて
    いる
    ● さまざまな機能が含まれている
    ○ 端末固有の
    UX
    ○ デバッグ
    ○ テスト
    ○ その他ユーティリティ

    View full-size slide

  5. Support Library
    ● 現在ほとんどの
    Android
    アプリで
    Support Library
    が導入されている
    ● 長年のアップデートによるライブラリの成
    長が開発者に混乱をもたらしている
    ○ サポートされているのは
    v14
    以降だけ
    ど、パッケージ名は
    v7
    など

    View full-size slide

  6. AndroidXとは

    Android
    の新しい拡張機能ライブラリ

    Support Library

    v28
    で終了し、今後は
    AndroidX
    に移行する必要がある

    AndroidX
    のバージョンは
    v1.0.0
    から
    新たに始まる

    2018

    7
    月現在の最新は
    beta01
    ● パッケージ名も
    androidx
    になる

    View full-size slide

  7. android.*とandroidx.*

    android.*
    ○ プラットフォームにバンドルされている
    API

    androidx.*
    ○ すべての
    Android
    バージョンで可能な
    限り一貫して動作する機能を提供する

    View full-size slide

  8. AndroidXへの移行

    View full-size slide

  9. AndroidXへの移行

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

    Android
    アプリ

    AndroidX
    に移行してみる

    View full-size slide

  10. build.gradle
    buildscript {
    dependencies {
    classpath "com.android.tools.build:gradle:3.3.0-alpha03"

    View full-size slide

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

    View full-size slide

  12. いざビルド!

    View full-size slide

  13. shortcuts.xml

    App Shortcuts
    のための設定ファイル

    Build Variants
    によってパッケージ名を分けてお
    り、
    shortcuts.xml
    内に記述するパッケージ名をビ
    ルド後のファイルを
    replace
    することで動的に切り替
    えられるようにしていた

    View full-size slide

  14. aapt2

    Android Asset Packaging Tool 2.0
    ● リソース処理の改善

    Android Gradle Plugin 3.0.0
    からデフォルトで有効

    android.enableAapt2=false
    で無効にできた

    Android Gradle Plugin
    のアップデートにより
    enableAapt2
    のプロパティが削除された

    View full-size slide

  15. aapt2
    ● リソースの出力が生の
    xml
    ファイルではなく、圧縮
    された
    flat
    ファイルが生成される
    ● そのため、
    shortcuts.xml
    を動的に変更することが
    できなくなった
    ● パッケージごとに手動で
    shortcuts.xml

    作らないとダメそう

    View full-size slide

  16. とりあえず動的変更部分を
    修正することで回避…

    View full-size slide

  17. Migrate to AndroidX

    View full-size slide

  18. Migrate to AndroidX

    Android Studio 3.2 Canary 14
    以降で利用できる
    Android X
    への移行ツール
    ● 今回は
    Android Studio 3.3 Canary 3
    を使用

    View full-size slide

  19. Refactor -> Migrate to AndroidX…

    View full-size slide

  20. いざビルド!

    View full-size slide

  21. * 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

    View full-size slide

  22. android.useAndroidX=true
    android.enableJetifier=true
    gradle.properties

    View full-size slide

  23. enableJetifier

    AAR/JAR
    のマイグレーションツール
    ● ライブラリ内部で使用されている
    Support Library
    などを
    AndroidX
    に置き換えてく
    れる
    ● エラー出たライブラリ内部で利用されている
    Support Library
    がうまく置き換え出来なかったぽ

    View full-size slide

  24. とりあえずエラー出たライブラリを
    使わないようにして回避…

    View full-size slide

  25. もう一回ビルド!

    View full-size slide

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

    View full-size slide

  27. DeepLinkDispatch
    ● このライブラリが自動生成する
    java
    ファイルが
    Support Library
    のクラスを出力してしまっていたた
    めにエラーが発生していた

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  32. まとめ

    Android X
    への移行には
    Android Studio
    の移行
    ツールを使う

    compileSdkVersion 28
    以上必須なので、
    27
    以下のアプリはその対応も必要
    ○ 特に
    25 -> 26
    へ上げるのが大変なので早めに
    やっておいたほうがよい
    ○ どちらにせよ今後のアップデートでは必須

    View full-size slide

  33. まとめ
    ● 移行ツールを使っても、手直しはだいたい
    必要になる

    View full-size slide

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

    AndroidX
    対応していない
    場合はコントリビュートの機運


    View full-size slide

  35. まとめ
    ● 正式リリースはまだだが、
    Beta
    が出ているためそろそろ準備をしておいたほ
    うがよさそう
    ○ 少なくとも、とりあえず試しにやってみて、どれく
    らい工数がかかりそうかは見ておいたほうがよさ
    そう

    View full-size slide

  36. コントリビュートもできるらしい
    ● 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide