Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Taichi Sato (@syarihu) ● Money Forward, Inc. ○ Android Engineer ● TechBooster

Slide 3

Slide 3 text

Support Library

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

AndroidX

Slide 7

Slide 7 text

AndroidXとは ● Android の新しい拡張機能ライブラリ ● Support Library は v28 で終了し、今後は AndroidX に移行する必要がある ● AndroidX のバージョンは v1.0.0 から 新たに始まる ○ 2018 年 7 月現在の最新は beta01 ● パッケージ名も androidx になる

Slide 8

Slide 8 text

android.*とandroidx.* ● android.* ○ プラットフォームにバンドルされている API ● androidx.* ○ すべての Android バージョンで可能な 限り一貫して動作する機能を提供する

Slide 9

Slide 9 text

AndroidXへの移行

Slide 10

Slide 10 text

AndroidXへの移行 ● AndroidX への移行には移行ツールが 用意されている ● 試しに Money Forward の Android アプリ を AndroidX に移行してみる

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

いざビルド!

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

aapt2 ● Android Asset Packaging Tool 2.0 ● リソース処理の改善 ● Android Gradle Plugin 3.0.0 からデフォルトで有効 ○ android.enableAapt2=false で無効にできた ● Android Gradle Plugin のアップデートにより enableAapt2 のプロパティが削除された

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Migrate to AndroidX

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Refactor -> Migrate to AndroidX…

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

いざビルド!

Slide 27

Slide 27 text

* 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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

もう一回ビルド!

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

\(^o^)/

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

まとめ ● 特に OSS をたくさん利用している プロジェクトは注意! ○ 今回紹介した以外にも問題はたくさん出てくる と予想できる ○ 利用している OSS が AndroidX 対応していない 場合はコントリビュートの機運 … ?

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

ありがとうございました