Slide 1

Slide 1 text

Jetpack最新情報 & Android Architecture Components あんざいゆき(yanzm)

Slide 2

Slide 2 text

͋Μ͍͟Ώ͖ • blog : Y.A.M の雑記帳 • y-anz-m.blogspot.com • twitter : @yanzm (やんざむ) • uPhyca Inc. (株式会社ウフィカ) • Google Developers Expert for Android

Slide 3

Slide 3 text

AndroidX

Slide 4

Slide 4 text

Support Library → AndroidX • Support Library は 28.0.0 で終了 • package と artifact が AndroidX に変わる • "com.android.support:appcompat-v7:28.0.0" → "androidx.appcompat:appcompat:1.0.0" • 2018/9/21 AndroidX 1.0.0 リリース

Slide 5

Slide 5 text

How to move • compileSdkVersion 28 以上にする • Support Library を 28.0.0 にする • 対応表 : https:// developer.android.com/jetpack/ androidx/migrate • [Refactor] - [Refactor to AndroidX ]

Slide 6

Slide 6 text

Jetpack

Slide 7

Slide 7 text

Jetpack • すぐれた Android アプリを作るためのコンポーネント・ ツール・ガイダンスのセット • https://android-developers.googleblog.com/ 2018/05/use-android-jetpack-to-accelerate-your.html • 使う使わないは⾃由 • 使いたいものだけ使えばよい

Slide 8

Slide 8 text

https://developer.android.com/jetpack/

Slide 9

Slide 9 text

Foundation

Slide 10

Slide 10 text

https://developer.android.com/jetpack/ 下位互換性、テスト、Kotlin⾔語サポートなど

Slide 11

Slide 11 text

https://developer.android.com/topic/libraries/support-library/packages#v7-appcompat 下位互換性、テスト、Kotlin⾔語サポートなど AppCompat ActionBar や Material Design のテーマを古いOS 含めて実現するためのライブラリ 使⽤頻度: 最⾼ "androidx.appcompat:appcompat:1.0.2"

Slide 12

Slide 12 text

https://developer.android.com/kotlin/ktx 下位互換性、テスト、Kotlin⾔語サポートなど Android KTX Android フレームワークの API や Support Library の API をより簡潔に記述できるようにする Kotlin extension function 集 使⽤頻度: Kotlin を使っているなら中〜⾼ "androidx.core:core-ktx:1.0.1" view.viewTreeObserver.addOnPreDrawListener( object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { viewTreeObserver.removeOnPreDrawListener(this) actionToBeTriggered() return true } } ) view.doOnPreDraw { actionToBeTriggered() }

Slide 13

Slide 13 text

https://developer.android.com/studio/build/multidex 下位互換性、テスト、Kotlin⾔語サポートなど Multidex アプリとライブラリのメソッド数の合計が 65536 を超えると 単⼀の Dalvik Executable (DEX) bytecode file にできなく なるため、multidex 設定が必要になる 使⽤頻度: 低〜中

Slide 14

Slide 14 text

https://developer.android.com/training/testing/ 下位互換性、テスト、Kotlin⾔語サポートなど Test Unit テストおよび Instrumentation テストを⾏うための ライブラリとガイダンス 使⽤頻度: ⾼ androidx.test:core:1.0.0 androidx.test:runner:1.1.0 androidx.test:rules:1.1.0 androidx.test.ext:junit:1.0.0 androidx.test.ext:truth:1.0.0 androidx.test.espresso:espresso-core:3.1.0 …

Slide 15

Slide 15 text

UI

Slide 16

Slide 16 text

https://developer.android.com/jetpack/ UI 関係のウィジェットやヘルパー

Slide 17

Slide 17 text

https://developer.android.com/jetpack/ UI 関係のウィジェットやヘルパー Auto, TV, Wear OS by Google Android Auto Android TV Wear OS 関連のガイダンス 使⽤頻度: 低

Slide 18

Slide 18 text

https://developer.android.com/training/animation/ UI 関係のウィジェットやヘルパー Animation & transitions アニメーション全般のガイダンスとライブラリ 使⽤頻度: 中〜⾼ "androidx.transition:transition:1.0.0" "androidx.dynamicanimation:dynamicanimation:1.0.0" "androidx.vectordrawable:vectordrawable-animated:1.0.0"

Slide 19

Slide 19 text

https://developer.android.com/guide/topics/ui/look-and-feel/emoji-compat UI 関係のウィジェットやヘルパー Emoji 古いデバイス・OSで絵⽂字を表⽰するためのライブラリ 使⽤頻度: 低〜中 "androidx.emoji:emoji-appcompat:1.0.0" "androidx.emoji:emoji-bundled:1.0.0" "androidx.emoji:emoji:1.0.0"

Slide 20

Slide 20 text

https://developer.android.com/guide/components/fragments UI 関係のウィジェットやヘルパー Fragment ライフサイクルを持ち、組み合わせることができるUIの 基礎単位 使⽤頻度: ⾼ "androidx.fragment:fragment:1.0.0"

Slide 21

Slide 21 text

https://developer.android.com/guide/topics/ui/declaring-layout UI 関係のウィジェットやヘルパー Layout レイアウトに関するガイダンスとライブラリ 使⽤頻度: ⾼ LinearLayout FrameLayout ConstraintLayout CoordinatorLayout "androidx.constraintlayout:constraintlayout:1.1.2" "androidx.coordinatorlayout:coordinatorlayout:1.0.0"

Slide 22

Slide 22 text

https://developer.android.com/training/material/palette-colors UI 関係のウィジェットやヘルパー Palette 画像から⾊情報を抜き出すライブラリ 使⽤頻度: 低〜中 "androidx.palette:palette:1.0.0"

Slide 23

Slide 23 text

Behavior

Slide 24

Slide 24 text

https://developer.android.com/jetpack/ Androidの標準的な機能を アプリに組み込むための ガイダンス

Slide 25

Slide 25 text

https://developer.android.com/reference/android/app/DownloadManager Androidの標準的な機能を アプリに組み込むための ガイダンス Download manager ⼤きなファイルを HTTP 経由でダウンロードするための機能 についてのガイダンス 使⽤頻度: 低〜中

Slide 26

Slide 26 text

https://developer.android.com/guide/topics/media-apps/media-apps-overview Androidの標準的な機能を アプリに組み込むための ガイダンス Media & playback メディア(⾳声・動画)を再⽣する機能を実装するための ガイダンス 使⽤頻度: 低〜中 "androidx.media:media:1.0.0" "androidx.mediarouter:mediarouter:1.0.0"

Slide 27

Slide 27 text

https://developer.android.com/guide/topics/ui/notifiers/notifications Androidの標準的な機能を アプリに組み込むための ガイダンス Notifications 通知を実装するためのガイダンス 後⽅互換性のあるAPI (NotificationCompat など) が⽤意 されている 使⽤頻度: ⾼ "androidx.core:core:1.0.0"

Slide 28

Slide 28 text

https://developer.android.com/guide/topics/permissions/overview Androidの標準的な機能を アプリに組み込むための ガイダンス Permissions Runtime Permissions を実装するためのガイダンス 使⽤頻度: 中〜⾼

Slide 29

Slide 29 text

https://developer.android.com/guide/topics/ui/settings/ Androidの標準的な機能を アプリに組み込むための ガイダンス Preferences 設定画⾯構成⽤のライブラリ 使⽤頻度: 中 "androidx.preference:preference:1.0.0"

Slide 30

Slide 30 text

https://developer.android.com/training/sharing/shareaction Androidの標準的な機能を アプリに組み込むための ガイダンス Sharing データを share する機能を実装するためのガイダンス 使⽤頻度: 中

Slide 31

Slide 31 text

https://developer.android.com/guide/slices/ Androidの標準的な機能を アプリに組み込むための ガイダンス Slices アプリのデータをアプリ外(検索結果など)に表⽰する仕組み 使⽤頻度: 低〜中 “androidx.slice:slice-builders:1.0.0"

Slide 32

Slide 32 text

Architecture

Slide 33

Slide 33 text

https://developer.android.com/topic/libraries/architecture/ Architecture components 堅牢で、テストしやすく、 保守しやすいアプリを作るのを 助けるライブラリ集

Slide 34

Slide 34 text

https://developer.android.com/topic/libraries/data-binding/ Architecture components Data Binding 変更を検知できるデータを UI の要素に宣⾔的に bind する ライブラリ 使⽤頻度: 中(使いたければ) android { ... dataBinding { enabled = true } }

Slide 35

Slide 35 text

https://developer.android.com/topic/libraries/architecture/lifecycle Architecture components Lifecycles Activity や Fragment のライフサイクルの変化に応じた 処理を簡単に⾏えるようにするライブラリ LiveData を使う場合 Lifecycles もほぼ使う 使⽤頻度: ⾼ // Lifecycles only "androidx.lifecycle:lifecycle-runtime:2.0.0" "androidx.lifecycle:lifecycle-compiler:2.0.0"

Slide 36

Slide 36 text

https://developer.android.com/topic/libraries/architecture/livedata Architecture components LiveData オブザーバーが変更を検知できるデータホルダーを 提供するライブラリ ライフサイクルに応じて、Activity や Fragment が active lifecycle state のときだけ通知するということが 可能 使⽤頻度: ⾼ // just LiveData "androidx.lifecycle:lifecycle-viewmodel:2.0.0" "androidx.lifecycle:lifecycle-compiler:2.0.0"

Slide 37

Slide 37 text

https://developer.android.com/topic/libraries/architecture/navigation/ Architecture components Navigation アプリ内での画⾯遷移を処理するためのライブラリ AndroidX 版はまだリリースされていない 最新は 1.0.0-alpha08 使⽤頻度: 不明

Slide 38

Slide 38 text

https://developer.android.com/topic/libraries/architecture/paging/ Architecture components Paging データソースから⼀定のかたまりごとにデータをロード してくるためのライブラリ RecyclerView 向け Room との相性がよい 使⽤頻度: 中 "androidx.paging:paging-runtime:2.1.0-rc01"

Slide 39

Slide 39 text

https://developer.android.com/topic/libraries/architecture/room Architecture components Room SQLite データベースにより堅牢にアクセスするための 機能を提供するライブラリ オブジェクトへのマッピング SQL⽂の静的解析 など 使⽤頻度: 中 "androidx.room:room-runtime:2.0.0" "androidx.room:room-compiler:2.0.0"

Slide 40

Slide 40 text

https://developer.android.com/topic/libraries/architecture/viewmodel Architecture components ViewModel Activity の再⽣成を超えてデータを保持するための ライブラリ 使⽤頻度: ⾼ // ViewModel and LiveData "androidx.lifecycle:lifecycle-extensions:2.0.0" // just ViewModel "androidx.lifecycle:lifecycle-viewmodel:2.0.0" "androidx.lifecycle:lifecycle-compiler:2.0.0"

Slide 41

Slide 41 text

https://developer.android.com/topic/libraries/architecture/workmanager/ Architecture components WorkManager 特定の条件やタイミングでタスクをバックグラウンドで 実⾏するためのライブラリ AndroidX 版はまだリリースされていない 最新は 1.0.0-alpha12 内部で JobScheduler, AlarmManager を使⽤している 使⽤頻度: ⾼

Slide 42

Slide 42 text

Lifecycles, LiveData ViewModel を使おう!

Slide 43

Slide 43 text

例)Github から google organization のリポジトリ⼀覧を取得して RecyclerView に表⽰する class MainActivity : AppCompatActivity() { private val service = createGitHubService(username, token) private val adapter = Adapter() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) recyclerView.adapter = adapter retryButton.setOnClickListener { load() } load() } private fun load() { progressBar.visibility = View.VISIBLE retryButton.visibility = View.GONE service.reposOf("google").enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { progressBar.visibility = View.GONE if (response.isSuccessful) { adapter.submitList(response.body()!!) } else { retryButton.visibility = View.VISIBLE } } override fun onFailure(call: Call>, t: Throwable) { progressBar.visibility = View.GONE retryButton.visibility = View.VISIBLE } }) } }

Slide 44

Slide 44 text

問題点 - configuration の変更(画⾯回転、画⾯サイズの変更など)による Activity の再 ⽣成時に再度読み込み処理が⾛ってしまう

Slide 45

Slide 45 text

問題点 - configuration の変更(画⾯回転、画⾯サイズの変更など)による Activity の再 ⽣成時に再度読み込み処理が⾛ってしまう → ViewModel を使う

Slide 46

Slide 46 text

ViewModel ViewModelProviders.of(activity).get(VM::class.java)

Slide 47

Slide 47 text

ViewModel + LiveData https://www.youtube.com/watch?v=2rO4r-JOQtA liveData.observe(lifecycleOwner, observer)

Slide 48

Slide 48 text

例)ViewModel & LiveData を使う class MainViewModel : ViewModel() { private val service = createGitHubService(username, token) data class Status(val isLoading: Boolean, val data: List?, val throwable: Throwable?) private val _status = MutableLiveData() val status: LiveData = _status init { load() } fun load() { _status.value = Status(true, null, null) service.reposOf("google").enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { _status.value = if (response.isSuccessful) { Status(false, response.body()!!, null) } else { Status(false, null, IllegalStateException()) } } override fun onFailure(call: Call>, t: Throwable) { _status.value = Status(false, null, t) } }) } }

Slide 49

Slide 49 text

例)ViewModel & LiveData を使う class MainActivity : AppCompatActivity() { private val adapter = Adapter() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) recyclerView.adapter = adapter val viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) retryButton.setOnClickListener { viewModel.load() } viewModel.status.observe(this, Observer { val (isLoading, data, _) = it if (isLoading) { progressBar.visibility = View.VISIBLE retryButton.visibility = View.GONE } else { progressBar.visibility = View.GONE if (data != null) { adapter.submitList(data) } else { retryButton.visibility = View.VISIBLE } } }) } }

Slide 50

Slide 50 text

androidx.activity:activity:1.0.0-alpha02 なら class MainActivity : AppCompatActivity() { private val adapter = Adapter() private val viewModel: MainViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) recyclerView.adapter = adapter retryButton.setOnClickListener { viewModel.load() } viewModel.status.observe(this, Observer { when (it) { Status.Loading -> { progressBar.visibility = View.VISIBLE retryButton.visibility = View.GONE } is Status.Success -> { progressBar.visibility = View.GONE adapter.submitList(it.data) } is Status.Error -> { progressBar.visibility = View.GONE retryButton.visibility = View.VISIBLE } } }) } }

Slide 51

Slide 51 text

問題点 - Status で data も throwable も両⽅ null というありえない状態を作れてしまう data class Status( val isLoading: Boolean, val data: List?, val throwable: Throwable? )

Slide 52

Slide 52 text

問題点 - Status で data も throwable も両⽅ null というありえない状態を作れてしまう → Kotlin の sealed class を使う https://kotlinlang.org/docs/reference/sealed-classes.html sealed class はクラス継承先を制限できる sealed class Expr { data class Const(val number: Double) : Expr() data class Sum(val e1: Expr, val e2: Expr) : Expr() object NotANumber : Expr() } Expr 型のインスタンスの実体は Const, Sum NotANumber のどれか when (expr) { is Expr.Const -> TODO() is Expr.Sum -> TODO() Expr.NotANumber -> TODO() }

Slide 53

Slide 53 text

問題点 - Status で data も throwable も両⽅ null というありえない状態を作れてしまう sealed class Status { object Loading : Status() data class Success(val data: T) : Status() data class Error(val throwable: Throwable) : Status() } → Kotlin の sealed class を使う data class Status( val isLoading: Boolean, val data: List?, val throwable: Throwable? )

Slide 54

Slide 54 text

class MainViewModel : ViewModel() { private val service = createGitHubService(username, token) private val _status = MutableLiveData>>() val status: LiveData>> = _status init { load() } fun load() { _status.value = Status.Loading service.reposOf("google").enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { _status.value = if (response.isSuccessful) { Status.Success(response.body()!!) } else { Status.Error(IllegalStateException()) } } override fun onFailure(call: Call>, t: Throwable) { _status.value = Status.Error(t) } }) } } 例)ViewModel & LiveData & sealed class を使う

Slide 55

Slide 55 text

class MainActivity : AppCompatActivity() { private val adapter = Adapter() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) recyclerView.adapter = adapter val viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) retryButton.setOnClickListener { viewModel.load() } viewModel.status.observe(this, Observer { when (it) { Status.Loading -> { progressBar.visibility = View.VISIBLE retryButton.visibility = View.GONE } is Status.Success -> { progressBar.visibility = View.GONE adapter.submitList(it.data) } is Status.Error -> { progressBar.visibility = View.GONE retryButton.visibility = View.VISIBLE } } }) } } 例)ViewModel & LiveData & sealed class を使う

Slide 56

Slide 56 text

おまけ

Slide 57

Slide 57 text

What’s new Jetpack https://developer.android.com/jetpack/androidx/androidx-rn

Slide 58

Slide 58 text

AndroidX のバージョニング • major version は binary compatibility を指す • 1.5.0 revision への依存は 1.7.0 に対しても動作するt が、2.0.0 に対しては動かない可能性がある

Slide 59

Slide 59 text

androidx.activity:activity:1.0.0-alpha02 Activity 最新 : 2018/12/3 Stable なし FragmentActivity, AppCompatActivity のベースクラスとして ComponentActivity が 追加された - OnBackPressedCallback を addOnBackPressedCallback() で登録することで onBackPressed() を override せずに intercept できる - ComponentActivity から ViewModel を取得するための by viewModels() Kotlin property delegate - クリックなどの pending input events は onStop() でキャンセルされる - onRetainCustomNonConfigurationInstance は deprecated になり、代わりに ViewModel を利⽤する class MainActivity : AppCompatActivity() { private val viewModel : MainViewModel by viewModels()

Slide 60

Slide 60 text

androidx.appcompat:appcompat:1.1.0-alpha01 Appcompat 最新 : 2018/12/3 Stable : 2018/11/7 androidx.appcompat:appcompat:1.0.2 1.1.0-alpha01 - app:drawableLeftCompat, app:drawableRightCompat, app:drawableTopCompat, app:drawableBottomCompat, app:drawableStartCompat, app:drawableEndCompat が追加され、 VectorDrawableCompat を指定可能

Slide 61

Slide 61 text

androidx.collection:collection:1.1.0-alpha01 Collection 最新 : 2018/12/3 Stable : 2018/9/21 androidx.collection:collection:1.0.0 1.1.0-alpha01 - LongSparseArray, SimpleArrayMap, SparseArrayCompat に putIfAbsent() が追加 - SimpleArrayMap に getOrDefault() が追加 - LongSparseArray, SimpleArrayMap, SparseArrayCompat に引数が2つの remove() が追加 - LongSparseArray, SimpleArrayMap, SparseArrayCompat に引数が2つの replace() と引数が3つの replace() が追加 val map = SimpleArrayMap() map.putIfAbsent("Pie", 28) map.remove("Pie", 27) map.replace("Pie", 28) map.replace("Pie", 27, 28)

Slide 62

Slide 62 text

androidx.coordinatorlayout:coordinatorlayout:1.1.0-alpha01 CoordinatorLayout 最新 : 2018/12/3 Stable : 2018/9/21 androidx.coordinatorlayout:coordinatorlayout:1.0.0 1.1.0-alpha01 - CoordinatorLayout が NestedScrollingParent3 を実装

Slide 63

Slide 63 text

androidx.core:core:1.1.0-alpha02 Core 最新 : ? Stable : 2018/11/7 androidx.core:core:1.0.1 1.1.0-alpha01 - NestedScrollingChild3, NestedScrollingParent3 関連 - ShortcutInfoCompat に Persons, categories, isLongLived フィールドが追加された - SupportActivity が ComponentActivity にリネーム - getMainExecutor() メソッドが追加された - Accessibility 関連 - など

Slide 64

Slide 64 text

androidx.fragment:fragment:1.1.0-alpha02 Fragment 最新 : 2018/12/3 Stable : 2018/9/21 androidx.fragment:fragment:1.0.0 1.1.0-alpha01 fragment-testing が追加された - テスト⽤の FragmentScenario クラスが追加された(fragment-testing) - FragmentManager に FragmentFactory をセットすることで Fragment インスタン ス⽣成処理をコントロールできる - Fragment から ViewModel を取得するための by viewModels() Kotlin property delegate - クリックなどの pending input events は onStop() でキャンセルされる androidx.fragment:fragment-testing:1.1.0-alpha02 class MainFragment : Fragment() { private val viewModel : MainViewModel by viewModels()

Slide 65

Slide 65 text

androidx.loader:loader:1.1.0-alpha01 Loader 最新 : 2018/12/3 Stable : 2018/9/21 androidx.loader:loader:1.0.0 1.1.0-alpha01 - AsyncTaskLoader に getExecutor() が追加 - AsyncTaskLoader のデフォルトの Executor が AsyncTask.THREAD_POOL_EXECUTOR に変更

Slide 66

Slide 66 text

androidx.media:media:1.1.0-alpha01 Media 最新 : 2018/12/3 Stable : 2018/9/21 androidx.media:media:1.0.0 1.1.0-alpha01 - MediaSessionCompat の FLAG_HANDLES_MEDIA_BUTTONS と FLAG_HANDLES_TRANSPORT_CONTROLS フラグが deprecated に

Slide 67

Slide 67 text

androidx.mediarouter:mediarouter:1.1.0-alpha01 MediaRouter 最新 : 2018/12/3 Stable : 2018/9/21 androidx.mediarouter:mediarouter:1.0.0 1.1.0-alpha01 - dynamic group routes のサポートが追加 - MediaRouteProviders で dynamic group routes をサポートする API が追加 - route 選択とコントロールダイアログに dynamic group routes のための新しい UX が追加

Slide 68

Slide 68 text

androidx.preference:preference:1.1.0-alpha01 Preference 最新 : 2018/11/5 Stable : 2018/9/21 androidx.preference:preference:1.0.0 1.1.0-alpha01 - Preference 値が更新されたときに Summary を更新するための SummaryProvider が追加された - ListPreference と EditTextPreference 向けに default の SummaryProvider が⽤意さ れ、app:useSimpleSummaryProvider=”true” で指定できる - PreferenceGroup. removePreferenceRecursively()

Slide 69

Slide 69 text

androidx.recyclerview:recyclerview:1.1.0-alpha01 RecyclerView 最新 : 2018/12/3 Stable : 2018/9/21 androidx.recyclerview:recyclerview:1.0.0 1.1.0-alpha01 - RecyclerView が NestedScrollingChild3 を実装 androidx.recyclerview:recyclerview-selection:1.1.0-alpha01 最新 : 2018/12/3 Stable : 2018/9/21 androidx.recyclerview:recyclerview-selection:1.0.0

Slide 70

Slide 70 text

androidx.remotecallback:remotecallback:1.0.0-alpha01 Remote Callback 最新 : 2018/12/3 Stable なし PendingIntents の⽣成と受信を簡単にすることを⽬的とした新しいライブラリ public class MyReceiver : BroadcastReceiverWithCallbacks() { fun getPendingIntent(context: Context, value1: Int, value2: Int): PendingIntent { return createRemoteCallback(context) .doMyAction(value1, value2) .toPendingIntent() } @RemoteCallable fun doMyAction(value1: Int, value2: Int): RemoteCallback { // ... return RemoteCallback.LOCAL } }

Slide 71

Slide 71 text

androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha01 Swipe Refresh Layout 最新 : 2018/12/3 Stable : 2018/9/21 androidx.swiperefreshlayout:swiperefreshlayout:1.0.0 1.1.0-alpha01 - SwipeRefreshLayout が NestedScrollingChild3 を実装

Slide 72

Slide 72 text

androidx.textclassifier:textclassifier:1.0.0-alpha01 Text Classifier 最新 : 2018/12/3 Stable なし android.view.textclassifier.TextClassifier のバックポート

Slide 73

Slide 73 text

androidx.transition:transition:1.1.0-alpha01 Transition 最新 : 2018/12/3 Stable : ? androidx.transition:transition:1.0.1 1.1.0-alpha01 - Scene.getCurrentScene(View) が public になった

Slide 74

Slide 74 text

androidx.vectordrawable:vectordrawable:1.1.0-alpha01 Vector Drawable 最新 : 2018/12/3 Stable : ? androidx.vectordrawable:vectordrawable:1.0.1 1.1.0-alpha01 - Theme の属性で定義した ColorStateLists を VectorDrawableCompat の tint に利⽤ できるようになった

Slide 75

Slide 75 text

androidx.versionedparcelable:versionedparcelable:1.1.0-alpha01 Versioned Parcelable 最新 : 2018/11/5 Stable : 2018/9/21 androidx.versionedparcelable:versionedparcelable:1.0.0 1.1.0-alpha01 - VersionedParcelStream を除く全てのクラスの CharSequence のサポートが追加さ れた - SuperClass, Set, and Map のサポートが追加された

Slide 76

Slide 76 text

Architecture Components https://developer.android.com/jetpack/docs/release-notes

Slide 77

Slide 77 text

androidx.lifecycle:lifecycle-extensions:2.0.0 androidx.lifecycle:lifecycle-viewmodel:2.0.0 androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0 androidx.lifecycle:lifecycle-livedata:2.0.0 androidx.lifecycle:lifecycle-runtime:2.0.0 androidx.lifecycle:lifecycle-compiler:2.0.0 androidx.lifecycle:lifecycle-common-java8:2.0.0 androidx.lifecycle:lifecycle-reactivestreams:2.0.0 androidx.lifecycle:lifecycle-reactivestreams-ktx:2.0.0 Lifecycles, LiveData, ViewModel 最新 : 2018/9/21 Stable

Slide 78

Slide 78 text

android.arch.navigation:navigation-fragment:1.0.0-alpha08 Navigation 最新 : 2018/12/6 Stable なし android.arch.navigation:navigation-ui:1.0.0-alpha08 android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha08 android.arch.navigation:navigation-ui-ktx:1.0.0-alpha08

Slide 79

Slide 79 text

androidx.paging:paging-runtime:2.1.0-rc01 Paging 最新 : 2018/12/6 Stable : 2018/10/1 androidx.paging:paging-runtime:2.0.0 2.1.0-alpha01 - KTX extension libraries が追加 - Page dropping 機能が追加 - PagedListAdapter/AsyncPagedListDiffer に differ 処理が終わって paged list を更新 するタイミングで通知がくる callback を渡せる submitList() が追加 - など androidx.paging:paging-rxjava2:2.1.0-rc01 androidx.paging:paging-runtime-ktx:2.1.0-rc01 androidx.paging:paging-rxjava2-ktx:2.1.0-rc01 androidx.paging:paging-rxjava2:2.0.0

Slide 80

Slide 80 text

androidx.room:room-runtime:2.1.0-alpha03 Room 最新 : 2018/12/4 Stable : 2018/10/1 androidx.room:room:2.0.0 2.1.0 - androidx.room:room-coroutines ライブラリの追加 - FTS(Full Text Search) - VIEWs - Multi-Instance Invalidation - AutoValue - RxRoom

Slide 81

Slide 81 text

android.arch.work:work-runtime:1.0.0-alpha12 WorkManager 最新 : 2018/12/5 Stable なし 1.0.0-alpha12 - android.arch.work:work-rxjava2 が追加 - Firebase の JobDispatcher が廃⽌予定のため利⽤されなくなった。将来的に代替⼿ 段が追加される予定 - Worker の output を Result として設定するように変更 - など 1.0.0-alpha11 - android.arch.work:work-runtime-ktx で CoroutineWorker が追加 - など android.arch.work:work-rxjava2:1.0.0-alpha12 android.arch.work:work-runtime-ktx:1.0.0-alpha12

Slide 82

Slide 82 text

AndroidX Test https://developer.android.com/training/testing/release-notes

Slide 83

Slide 83 text

androidx.test:core:1.1.0-beta01 Core 最新 : ? 2018/11/28以降 Stable : 2018/10/24 androidx.test:core:1.0.0

Slide 84

Slide 84 text

androidx.test:runner:1.1.1-beta01 AndroidJUnitRunner and JUnit Rules 最新 : ? 2018/11/28以降 Stable : 2018/10/24 androidx.test:runner:1.1.0 androidx.test:rules:1.1.1-beta01 androidx.test:rules:1.1.0

Slide 85

Slide 85 text

androidx.test.ext:truth:1.1.0-beta01 Assertions 最新 : ? 2018/11/28以降 Stable : 2018/10/24 androidx.test.ext:truth:1.0.0 androidx.test.ext:junit:1.1.0-beta01 androidx.test.ext:junit:1.0.0

Slide 86

Slide 86 text

androidx.test:monitor:1.1.1-beta01 Monitor 最新 : ? 2018/11/28以降 Stable : 2018/10/24 androidx.test:monitor:1.1.0

Slide 87

Slide 87 text

androidx.test:orchestrator:1.1.1-beta01 Orchestrator 最新 : ? 2018/11/28以降 Stable : 2018/10/24 androidx.test:orchestrator:1.1.0

Slide 88

Slide 88 text

androidx.test.espresso:espresso-core:3.1.1-beta01 androidx.test.espresso:espresso-contrib:3.1.1-beta01 androidx.test.espresso:espresso-intents:3.1.1-beta01 androidx.test.espresso:espresso-accessibility:3.1.1-beta01 androidx.test.espresso:espresso-web:3.1.1-beta01 Espresso 最新 : ? 2018/11/28移⾏ Stable : 2018/10/24 androidx.test.espresso:espresso-core:3.1.0 androidx.test.espresso:espresso-contrib:3.1.0 androidx.test.espresso:espresso-intents:3.1.0 androidx.test.espresso:espresso-accessibility:3.1.0 androidx.test.espresso:espresso-web:3.1.0

Slide 89

Slide 89 text

Android Studio https://androidstudio.googleblog.com/

Slide 90

Slide 90 text

androidx.constraintlayout:constraintlayout:2.0.0-alpha2 ConstraintLayout 最新 : 2018/8/9 Stable : 2018/8/30 androidx.constraintlayout:constraintlayout:1.1.3 2.0.0-alpha2 - MotionLayout