アーキテクチャ コンポーネントのリリースノート アーカイブ

2019 年 1 月 15 日

WorkManager

WorkManager 1.0.0-beta02 がリリースされました。このリリースにはバグの修正がいくつか含まれています。

バグの修正

  • Android 6.0(API レベル 23)が搭載されているデバイスで定期タスクがインターバルごとに複数回実行される可能性があるエッジケースを修正しました。b/121998363
  • Android 5.1(API レベル 22)以下が搭載されているデバイスで ConcurrentModificationException が発生する問題を修正しました。b/121345393
  • Android 5.1(API レベル 22)以下が搭載されているデバイスで制約条件が満たされていない場合に作業が誤って実行される問題を修正しました。b/122578012
  • 一部のエッジケースにおける作業完了処理が高速になるように最適化しました。b/122358129
  • WorkManager が使用する LiveData の複数のインスタンス間における潜在的な競合状態に対処するための変更を追加しました。
  • Room の依存関係に 1.1.1-rc01 ではなく 1.1.1 を使用するよう移行しました(これらのバージョンはまったく同じものです)。b/122578011

2018 年 12 月 19 日

WorkManager

WorkManager 1.0.0-beta01 がリリースされました。このリリースには API の変更は含まれていません。今後、重大な問題が発生しない限り、WorkManager は次のバージョンまで安定版 API として使用される予定です。このリリースにはバグの修正がいくつか含まれています。

バグの修正

  • 以前にキャンセルされた子は、その親の作業が正常に完了しても実行されなくなります。b/120811767
  • ロギングクラスが適切に初期化されるようになりました(テスト中にメイン表示されるようになりました)。

2018 年 12 月 18 日

Navigation 1.0.0-alpha09 がリリースされました。このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。

android.arch.navigation:navigation-testing アーティファクトの開発は継続しないこととなりました。このアーティファクトが NavController の内部テストに役立つことは実証済みですが、別のテスト戦略(navigate() が適切に呼び出されることを確認するために NavController インスタンスをモックするなど)を採用することを強くおすすめします。このアプローチは、AndroidDevSummit 2018 での単一アクティビティに関する講演で詳しく説明されています。また、Navigation を使用したテスト用の補足ドキュメントの作成が予定されています。

新機能

  • menuCategory="secondary" を指定した MenuItem は、NavigationUI のメソッドとともに使用した場合に、バックスタックをポップしなくなりました。b/120104424
  • AppBarConfiguration を使用して、navController.navigateUp()false を返したときに呼び出される代替の OnNavigateUpListener インスタンスを設定できるようになりました。b/79993862b/120690961

互換性を破る変更

  • argType="reference" を指定して <argument> を使用した場合、Navigation が参照を解析しなくなり、代わりに未加工のリソース ID そのものを提供するようになりました。b/111736515
  • setup メソッドに合わせて、onNavDestinationSelected() ではデフォルトでナビゲーション グラフの開始デスティネーションにポップで戻るようになりました。バックスタックがポップされないようにするには、menuCategory="secondary"MenuItem に追加してください。aosp/852869
  • 生成された Args クラスの fromBundle() メソッドが、null 許容の Bundle ではなく、非 null の Bundle を受け取るようになりました。aosp/845616

バグの修正

  • ディープリンクから引数が常に文字列として解析されるのではなく、正しい argType として適切に解析されるようになりました。b/110273284
  • Navigation がそのパブリック リソースを適切にエクスポートするようになりました。b/121059552
  • Safe Args に Android Gradle プラグイン 3.4 Canary 4 以上との互換性が備わりました。b/119662045

2018 年 12 月 12 日

WorkManager

WorkManager 1.0.0-alpha13 がリリースされました。このリリースには、一部の Kotlin ユーザーにとって有用な、API の軽微な変更が含まれています。

API の変更

  • androidx.work.ResultListenableWorker の内部クラスになりました。これにより、Kotlin の最上位の Result クラスとのリファクタリングの競合が防止されます。これは API の互換性を破る変更です。b/120564418

API の互換性を破る変更

  • androidx.work.ResultListenableWorker の内部クラスになりました。

2018 年 12 月 6 日

Paging

Paging 2.1.0-rc01 がリリースされました。2.1.0-beta01 からの変更はありません。

Navigation 1.0.0-alpha08 がリリースされました。このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。

新機能

  • デスティネーションのラベルを NavigationUI のメソッドで使用した場合、android:label{argName} インスタンスが自動的に正しい引数で置き換えられるようになりました。b/80267266
  • Navigation がサポート ライブラリ 28.0.0 に依存するようになりました。b/120293333

互換性を破る変更

  • OnNavigatedListener の名前が OnDestinationChangedListener に変更されました。b/118670572
  • OnDestinationChangedListener が引数の Bundle も渡すようになりました。aosp/837142
  • app:clearTask 属性と app:launchDocument 属性、およびそれらに関連するメソッドが削除されました。バックスタックからすべてのデスティネーションを削除するには、グラフのルートを指定して app:popUpTo を使用してください。b/119628354
  • ActivityNavigator.ExtrasBuilder パターンを使用するようになり、任意の Intent.FLAG_ACTIVITY_ フラグを設定する機能が追加されました。aosp/828140
  • NavController.onHandleDeepLink の名前が handleDeepLink に変更されました。aosp/836063
  • サブクラス化を想定していない多数のクラスとメソッド(NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration など)が final に設定されました。aosp/835681
  • 非推奨になった NavHostFragment.setGraph() メソッドが削除されました。aosp/835684
  • 非推奨になった NavigationUI.navigateUp(DrawerLayout, NavController) メソッドが削除されました。aosp/835684
  • フラグメント作成機能が FragmentNavigator に移動され、フラグメントの作成を簡単に FragmentFactory にデリゲートできるようになりました。b/119054429
  • NavGraphNavigator のコンストラクタが Context を取得しなくなりました。aosp/835340
  • NavigatorProvider がインターフェースではなくクラスになりました。getNavigatorProvider() から返される NavigatorProvider の機能は変更されていません。aosp/830660
  • NavDestination.navigate() を削除しました。代わりに、Navigatornavigate() を呼び出してください。aosp/830663
  • Navigator の大幅なリファクタリングが行われ、OnNavigatorNavigatedListener が不要になりました。代わりに、navigate が移動先の NavDestination を返すようになりました。
  • Navigator インスタンスがポップイベントを NavController に送信できなくなりました。[戻る] ボタンの押下をインターセプトして navController.popBackStack() を呼び出す場合は、OnBackPressedCallback の使用を検討してください。aosp/833716

バグの修正

  • デスティネーションが <navigation> 要素の場合、常に popUpTo が動作するようになりました。b/116831650
  • ネストされたグラフを使用した場合に IllegalArgumentException が発生する各種のバグを修正しました。b/118713731b/113611083b/113346925b/113305559
  • <activity> のデスティネーションの dataPattern 属性では、toString() を呼び出して文字列以外の引数から引数を設定するようになりました。b/120161365

Safe Args

  • Safe Args がシリアル化可能なオブジェクト(列挙値など)をサポートするようになりました。列挙型では、クラス名を指定せずに列挙リテラルをそのまま使用することによって、デフォルト値を設定できます(例: app:defaultValue="READ")。b/111316353
  • Safe Args がサポート対象のすべての型の配列をサポートするようになりました。b/111487504
  • Safe Args ではリソース ディレクトリのサブフォルダが無視されるようになりました。b/117893516
  • Safe Args では必要に応じて、@Override アノテーションが追加されるようになりました。b/117145301

2018 年 12 月 5 日

WorkManager

WorkManager 1.0.0-alpha12 がリリースされました。このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「API の互換性を破る変更」をご覧ください。このバージョンは最初のベータ版としてリリースされる可能性があります。また、alpha12 ではドキュメントが広範にわたって更新されています。

API の変更

  • 新しいアーティファクトである work-rxjava2RxWorker が導入されました。これは Single<Payload> を必要とする ListenableWorker です。
  • Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、work-firebase アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。
  • PayloadResult に統合されました。Result は、3 つの具体的な実装を含む「シールクラス」になりました。このクラスは、Result.success()(または Result.success(Data))、Result.failure()(または Result.failure(Data))、Result.retry() を介して取得できます。ListenableFuture の結果は Payload ではなく Result になります。Worker には出力の Data 用の getter メソッドと setter メソッドはありません。これは互換性を破る変更です。
  • Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)、および各種のバリアントが追加され、コンテンツ URI の低速トリガーに対するサポートが改善されました。b/119919774
  • WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) のバリアントが追加されました。このメソッドには API 26 が必要です。
  • Kotlin 拡張メソッドの Operation.await()ListenableFuture.await() が追加されました。
  • Operation.getException() の名前が Operation.getThrowable() に変更されました。これは互換性を破る変更です。
  • ContentUriTriggers クラスとそれを参照するメソッドの一般使用ができなくなりました。これは互換性を破る変更です。
  • API の合理化のために、WorkManagerWorkContinuationOneTimeWorkRequest に含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数を Arrays.asList(...) でラップしてください。各メソッドの単一引数のバージョンは引き続き使用できます。これは互換性を破る変更です。
  • WorkContinuation.combine(OneTimeWorkRequest, *) のバリアントを削除しました。これは API を複雑なものにしていましたが、この変更により、既存の combine メソッドの可読性が高まりました。これは互換性を破る変更です。

バグの修正

  • Marshmallow 以前の実装における、実行中タスクのプロセス終了からの復元に関する信頼性が改善されました。
  • observeForever で監視されている LiveData が WorkManager で追跡されるようになりました。これは、Room ライブラリの修正を移植したものです。b/74477406
  • シリアル化されたオブジェクトがその最大サイズを超えた場合に、Data.Builder.build() が例外をスローするようになりました。以前は、この例外のスローは、オブジェクトを適切に処理できないバックグラウンド スレッドでのみ行われていました。
  • 処理の停止とキャンセルの区別がより明確になりました。getWorkInfoById()ListenableWorker.onStopped() の実行中、StateCANCELLED に設定して WorkInfo を返します。
  • ListenableWorkernull Result がエラーとして処理されるようになりました。b/120362353
  • API 24 を搭載している Shield Tablet が IllegalArgumentException をスローすることがある問題に対する実証されていない修正。b/119484416

API の互換性を破る変更

  • Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、work-firebase アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。
  • PayloadResult に統合されました。Result は、3 つの具体的な実装を含む「シールクラス」になりました。このクラスは、Result.success()(または Result.success(Data))、Result.failure()(または Result.failure(Data))、Result.retry() を介して取得できます。ListenableFuture の結果は Payload ではなく Result になります。Worker には出力の Data 用の getter メソッドと setter メソッドはありません。
  • Kotlin 拡張メソッドの Operation.await()ListenableFuture.await() が追加されました。
  • Operation.getException() の名前を Operation.getThrowable() に変更しました。
  • ContentUriTriggers クラスとそれを参照するメソッドの一般使用ができなくなりました。
  • API の合理化のために、WorkManagerWorkContinuationOneTimeWorkRequest に含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数を Arrays.asList(...) でラップしてください。各メソッドの単一引数のバージョンは引き続き使用できます。
  • WorkContinuation.combine(OneTimeWorkRequest, *) のバリアントを削除しました。これは API を複雑なものにしていましたが、この変更により、既存の combine メソッドの可読性が高まりました。

2018 年 12 月 4 日

Room

Room 2.1.0-alpha03 のリリースでは、コルーチンのサポートが追加されたほか、いくつかのバグの修正が行われています。

API の変更

  • @Fts3 または @Fts4 の FTS tokenizer が列挙値ではなく文字列を受け取るようになりました。これにより、カスタムの tokenizer を Room で使用できるようになりました。組み込みの tokenizer は依然として、FtsOptions で文字列定数として定義されています。b/119234881

新機能

  • コルーチン: DAO メソッドを suspend 関数として使用できるようになりました。Room の suspend 関数をサポートするために、新しいアーティファクト(room-coroutines)がリリースされました。b/69474692
  • DAO メソッドのアノテーションに @Insert@Delete@Update のいずれかを使用することで、戻り値の型として ListenableFuture を使用できるようになりました。b/119418331

バグの修正

  • Room が誤って @EntityignoredColumns プロパティの列を持つコンストラクタを見つけようとするバグを修正しました。b/119830714
  • 生成された実装において、Room が DAO メソッドのパラメータを final としてマークしないバグを修正しました。b/118015483
  • Room のプロセッサが特殊記号を含むクエリのエラーを報告する際にクラッシュするバグを修正しました。b/119520136
  • Room が IN 式の引数として他の Collection の各種実装を拒否するバグを修正しました。b/119884035
  • Room から返される LiveData が常に監視される場合、ガベージ コレクションが行われ、新しいデータが生成されなくなるバグを修正しました。b/74477406
  • ロックの競合を緩和するよう RoomDatabase のクローズロックが更新されました。b/117900450

2018 年 11 月 8 日

WorkManager

WorkManager 1.0.0-alpha11 がリリースされました。このリリースには、beta で安定版 API になる予定の各種変更が含まれています。 また、このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「API の互換性を破る変更」をご覧ください。

API の変更

  • work-runtime-ktx に新しい CoroutineWorker が導入されました。
  • WorkStatus の名前を WorkInfo に変更しました。対応する getStatus メソッドのすべてのバリアントの名前も、それぞれ getWorkInfo のバリアントに変更されています。これは互換性を破る変更です。
  • ListenableWorker.onStopped() は、WorkRequest がキャンセルされたかどうかを表すブール値の引数を受け取らなくなりました。 WorkManager はこの区別をしなくなりました。これは互換性を破る変更です。
  • androidx.work.test パッケージの名前が androidx.work.testing パッケージに変更されました。これは互換性を破る変更です。
  • Constraints のセッターが公開 API の一部ではなくなりました。これは互換性を破る変更です。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() は以前は配列を返していましたが、コレクションを返すようになりました。これは互換性を破る変更です。
  • ListenableWorker.onStartWork() の名前が ListenableWorker.startWork() に変更されました。これは互換性を破る変更です。
  • WorkStatus のコンストラクタが公開 API の一部ではなくなりました。これは互換性を破る変更です。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() の名前がそれぞれ Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId() に変更されました。これは互換性を破る変更です。
  • 各種の @NonNull アノテーションが公開 API に追加され、API の使いやすさが改善されました。
  • WorkManager.enqueueUniqueWork() API が追加され、WorkContinuation を作成せずに一意の OneTimeWorkRequest をキューに登録できるようになりました。
  • WorkManagerenqueue メソッドと cancel メソッドのすべてのバリアントが新しい Operation 型を返すようになりました。これは互換性を破る変更です。
  • enqueue のすべてのバリアントが WorkRequest の可変長引数を受け取らなくなりました。これは互換性を破る変更です。 代わりにコレクションを使用してください。Arrays.asList() を使用すると、既存のコードを変更できます。この変更は、API サーフェスとメソッドの数を減らすことを目的としています。
  • 各プロセスで WorkManager を複数回 initialize しようとすると、IllegalStateException が発生するようになりました。これは互換性を破る変更です。

バグの修正

  • work-runtime-ktx アーティファクトの WorkRequest.BuilderListenableWorker が使用されるようになりました。b/117666259
  • PeriodicWork の次回の実行時間が将来の時間に設定されるようになりました。b/118204399
  • WorkManager を使用している場合にアプリの起動時に発生する可能性があるディスク I/O が削除されました。b/117796731
  • WorkConstraintsTracker での競合状態を修正しました。android-workmanager/issues/56 を修正しました。

API の互換性を破る変更

  • WorkStatus の名前を WorkInfo に変更しました。対応する getStatus メソッドのすべてのバリアントの名前も、それぞれ getWorkInfo のバリアントに変更されています。
  • ListenableWorker.onStopped() は、WorkRequest がキャンセルされたかどうかを表すブール値の引数を受け取らなくなりました。 WorkManager はこの区別をしなくなりました。
  • androidx.work.test パッケージの名前が androidx.work.testing パッケージに変更されました。
  • Constraints の setter が公開 API から除外されました。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() は以前は配列を返していましたが、コレクションを返すようになりました。
  • ListenableWorker.onStartWork() の名前が ListenableWorker.startWork() に変更されました。
  • WorkStatus のコンストラクタが公開 API から除外されました。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() の名前がそれぞれ Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId() に変更されました。
  • WorkManagerenqueue メソッドと cancel メソッドのすべてのバリアントが新しい Operation 型を返すようになりました。
  • enqueue のすべてのバリアントが WorkRequest の可変長引数を受け取らなくなりました。
  • 各プロセスで WorkManager を複数回 initialize しようとすると、IllegalStateException が発生するようになりました。

2018 年 11 月 1 日

Paging

Paging 2.1.0-beta01 がリリースされました。2.1.0-alpha01 からの変更はありません。

2018 年 10 月 30 日

Room

Room 2.1.0-alpha02 のリリースでは、バグの修正が行われ、新機能も追加されています。

新機能

  • @Relation@DatabaseView を参照できるようになりました。b/117680932

バグの修正

  • Rx の戻り値の型を使用して登録や破棄を行う場合に、Room がディスク I/O をメインスレッドで実行するバグを修正しました。b/117201279
  • Kotlin エンティティ クラスのフィールドに適した型コンバータを Room が見つけられないバグを修正しました。b/111404868
  • 引数のない Kotlin デフォルト メソッドを含む DAO インターフェースの実装に適さないコードが Room によって生成されるバグを修正しました。b/117527454
  • Room の SQLite 文法パーサーを更新し、ビルド時間が長引く原因となるパフォーマンスの問題を修正しました。b/117401230

2018 年 10 月 29 日

Navigation 1.0.0-alpha07 のリリースでは、バグの修正と API の変更が行われています。

新機能

  • 新しい AppBarConfiguration クラスを使用して、どのデスティネーションが最上位のデスティネーションと見なされるかをカスタマイズできるようになりました。詳しくは、更新されたドキュメントをご覧ください。b/117333663
  • グラフの最初のデスティネーションに引数を渡せるようになりました。b/110300470
  • ディープリンクが、ピリオド、ハイフン、プラス記号を含むカスタム形式をサポートするようになりました。b/112806402

互換性を破る変更

  • navigation-testing-ktx モジュールが navigation-testing artifact に組み込まれ、公開されなくなりました。
  • navigation-testing アーティファクトが Kotlin 標準ライブラリに依存するようになりました。Kotlin の規則との整合性を強化するために API が変更されましたが、Java で作成されたテストでは API を引き続き使用できます。
  • メタデータ マニフェストで登録されたナビゲーション グラフがサポートされなくなりました。b/118355937
  • アクションを <activity> のデスティネーションにアタッチできなくなりました。aosp/785539

バグの修正

  • ディープリンクがクエリ パラメータを正しく解析できるようになりました。b/110057514
  • アクティビティのデスティネーションが開始と終了のすべてのアニメーションに正しく適用されるようになりました。b/117145284
  • カスタム ナビゲータを使用している場合に構成の変更後に発生するクラッシュを解決しました。b/110763345

Safe Args

  • Safe Args は Android Gradle プラグイン 3.2.1 に依存するようになりました。b/113167627
  • 内部クラス用の Directions を生成できるようになりました。b/117407555
  • <include> グラフへの Directions の生成に関する問題を修正しました。b/116542123

2018 年 10 月 12 日

Paging

Paging 2.1.0-alpha01 のリリースでは、2 つの重要な機能(ページ削除機能と、すべてのアーティファクトを対象とした KTX 拡張ライブラリ)が追加されています。また、API の変更とバグの修正も行われています。

API の変更

  • PagedList.Config.Builder.setMaxSize() が追加されました。このメソッドにより、メモリに読み込むアイテムの数を制限できます。
  • androidx.paging.Config()PagedList.Config.Builder に代わる Kotlin のオプションとして追加されました。
  • androidx.paging.PagedList()PagedList.Builder に代わる Kotlin のオプションとして追加されました。
  • DataSourceFactory.toLiveData()LivePagedListBuilder に代わる Kotlin のオプションとして追加されました。
  • DataSourceFactory.toObservable()toFlowable()RxPagedListBuilder に代わる Kotlin のオプションとして追加されました。
  • PagedList が交換されるタイミングをリッスンするための AsyncPagedListDiffer.addPagedListListener() が追加されました。b/111698609
  • 新旧のリストを渡す PagedListAdapter.onCurrentListChanged() のバリアントが追加され、以前のバリアントは非推奨になりました。
  • PagedListAdapter/AsyncPagedListDiffer.submitList() のバリアントが追加されました。このバリアントは、比較した後に PagedList を表示する場合にトリガーされる追加のコールバックを受け取ります。これにより、PagedList の交換を他の UI の更新と同期できるようになりました。b/73781068
  • PagedList.getLoadedCount() が追加され、メモリ内のアイテム数を把握できるようになりました。プレースホルダが無効になっている場合、戻り値は常に .size() と等しくなります。

バグの修正

  • リストを再利用する場合に比較を実行するときの競合状態を修正しました。b/111591017
  • インデックスが無効な場合、PagedList.loadAround()IndexOutOfBoundsException をスローするようになりました。以前は、他の不明確な例外により、クラッシュが発生することがありました。
  • データの変更がなく、初期読み込みサイズが極めて小さい場合に、読み込みがそれ以上行われなくなる問題を修正しました。b/113122599

2018 年 10 月 11 日

WorkManager

WorkManager 1.0.0-alpha10 のリリースでは、デベロッパーが管理する非同期タスクのサポートが追加されています。また、このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「API の互換性を破る変更」をご覧ください。

Google は、WorkManager がアルファ版の最終段階に入ると予想しています。また、ベータ版では安定版 API になると期待しています。公開バグトラッカーでフィードバックをお送りください。

API の変更

  • デフォルトの Worker コンストラクタをはじめ、以前に deprecated したすべてのメソッドとクラスが削除されました。これは API の互換性を破る変更です。
  • NonBlockingWorker の名前が ListenableWorker に変更されました。この公開クラスは再表示され、使用できるようになりました。
    • ListenableWorker は、メインスレッドで呼び出される抽象メソッドの 1 つである ListenableFuture<Payload> onStartWork() へのアクセスを提供します。タスクを開始して非同期で処理できるようにするのはデベロッパーの責任です。タスクが完了したら、ListenableFuture を適宜更新する必要があります。ListenableFuture のリファレンス実装は alpha02Futures パッケージで提供されます(下記の WorkManager のセクションをご覧ください)。
    • WorkerListenableWorker を拡張したもので、以前と同じように動作します(Result doWork() 抽象メソッドを使用)。
    • Worker の一部のメソッドとメンバーが ListenableWorker に移動されました。
    • Google は、Kotlin のコルーチン(安定版がリリースされ次第)と RxJava2 を使用する、ListenableWorker のリファレンス実装をまもなく提供します。
  • インターフェース(WorkerFactory)と具体的な実装(DefaultWorkerFactory)が抽象クラス(WorkerFactory)に統合されました。この実装により、ユーザーが作成したすべての WorkerFactory インスタンスに対する最後の手段として、リフレクションに基づくデフォルトの動作が呼び出されるようになります。これは互換性を破る変更です。
  • WorkManager.synchronous()WorkContinuation.synchronous()、および関連するすべてのメソッドが削除されました。API の各種メソッドの戻り値の型として ListenableFuture<Void> が追加されました。これは API の互換性を破る変更です。
    • ListenableFuture を使用することで、取得と監視を同期させて行えるようになりました。たとえば、以前は void を返していた WorkManager.enqueue() は、ListenableFuture<Void> を返すようになりました。処理の完了後に ListenableFuture.addListener(Runnable, Executor) または ListenableFuture.get() を呼び出してコードを実行できます。
    • ListenableFuture では処理が成功か失敗かを判断できません。判断できるのは、処理が終了したことだけです。処理が成功か失敗かを確認するには、WorkManager メソッドを連結する必要があります。
    • これらのオブジェクトでは、cancel() の呼び出しは無視されます。その理由は、処理と、結果として生じる作業のどちらをキャンセルするかの判断が難しいためです。これは Future コントラクト内で行われます。
    • getStatus* 同期メソッドと同等の機能を引き続き提供できるようにするために、Google は ListenableFuture のバリアントを提供し、LiveData を返す既存のメソッドの名前を「LiveData」を明示的に含むものに変更しました(例: getStatusesByIdLiveData(UUID))。これは API の互換性を破る変更です。

バグの修正

  • 重複する androidx-annotations.pro ファイルに関する alpha09 からの既知の問題を修正しました。Gradle ファイルから exclude 'META-INF/proguard/androidx-annotations.pro' を削除することで、以前のリリースノートの回避策を削除できます。
  • ProGuard の設定が追加され、新しい Worker コンストラクタを保持できるようになりました。b/116296569
  • 処理が REPLACE される競合状態での潜在的な NullPointerException を修正しました。b/116253486b/116677275
  • WorkContinuation.combine() が、2 つ以上ではなく 1 つ以上の WorkContinuation を受け取るようになりました。b/117266752

API の互換性を破る変更

  • デフォルトの Worker コンストラクタをはじめ、以前に deprecated したすべてのメソッドとクラスが削除されました。
  • インターフェース(WorkerFactory)と具体的な実装(DefaultWorkerFactory)が抽象クラス(WorkerFactory)に統合されました。
  • WorkManager.synchronous()WorkContinuation.synchronous() が削除されました。
  • WorkManager.getStatus*() メソッドが ListenableFuture を返すようになりました。また、WorkManager.getStatus*LiveData()LiveData を返すようになりました。

Futures

Futures 1.0.0-alpha02 がリリースされました。

API の変更

  • デベロッパーは、ListenableFuture の具体的な軽量の実装として、ResolvableFutureAbstractResolvableFuture を使用できるようになりました。

2018 年 10 月 8 日

Room

Room 2.1.0-alpha01 がリリースされました。

新機能

  • FTS: FTS3 または FTS4 マッピング テーブルを含むエンティティが Room でサポートされるようになりました。@Entity アノテーションが付与されたクラスでは、@Fts3 または @Fts4 のアノテーションを追加で使用することにより、全文検索のマッピング テーブルを含むクラスを宣言できるようになりました。アノテーションのメソッドを介して FTS オプションを使用することで、さらにカスタマイズできるようになります。b/62356416
  • ビュー: Room で @DatabaseView アノテーションを使用することにより、クラスをストアドクエリ(ビューとも呼ばれます)として宣言できるようになりました。b/67033276
  • AutoValue: Room で、AutoValue アノテーションが付与されたクラスをエンティティや POJO として宣言できるようになりました。AutoValue アノテーションが付与されたクラスの抽象メソッドで、Room のアノテーションである @PrimaryKey@ColumnInfo@Embedded@Relation を宣言できるようになりました。これらのアノテーションは @CopyAnnotations とともに使用して、Room が正しく認識できるようにする必要もあります。b/62408420
  • Rx の戻り値の型の追加サポート: DAO メソッドのアノテーションに @Insert@Delete@Update のいずれかを使用することで、Rx の戻り値の型として CompletableSingle<T>Maybe<T> を使用できるようになりました。b/63317956
  • @Relation が付与された不変の型: Room では従来、@Relation アノテーションが付与されたフィールドは設定できるものである必要がありましたが、それらのフィールドをコンストラクタのパラメータとして指定できるようになりました。
  • enableMultiInstanceInvalidation: RoomDatabase.Builder の新しい API です。この API では、1 つのデータベース ファイルで RoomDatabase の複数のインスタンスを無効にできます。この複数インスタンスの無効化メカニズムは、プロセスが複数にわたる場合でも機能します。b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: RoomDatabase.Builder の新しい API です。この API は、ダウングレードが発生した場合にデータベースを自動的に再作成します。b/110416954
  • ignoredColumns: @Entity アノテーションの新しい API です。この API を使用すると、無視するフィールドをフィールド名のリストで指定できます。エンティティで継承されたフィールドを無視する場合に便利です。b/63522075

API / 動作の変更

  • RoomDatabasemCallbackmDatabase@Deprecated になりました。これらは Room の次のメジャー バージョンで削除される予定です。b/76109329

バグの修正

  • 初期化中にデータベースが破損した場合または不正な移行が行われた場合に、Room を正常に復元できない問題を修正しました。b/111504749b/111519144
  • Room でデータクラスで Kotlin のプライマリ コンストラクタが適切に使用されるようになりました。これにより、フィールドを vars として宣言する必要がなくなります。b/105769985

2018 年 10 月 1 日

2.0.0 がリリースされました。2.0.0-rc01 からの変更はありません。 Paging 2.0.0 のリリースでは、バグが 1 件修正されています。

Paging

バグの修正

  • PositionalDataSource とプレースホルダを使用して非常に高速にスクロールした場合にクラッシュが発生する可能性がある問題を修正しました。b/114635383

2018 年 9 月 21 日

Lifecycle 2.0.0 のリリースでは、ViewModel に関する 2.0.0-rc01 のバグが 1 件修正されています。

Lifecycle

バグの修正

  • コンストラクタを誤って削除する ViewModel ProGuard ルールを修正しました。b/112230489

2018 年 9 月 20 日

Navigation 1.0.0-alpha06 のリリースでは、バグの修正と API の変更が行われています。

新機能

API の変更

  • 互換性を破る変更: ナビゲータの navigate() メソッドが Navigator.Extras パラメータを受け取るようになりました。
  • NavController の getGraph() メソッドが NonNull になりました。b/112243286

バグの修正

  • NavigationUI.setupWithNavController() を各デスティネーションからビューとともに使用する場合、ビューがリークしなくなりました。b/111961977
  • ナビゲータの onSaveState() が一度だけ呼び出されるようになりました。b/112627079

Safe Args

  • ナビゲーション先の Directions クラスによってその親の Directions クラス(存在する場合)が拡張されるようになりました。b/79871405
  • Directions クラスと Args クラスに、便利な toString() の実装が追加されました。b/111843389

2018 年 9 月 19 日

WorkManager

WorkManager 1.0.0-alpha09 のリリースでは、バグの修正、インフラストラクチャの更新、API の変更が行われています。

既知の問題

「More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'」というエラー メッセージが表示される場合は、一時的な回避策として Gradle ファイルに以下のコードを挿入してください。この問題は alpha10 で修正します。

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

バグの修正

  • 「100 jobs」というエラー メッセージが表示される場合に必要な別の修正が追加されました。b/115560696
  • 競合状態が原因の外部キー制約エラーに関する修正がいくつか追加されました。b/114705286
  • ConstraintTrackingWorker.onStopped(boolean) の呼び出しが、基になる Worker にデリゲートされました。b/114125093
  • Firebase JobDispatcher に対する適切な最小バックオフ遅延が適用されました。b/113304626
  • ライブラリ内部のスレッドの保証が改善されました。
  • 内部での LiveData の重複排除に関する潜在的な問題を修正しました。

API の変更

  • WorkerFactoryWorkManager.Configuration の一部として指定することにより、実行時に独自の Worker インスタンスを作成できるようになりました。代替ファクトリは DefaultWorkerFactory です。これは、WorkManager の旧バージョンの動作と一致します。
    • WorkerNonBlockingWorker のデフォルト コンストラクタを非推奨にしました。新しいコンストラクタ(Worker(Context, WorkerParameters))を使用し、super(Context, WorkerParameters) を呼び出してください。WorkManager の将来のバージョンでデフォルト コンストラクタが削除される予定です。
  • Google 社内で新しい ListenableFuture アーティファクトの使用が開始されました(Guava 依存関係はなし)。今後のリリースで、ListenableFutures が API に導入される予定です。この変更により、NonBlockingWorker が最終的に再表示されます。
  • TestDriver.setInitialDelayMet(UUID)TestDriver.setPeriodDelayMet(UUID) を使用して TestDriver の時限タスクをトリガーする機能が追加されました。b/113360060

互換性を破る変更

  • WorkerNonBlockingWorker のデフォルト コンストラクタを非推奨にしました。できるだけ早く新しいコンストラクタに移行してください。将来のバージョンでデフォルト コンストラクタが削除される予定です。

2018 年 8 月 27 日

WorkManager

WorkManager 1.0.0-alpha08 のリリースでは、バグの修正が行われています。

バグの修正

  • WorkManager コンポーネントがダイレクト ブート非対応として明示的にラベル付けされました。そのため、ダイレクト ブート中は、WorkManager コンポーネントは起動しません。将来、ダイレクト ブートに対応したバージョンの WorkManager が提供される予定です。b/112665532
  • 再試行されたタスクが実行されなくなる問題を修正しました。b/112604021
  • たびたび定期タスクが実行されなくなる問題を修正しました(上の問題に関連)。b/112859683
  • アプリプロセスがすでに実行されている場合、バックオフ ポリシーが優先されるようになりました。
  • 制限が 10 KB であることを示すように、Data の例外メッセージを修正しました。
  • JobScheduler プロセスの完了の遅延に対処するために、Configuration.setMaxSchedulerLimit(int) の最大値を 50 に下げました。b/112817355

2018 年 8 月 16 日

WorkManager

WorkManager 1.0.0-alpha07 のリリースではバグの修正と API の軽微な変更が行われています。

バグの修正

  • 負の制限値が指定された SQL クエリが結果を際限なく返す可能性がある問題を修正しました。
  • 作業の実行が終了したときに、他のスケジューラに含まれているその作業の保留中のすべてのコピーが正しくキャンセルされるようになりました。この問題は、JobScheduler のジョブ数の制限超過の原因となっていました。b/111569265
  • ConstraintTrackerConcurrentModificationException を修正しました。b/112272753
  • Data.getBooleanArray(String)Data.getIntArray(String) の戻り値の型のアノテーションを、@NonNull ではなく @Nullable に変更しました。b/112275229

API の変更

  • Worker が新しいクラス NonBlockingWorker を拡張できるようになりました。この変更による現在の処理への影響はありません。NonBlockingWorker は将来、カスタムのスレッド ソリューションに完全に対応したエンティティになる予定です。
  • Data.getBooleanArray(String)Data.getIntArray(String) の戻り値の型のアノテーションを、@NonNull ではなく @Nullable に変更しました。b/112275229
  • Kotlin 拡張機能: Map.toWorkData() のサポートを終了し、トップレベルの workDataOf(vararg Pair<String, Any?>) を追加することにより、既存の API との整合性を強化しました。

2018 年 8 月 10 日

Navigation 1.0.0-alpha05 のリリースでは、バグの修正が行われています。

バグの修正

  • 不正なバックスタック動作を引き起こすバグを修正しました。b/111907708
  • 生成された Args クラスの equals() のバグを修正しました。b/111450897
  • Safe Args のビルドエラーを修正しました。b/109409713
  • リソース ID から Java 名への変換を修正しました。b/111602491
  • Safe Args プラグインの null 可能性に関するエラー メッセージを修正しました。
  • 不足している null 可能性アノテーションを追加しました。

2018 年 8 月 6 日

Lifecycle、Room、Paging のリリース バージョン 2.0.0-rc01 の AndroidX バージョン。アーティファクトはすべて 2.0.0-beta01 から変更されていません。

2018 年 8 月 1 日

WorkManager

WorkManager 1.0.0-alpha06 のリリースでは、バグの修正が行われています。

バグの修正

  • 作業のスケジュール設定時のデータベース ロックを防止できるようになりました。b/111801342
  • Doze モード時に PeriodicWork がスケジュールどおりに実行されないバグを修正しました。b/111469837
  • WorkManager のクラッシュを引き起こす、制約を追跡する際の競合状態を修正しました。googlecodelabs/android-workmanager/issues/56
  • WorkRequest.Builder#build() を使用する場合に一意の WorkRequest を作成できるようになりました。b/111408337
  • RescheduleReceiver は、それを必要とする WorkRequest が存在する場合にのみ使用できるようになりました。b/111765853

2018 年 7 月 24 日

WorkManager

WorkManager 1.0.0-alpha05 のリリースでは、重要なバグの修正とログの変更が行われています。

API の変更

  • WorkManager.getInstance() のアノテーションに、@Nullable ではなく @NonNull が使用されるようになりました。その代わり、手動で初期化する場合にシングルトンが適切に初期化されないと、このメソッドは IllegalStateException をスローします。これは API の互換性を破る変更です。
  • 新しい API である Configuration.Builder.setMinimumLoggingLevel(int) が追加されました。この API では、WorkManager の詳細度を制御できます。デフォルトでは、WorkManager は Log.INFO 以上をログに記録します。
  • Data.getString() のシグネチャが変更され、デフォルト値を取得しなくなりました(暗黙的に null)。これは API の互換性を破る変更です。
  • 内部用にのみ必要な一部のメソッドが @hide としてマークされました。これには、Constraints コンストラクタ、Data.toByteArray()Data.fromByteArray(byte[]) が含まれます。これは API の互換性を破る変更です。

バグの修正

  • WorkManager は自動バックアップの既知のケースの際に作業を実行しなくなりました。この問題がクラッシュを引き起こしていた可能性があります。b/110564377
  • JobScheduler を使用する場合の PeriodicWorkRequest のスケジュールの重複を修正しました。b/110798652
  • デバイスの Doze の後に PeriodicWorkRequest が正しく実行されない問題を修正しました。b/111469837
  • Firebase JobDispatcher の使用時に初期遅延が発生する問題を修正しました。b/111141023
  • 潜在的な競合状態とタイミングに関するいくつかの問題を修正しました。
  • 不要になった BroadcastReceiver が適切に解放されるようになりました。
  • アプリを強制終了した後に再起動する場合のスケジュール変更のパフォーマンスを最適化しました。
  • 特定の WorkRequest をキューに登録する前後に TestScheduler.setAllConstraintsMet(UUID) を呼び出せるようになりました。b/111238024

互換性を破る変更

  • WorkManager.getInstance() のアノテーションに、@Nullable ではなく @NonNull が使用されるようになりました。
  • Data.getString() のシグネチャが変更され、デフォルト値を取得しなくなりました(暗黙的に null)。
  • 内部用にのみ必要な一部のメソッドが @hide としてマークされました。これには、Constraints コンストラクタ、Data.toByteArray()Data.fromByteArray(byte[]) が含まれます。

2018 年 7 月 19 日

Navigation 1.0.0-alpha04 と関連する Safe Args Gradle プラグインで、API の変更、動作の変更、バグの修正が多数行われています。

API / 動作の変更

  • NavHostFragment では常に、現在のフラグメントがメインのナビゲーション フラグメントとして設定され、外部の NavController がポップされる前に子フラグメント マネージャーがポップされるようになります。b/111345778

Safe Args

  • 互換性を破る変更: app:type が、他のライブラリ(ConstraintLayout 2.0.0-alpha1 など)との競合を避けるために、app:argType に変更されました。b/111110548
  • Safe Args からのエラー メッセージをクリックできるようになりました。b/111534438
  • Args クラスでは、NonNull 属性が実際に null ではないことが確認されるようになりました。b/111451769
  • NavDirections と Args によって生成されたクラスに NonNull アノテーションが追加されました。b/111455455b/111455456

バグの修正

  • フラグメントの宛先にディープリンクした後に発生する、システムの [戻る] ボタンに関する問題を修正しました。b/111515685

2018 年 7 月 12 日

Navigation 1.0.0-alpha03 と関連する Safe Args Gradle プラグインで、API の変更、動作の変更、バグの修正が多数行われています。

API / 動作の変更

  • ツールバー用の NavigationUI.setupWithNavController メソッドが追加されました。b/109868820
  • CollapsingToolbarLayout 用の NavigationUI.setupWithNavController メソッドが追加されました。b/110887183
  • バックスタックが空の場合、または特定のデスティネーション ID がバックスタック内にない場合に、popBackStack() から false が返されるようになりました。b/110893637
  • FragmentManager が状態を保存した後に、FragmentNavigator においてナビゲーション操作が無視されるようになったことで、「Can not perform this action after onSaveInstanceState」例外を回避できるようになりました。b/110987825

Safe Args

  • 互換性を破る変更: アクション名と引数名に含まれる英数字以外の文字が、それぞれの NavDirections メソッドの名前でキャメルケースに置き換えられます。
    • 例: DemoController.indexsetDemoControllerIndex になります。b/79995048
    • 例: action_show_settingsactionShowSettings になります。b/79642240
  • 互換性を破る変更: デフォルトでは、引数が null ではないと見なされるようになりました。文字列と Parcelable の引数に null 値を許可するには、app:nullable="true" を追加します。b/79642307
  • 「123L」の形式で defaultValues を指定して、app:type="long" を使用できるようになりました。b/79563966
  • Parcelable の引数がサポートされるようになりました(app:type には完全修飾クラス名を使用します)。サポートされる唯一のデフォルト値は "@null" です。b/79563966
  • Args クラスに equals()hashCode() が実装されました。b/79642246
  • Safe Args プラグインをライブラリ プロジェクトに適用できるようになりました。b/80036553
  • Safe Args プラグインを機能プロジェクトに適用できるようになりました。b/110011752

バグの修正

  • フラグメントのライフサイクル メソッドでのナビゲーションの際に発生する問題を修正しました。b/109916080
  • ネストされたグラフを介して複数回ナビゲーションする際に発生する問題を修正しました。b/110178671
  • グラフで最初のデスティネーションを指定して setPopUpTo を使用する場合に発生する問題を修正しました。b/109909461
  • app:defaultValue のすべての値が文字列として渡されていた問題を修正しました。b/110710788
  • Android Gradle プラグイン 3.2 Beta 01 にバンドルされている aapt2 で、Navigation XML ファイル内のすべての android:name 属性に関する保持ルールが追加されました。b/79874119
  • デフォルトの FragmentNavigator を置き換える際に発生するメモリリークを修正しました。b/110900142

2018 年 7 月 2 日

Lifecycle、Room、Paging のリリース バージョン 2.0.0-beta01 の AndroidX バージョン。

Lifecycle

バグの修正

  • 実装のみを保持し、サブインターフェースは保持しないように LifecycleObserver ProGuard ルールを修正しました。b/71389427
  • 難読化と圧縮を許可するように ViewModel ProGuard ルールを修正しました。

Room

API / 動作の変更

  • RoomDatabase.Builder.setQueryExecutor() が追加され、クエリの実行場所のカスタマイズが可能になりました。
  • RxJava2 Observable のサポートが追加されました。
  • 生成された DAO とデータベースの実装は今回が最終版となります。

バグの修正

  • 「cannot find getter for field」エラーにクラス / フィールド名が指定されるようになりました。b/73334503
  • 旧バージョンの Room との RoomOpenHelper の下位互換性を修正しました。b/110197391

Paging

バグの修正

  • 一部の追加のケース(プレースホルダが無効化されている、PositionalDataSource)でコンテンツが表示されない問題を修正しました。b/80149146
  • 1.0.1 ですでにリリース済み)PagedListAdapterAsyncPagedListDiffer が移動イベントを通知できずにクラッシュする問題を修正しました。b/110711937

2018 年 6 月 26 日

Paging

Paging 1.0.1 のリリースでは、runtime のバグが 1 件修正されています。安定性を得るために、1.0.1 を使用することを強くおすすめします。Paging RxJava2 1.0.1 もリリースされています。これは 1.0.0-rc1 とまったく同じです。

バグの修正

  • PagedListAdapterAsyncPagedListDiffer が移動イベントを通知できずにクラッシュする問題を修正しました。b/110711937

WorkManager

WorkManager 1.0.0-alpha04 がリリースされました。

バグの修正

  • AlarmManager ベースの実装を使用する場合、PeriodicWorkRequest のスケジュールが正しく変更されるようになりました。

  • 強制停止または再起動の後ですべてのワーカーのスケジュールを変更した場合に ANR が発生する可能性がある問題を修正しました。b/110507716

  • null 可能性のアノテーションが各種の WorkManager API に追加されました。b/110344065

  • Worker の実行時に発生する捕捉されない例外がログに記録されるようになりました。b/109900862

  • 旧バージョンの WorkManager にロールバックする場合の破壊的なデータベース移行が可能になりました。b/74633270

  • 重複する暗黙的なタグを作成した場合に移行がクラッシュする問題を修正しました。これは、同じ暗黙的なタグ形式を自分で使用した場合にのみ発生する、非常に珍しい問題です。

2018 年 6 月 19 日

Room

Room 1.1.1 がリリースされました。このリリースは Room 1.1.1-rc1 とまったく同じです。

WorkManager

WorkManager 1.0.0-alpha03 がリリースされました。

バグの修正

  • AlarmManager ベースの実装における競合状態を修正しました。b/80346526

  • デバイスの再起動後に JobScheduler を使用した場合にジョブが重複する問題を修正しました。

  • コンテンツの URI トリガーを含むジョブが再起動後にも保持されるようになりました。b/80234744

  • ドキュメントが更新されました。b/109827628b/109758949b/80230748

  • WorkRequest をキューに再登録すると発生するクラッシュを修正しました。b/109572353

  • work-runtime-ktx の依存関係を利用する場合に Kotlin コンパイラで警告が出力される問題を修正しました。

  • WorkManager で Room バージョン 1.1.1-rc1 が使用されるようになりました。

API の変更

  • WorkContinuation.getStatuses() の同期バージョンである getStatusesSync() を追加しました。

  • ユーザーが開始したキャンセルと OS がリクエストした一時的な停止を区別する機能が Worker に追加されました。Worker.isStopped() は、どのような種類の停止がリクエストされた場合でも true を返します。Worker.isCancelled() は、処理が明示的にキャンセルされた場合に true を返します。b/79632247

  • API 28 での JobParameters#getNetwork() のサポートが追加されました。これは Worker.getNetwork() を介して公開されます。

  • Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) が追加されました。これにより、JobScheduler または AlarmManager に送信可能なジョブの数を適用できるようになります。これは、使用可能な JobScheduler スロットを WorkManager がすべて取得するのを防ぐのに役立ちます。

  • Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) が追加されました。これは、WorkManager が安全に使用できる JobScheduler ジョブ ID の範囲を定義するのに役立ちます。b/79996760

  • Worker.getRunAttemptCount() が特定の Worker の現在の実行数を返すようになりました。b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) を使用することで、一意の PeriodicWorkRequest をキューに登録できるようになりました。b/79600647

  • WorkManager.cancelAllWork() がすべての Worker をキャンセルするようになりました。WorkManager に依存するライブラリは、このメソッドが WorkManager.getLastCancelAllTimeMillis() を使用して前回呼び出されたタイミングを照会することで、内部状態をさらにクリーンアップすることができます。

  • 完了したジョブを内部データベースから削除するための WorkManager.pruneWork() が追加されました。b/79950952b/109710758

動作の変更

  • すべての WorkRequest で使用できる暗黙的なタグが追加されました。このタグは Worker の完全修飾クラス名です。これにより、tag なしで、または id を使用できない場合でも、WorkRequest を削除できます。b/109572351

互換性を破る変更

  • Worker.WorkerResult の名前を Worker.Result に変更しました。

  • Worker.onStoppedisCancelled パラメータが追加されました。このパラメータは、Worker が明示的にキャンセルされた場合に true に設定されます。

2018 年 6 月 7 日

Navigation 1.0.0-alpha02 がリリースされました。

動作の変更

  • FragmentNavigatorsetReorderingAllowed(true) を使用するようになりました。b/109826220

  • Navigation で、ディープリンク URL から解析された引数が URL デコードされるようになりました。b/79982454

バグの修正

  • フラグメントのライフサイクル メソッドから Navigation を呼び出す場合に発生する IllegalStateException を修正しました。b/79632233

  • Navigation がサポート ライブラリ 27.1.1 に依存するようになり、アニメーションを使用する場合のちらつきが修正されました。b/80160903

  • defaultNavHost="true" を子フラグメントとして使用する場合に発生する IllegalArgumentException を修正しました。b/79656847

  • NavDeepLinkBuilder を使用する場合に発生する StackOverflowError を修正しました。b/109653065

  • ネストされたグラフに戻る際に発生する IllegalArgumentException を修正しました。b/80453447

  • launchSingleTop の使用時にフラグメントが重複する問題を修正しました。b/79407969

  • Navigation で、ネストされたグラフ用に適切な合成バックスタックを作成できるようになりました。b/79734195

  • ネストされたグラフを MenuItem として使用するときに、NavigationUI が正しいアイテムをハイライト表示するようになりました。b/109675998

API の変更

  • アクションの clearTask 属性と、NavOptions の関連する API が非推奨になりました。b/80338878

  • アクションの launchDocument 属性と、NavOptions の関連する API のサポートが終了しました。b/109806636

2018 年 5 月 24 日

WorkManager 1.0.0-alpha02 がリリースされました。

WorkManager

バグの修正

  • State.isFinished()NullPointerException を修正しました。b/79550068

  • Application.onCreate()Worker のスケジュール変更を引き起こしていた問題を修正しました。b/79660657

  • OS で許可されるよりも多くの処理のスケジュールを設定できる問題を修正しました。b/79497378

  • Worker に関連付けられている wake lock のクリーンアップをバックグラウンド スレッドに移動しました。

  • AlarmManager の実装で、保留中のすべての処理が完了したときに適切にクリーンアップされるようになりました。

  • 英語地域以外に影響を及ぼしていたクリーンアップの SQL クエリを修正しました。b/80065360

  • Datafloat に対するサポートが追加されました。b/79443878

  • Data.Builder.putAll()Builder のインスタンスを返すようになりました。b/79699162

  • ドキュメントに Javadoc に関する記述を増やし、修正を行いました。b/79691663

API の変更

  • Worker が停止されている状態に対応できるようになりました。Worker.isStopped() を使用すると、Worker が停止されているかどうかを確認できます。また、Worker.onStopped() を使用すると、軽量のクリーンアップ処理を実行できます。

  • Worker.getTags() API が、Worker に関連付けられているタグの Set を返すようになりました。

  • javax.time.Duration のオーバーロードが、期間と TimeUnit の組み合わせを取得する API 用に追加されました。これは @RequiresApi(26) によって保護されます。

  • WorkManager 拡張機能が androidx.work.ktx パッケージから androidx.work パッケージに移動されました。以前の拡張機能を非推奨にし、将来のバージョンで削除される予定です。

  • Configuration.withExecutor() を非推奨にしました。代わりに Configuration.setExecutor() を使用してください

2018 年 5 月 16 日

Paging RxJava2 1.0.0-rc1 と Room 1.1.1-rc1 がリリースされました。移行を使用する場合は、Room の 1.1.0 ではなく 1.1.1-rc1 を使用することを強くおすすめします。

Room

Room で移行後の初期化が適切に処理されないバグを修正しました。b/79362399

Paging

Paging rxjava2 がリリース候補になります。初期のアルファ版からの変更はありません。

2018 年 5 月 8 日

Paging 1.0、Navigation と WorkManager のアルファ版、Room 1.1、AndroidX

Paging 1.0.0Room 1.1.0、さらに 2 つの新しいアーキテクチャ コンポーネント(Navigation と WorkManager)のアルファ版がリリースされました。

Paging と Room に関しては、現在のリリース候補からの変更はありません。

新しいライブラリ: Navigation

Navigation は、アプリ内ナビゲーションを作成するためのフレームワークを提供します。この初回リリースは 1.0.0-alpha01 です。

新しいライブラリ: WorkManager

WorkManager は、制約に対応した保証済みのバックグラウンド作業のスケジュール設定と実行を簡素化します。この初回リリースは 1.0.0-alpha01 です。

AndroidX

アーキテクチャ コンポーネントは AndroidX の一部になる予定です(最新のパッケージ名、アーティファクト名、他の AndroidX ライブラリに対する依存関係を含む)。 これらはバージョン 2.0.0-alpha1 でリリースされ、他の AndroidX ライブラリと組み合わせて使用されます。

Kotlin 拡張機能

ViewModel、ReactiveStreams、および Sqlite(Room の以前の「Database」コンポーネント)のすべてに、AndroidX のアルファ版リリースの一部として追加された Kotlin 拡張機能ライブラリが含まれています。また、Navigation と WorkManager には -ktx モジュールも含まれています。これらの各拡張機能モジュールについては、コンポーネントの追加をご覧ください。

2018 年 5 月 2 日

  • Room 1.1.0 リリース候補
  • Room 1.1.0-rc1 がリリースされました。

バグの修正

  • Room が Kotlin 1.2.40 と互換性を持つようになりました。b/78328708

2018 年 4 月 19 日

Paging リリース候補

Paging 1.0.0-rc1 と Room 1.1.0-beta3 がリリースされました。

Paging

既知の問題と、Paging 1.0.0 で導入予定の新機能はこれ以上ありません1.0.0-rc1 を使用するようにプロジェクトをアップグレードし、1.0.0 の信頼性を高めるためのバトルテストにご協力ください。

このリリースでは、変更はありません。1.0.0-beta1 と同じです。

Room

バグの修正

  • Kotlin POJO が Java で定義された関係エンティティを参照する際に発生するコンパイル エラーを修正しました。b/78199923

2018 年 4 月 5 日

Room 1.1.0-beta2、Paging 1.0.0-beta1、Paging RxJava 1.0.0-alpha1 がリリースされました。

Paging は、リリース候補版に進む前の少しの間、ベータ版が提供される予定です。 Paging 1.0 でのこれ以上の API の変更は予定していません。API の変更に対する制約が非常に大きくなっています。

Paging に対するアルファ版 RxJava2 のサポートが、独立したオプションのモジュールとしてリリースされました(android.arch.paging:rxjava2:1.0.0-alpha1)。安定するまで、一時的に独立してバージョニングされる予定です。

この新しいライブラリには LivePagedListBuilder に代わる RxJava2 が用意されており、ObservableFlowable を作成し、Executor ではなく Scheduler を取得できます。

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Paging

新機能

  • 新しい android.arch.paging:rxjava2 アーティファクトを介して RxPagedListBuilder が追加されました。

API の変更

  • ビルダーのエグゼキュータの役割を明確にするために、API が次のように変更されました。

    • setBackgroundThreadExecutor() の名前が setFetchExecutor() に変更されました(PagedList.BuilderLivePagedListBuilder

    • setMainThreadExecutor() の名前が setNotifyExecutor() に変更されました(PagedList.Builder

  • PagedList.mCallbacks メンバーを非公開に修正しました。

バグの修正

  • LivePagedListBuilder は、Arch コンポーネントの IO スレッドプールではなく、指定されたエグゼキュータで、最初の PagedList の読み込みをトリガーするようになりました。

  • 内部の DataSource ラッパー(DataSource.map の実装と、プレースホルダが無効化された PositionalDataSource の読み込みの実装に使用される)での無効な動作を修正しました。b/77237534

Room

バグの修正

  • Room の Rx の SingleMaybe の実装における重大なバグを修正しました。このバグは、クエリのリサイクルを早すぎるタイミングで実行し、返された Single インスタンスまたは Maybe インスタンスに複数のオブザーバーを追加した場合に問題を引き起こしていました。 b/76031240

  • RoomDatabase.clearAllTables がトランザクション内で呼び出された場合、データベースに VACUUM を実行しなくなりました。b/77235565

2018 年 3 月 21 日

Room 1.1.0-beta1、Paging 1.0.0-alpha7、Lifecycles 1.1.1 がリリースされました。

Room

API の変更

  • API レビューのフィードバックに基づき、@RawQuery では String をクエリ パラメータとして渡すことができなくなりました。SupportSQLiteQuery を使用する必要があります(引数をサポートする SupportSQLiteQuery のインスタンスを簡単に作成するには SimpleSQLiteQuery についてご確認ください)。
  • RoomDatabase.Builder の fallbackToDestructiveMigrationFrom メソッドで、vararg Integer の代わりに vararg int を使用できるようになりました。

バグの修正

  • WAL チェックポイントを設定し、データベースの VACUUM を実行することで、RoomDatabase.clearAllTables がオペレーティング システムにスペースを返すようになりました。

  • @RawQuery は、Pojo が Embedded フィールドまたは Relation を介してエンティティを参照する限り、observedEntities プロパティの Pojo をすべて受け入れるようになりました。b/74041772

  • Paging: Room の DataSource の実装で、マルチテーブルの依存関係(関係、結合など)を適切に処理できるようになりました。以前はこの依存関係により、新しい結果をトリガーできず、コンパイルを実行できないこともありました。 b/74128314

Lifecycle

1 つの小規模な変更のみ: android.arch.core.util.Functionarch:runtime から arch:common に移動されました。これにより、(下記の paging:common のような)ランタイムの依存関係がなくてもこのメソッドを使用できるようになりました。

lifecycle:commonlifecycle:runtime の依存関係であるため、この変更による lifecycle:runtime への直接的な影響はありません。影響を受けるのは、Paging と同様に、lifecycle:common に直接依存するモジュールだけです。

Paging

Paging 1.0.0-alpha7 が Lifecycle 1.1.1 とともにリリースされました。上記のとおり、Paging alpha7 は Function クラスの移動に依存するため、lifecycle:runtime の依存関係を android.arch.lifecycle:runtime:1.1.1 に更新する必要があります。

Paging alpha7 は、Paging がベータ版になる前の最終リリースになる予定です。

API の変更

  • DataSource.LoadParams オブジェクトにパブリック コンストラクタが追加され、DataSource.LoadCallback は抽象オブジェクトになりました。これにより、DataSource をラップする、またはモック コールバックを使用して DataSource を直接テストすることができます。 b/72600421
  • DataSource と DataSource.Factory のマッパー
    • map(Function<IN,OUT>) を使用すると、DataSource で読み込んだ結果を変換、ラップ、装飾することができます。
    • mapByPage(<List<IN>,List<OUT>>) をバッチ処理で実行しても同じ結果が得られるようになりました(たとえば、SQL で読み込んだアイテムで、別のデータベースに対するクエリをさらに実行する必要がある場合、バッチとして実行できます)。
  • PagedList#getDataSource() がコンビニエンス メソッドとして追加されました。b/72611341
  • サポートが終了したすべてのクラスが API から削除されました(recyclerview.extensions パッケージの残り、LivePagedListProvider など)。
  • DataSource.Factory がインターフェースから抽象クラスに変更され、マップ機能を使用できるようになりました。

バグの修正

  • ビルダーを最終版に変更しました。b/70848565
  • Room DataSource の実装が、マルチテーブル クエリを処理するように修正されました。この修正は Room 1.1.0-beta1 に反映されています(上記を参照)。
  • プレースホルダが有効で、合計サイズがページサイズのちょうど倍数である場合に、PositionalDataSourceBoundaryCallback.onItemAtEndLoaded が呼び出されないバグを修正しました。

2018 年 3 月 2 日

Room 1.1.0-alpha3 がリリースされました。これは、Room 1.1.0 の最後のアルファ版リリースになる予定です。

API の変更

  • InvalidationTrackeraddObserver メソッドと removeObserver メソッドが同期するようになりました。UI 以外のスレッドではこれらのメソッドを呼び出す必要があります。これにより、テーブルを監視しながら一部の競合状態を防止できます。

  • RoomDatabase クラスに新しい clearAllTables() メソッドが追加されました。このメソッドは、テーブルの内容をすべて切り捨てます。b/63807999

  • クエリ パラメータの数を返す getArgCount() メソッドが SupportSQLiteQuery に追加されました。b/67038952

バグの修正

  • @RawQuery が Paging のクエリ用に適切にサポートされるようになりました。b/72600425

  • 生成された Dao クラスの名前が Room によって適切に付けられるようになりました。2 つ以上の Dao インターフェースが同じパッケージ内の内部クラスで、それらの名前が同じ場合でも、名前が重複しなくなりました。b/73536380

  • Pojo の汎用フィールドのタイプが拡張クラスのメンバーとして適切に解析されるようになりました。b/73534868

  • 依存関係アーティファクトから継承した、Dao インターフェースのクエリ パラメータが適切に解析されるようになりました。b/68118746

  • @Relation 用に生成されたクエリが、フィールド名を適切にエスケープするようになりました。b/70925483

2018 年 2 月 27 日

Paging 1.0.0-alpha6 がサポート ライブラリ リリース 27.1.0 とともにリリースされました。 ListAdapter といくつかの関連するクラスが Paging ライブラリから直接 Recyclerview に移動されたほか、一部のクラスでは機能を明確にするために名前が変更されました。API の互換性を破る重大な変更は、この Paging のアルファ版リリースが最後になる見込みです。

API の変更

  • recyclerview-v7 に移動されたクラス:
    • ListAdapter
  • 名前が変更され、recyclerview-v7 に移動されたクラス:
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • paging-runtime 内で名前が変更されたクラス:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

移動されたクラスは、Paging ライブラリから独立しており、RecyclerView とともに有用なクラスでした。つまり、これらのクラスは Paging のアルファ版リリースに左右されずに使用することができます。ただし、Paging を使用するアプリでは、Alpha 6 へのアップグレードに加え、Support Library 27.1.0 へのアップグレードも同時に行う必要があります。

** Paging Alpha6 の移行ガイド **

  • Paging と RecyclerView の依存関係を android.arch.paging:runtime:1.0.0-alpha6com.android.support:recyclerview-v7:27.1.0 に更新します。
    • これらは同時に行う必要があります(ListAdapter が Paging から RecyclerView に移動されたため)。
  • ListAdapterHelper の参照を AsyncListDiffer に更新します。
    • より明示的な getCurrentList().getItem(index)getCurrentList().size() の呼び出しパターンを優先し、getItem(index)getItemCount() は削除されています。
  • ListAdapterConfig の参照を AsyncDifferConfig に更新します。
  • DiffCallback の参照を DiffUtil.IttemCallback に更新します。
  • PagedListAdapterHelper の参照を AsyncPagedListDiffer に更新します。
  • setList() の参照を submitList() に更新します。
    • リスト差分の非同期の性質を明確にするために名前を変更しました。

バグの修正

  • プレースホルダが無効になっている場合に、間違った最初の位置が最初の読み込みに渡される問題を修正しました。b/73513780

2018 年 2 月 15 日

Room 1.1.0-alpha2 がリリースされました。

新機能

  • ログ先行書き込みモードにおいて、Room でデータベースを開けるようになりました。 このモードでは、書き込みによる読み取りクエリのブロックが行われなくなります。また、メモリ消費量は増えますが(複数の接続を確立するため)、通常はより高速になります。デフォルトでは、デバイスが API 16 以上で、メモリの少なくないデバイスの場合、Room では WAL が使用されます。この動作は、setJournalMode() メソッドを RoomDatabase.Builder で使用することによって制御できます。 b/67757002

  • Guava のサポート: DAO クエリにおいて、Room が GuavaOptional<T> または ListenableFuture<T> を返せるようになりました。ListenableFuture<T> を使用するには、guava アーティファクトを Room(android.arch.persistence.room:guava:1.1.0-alpha2)からインポートする必要があります。

  • Room が java.util.Optional<T>DAO クエリから返せるようになりました。

  • デフォルトの実装のインターフェース メソッドが、DAO クラスの @Transaction メソッドでサポートされるようになりました。Java 8Kotlin の両方でサポートされます。b/72416735

バグの修正

  • 使用可能な別のコンストラクタがある場合、@Relation が付与されたコンストラクタが原因のコンパイル エラーが発生しなくなりました。b/72884434

  • @Query メソッドで ' によってエスケープされるテーブル名が、無効化トラッカーで適切にエスケープされるようになりました。b/72366965

  • Room で Kotlin @Metadata アノテーションを使用することで、アノテーションの処理中にクラス構造を読み取れるようになりました。つまり、POJO が依存関係から継承されている場合でも、そのコンストラクタのパラメータ名を適切に読み取ることができます。b/67181813

  • ダウングレード移行パスの検出に関する問題を修正しました。b/72153525

  • 既存のデータベースから Room への移行時に、デフォルト以外の列の型が適切に処理されるようになりました。b/71953987

  • Room で Kotlin クラスの boolean? フィールドの永続化を適切に処理できるようになりました。b/72786402

2018 年 1 月 22 日

Lifecycle 1.1.0、Room 1.1.0-alpha1、Paging 1.0.0-alpha5 がリリースされました。

Lifecycle 1.1.0

パッケージの変更

以下の新しい、極めて小さな依存関係を利用できるようになりました。

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

API の変更

  • サポートが終了した LifecycleActivityLifecycleFragment削除されました。FragmentActivityAppCompatActivity を使用するか、Fragment をサポートしてください。
  • @NonNull アノテーションが ViewModelProvidersViewModelStores に追加されました。
  • ViewModelProviders コンストラクタのサポートが終了しました。その静的メソッドを直接使用してください。
  • ViewModelProviders.DefaultFactory のサポートが終了しました。ViewModelProvider.AndroidViewModelFactory を使用してください。
  • 静的な ViewModelProvider.AndroidViewModelFactory.getInstance(Application) メソッドが追加され、ViewModel インスタンスや AndroidViewModel インスタンスの作成に適した静的な Factory を取得できるようになりました。

Room 1.1.0-alpha1

新機能

  • RawQuery: この新しい API を使用すると、@Dao メソッドで SQL をクエリ パラメータとして受け取ることができます。 b/62103290b/71458963
  • fallBackToDestructiveMigrationsFrom: RoomDatabase.Builder のこの新しい API を使用すると、よりきめ細かな制御が可能になり、スキーマ バージョンの破壊的な移行を開始できるようになります(fallbackToDestructiveMigration との比較)。 b/64989640
  • Room で新しい Paging API(alpha-4 以上)のみをサポートするようになりました。非推奨の LivePagedListProvider のサポートは終了しました。新しい Room アルファ版を使用するには、Paging alpha-4 以上を使用し、LivePagedListProvider から LivePagedListBuilder に切り替える必要があります(まだ切り替えていない場合)。

バグの修正

  • Kotlin Kapt の型に対するサポートが改善されました。b/69164099
  • フィールドの順序によってスキーマが無効化されることがなくなりました。b/64290754

Paging 1.0.0-alpha5

バグの修正

  • プレースホルダが無効になっているときのページ読み込みを修正しました。b/70573345
  • IllegalArgumentException のバグを見つけるためのログが追加されました。b/70360195(および Room 側の理論的な修正)
  • Javadoc のサンプルコードを修正しました。b/70411933b/71467637

2017 年 12 月 11 日

Paging alpha4-1 がリリースされました。このリリースでは、Paging alpha 4 の小規模なバグ修正が行われています。

バグの修正

  • 無効なデータソースのコールバック パラメータが確認されなくなりました。b/70353706b/70360195

2017 年 12 月 7 日

Paging alpha4 がリリースされました。このリリースでは、ネットワークのユースケース、およびネットワークとデータベースのユースケースを主なターゲットとして重要な変更と追加が行われています。

API の変更

  • DataSource が非同期の API になりました。これにより、ページングをネットワークから直接、簡単に行えるようになりました。

    • 初期のサイズとデータ用の単一のエントリ ポイント。
    • コールバックを保持し、後でディスパッチすることにより、ネットワークの再試行をサポートします。
    • Threadsafe コールバックを使用すると、非同期読み込みが可能になり、UI スレッド上にネットワーク対応の単一の PagedList を作成できるようになります。
    • 初期読み込み用のパラメータに関するエラー動作がより明確になりました。
  • 掲載順位に基づくインデックス登録を反映し、プレースホルダが無効になっている場合には画像をタイル表示しないことを示すために、TiledDataSource の名前が PositionalDataSource に変更されました。

  • ネットワークのページ読み込みに埋め込まれた次または前のトークンをサポートするために、PageKeyedDataSource が追加されました。また、違いを明確にするために、KeyedDataSource の名前が ItemKeyedDataSource に変更されました。

  • LivePagedListBuilderDataSource.FactoryLivePagedListProvider に代わって使用されるようになりました。このビルダーが提供する機能は同じですが、詳細なカスタマイズが可能になり、デフォルトがよりシンプルになっています。出荷時設定で、DataSource 生成コードを LiveData から独立した状態に維持できます。

  • データベースとネットワークのユースケース用に PagedList.BoundaryCallback が追加されました。

  • PagedList.Builder コンストラクタが DataSourcePagedList.Config を取得するようになったため、LivePagedListBuilder にさらに近づきました。このコンストラクタでは、Java 言語のダイヤモンド演算子や Kotlin の推定型を使用できます。

  • PagedList.getConfig() が追加され、PagedList.Config にパブリック メンバーのプロパティが含まれるようになりました。

  • KeyedDataSource.loadBefore() が逆の結果を推測しないようになりました。

  • 表示されている PagedList の更新をリッスンするために、PagedListAdapter.onCurrentListChanged() が追加されました。

バグの修正

  • PagedListAdapter(ヘルパー)の IndexOutOfBoundsException を修正しました。b/67883658

1.0.0 - 2017 年 11 月 6 日

すべての主要コンポーネント(Paging を除く)が 1.0.0 になりました。今回のリリースは、reactivestreams ライブラリの 1 点の変更を除き、rc1 とまったく同じです。

バグの修正

リリース候補 - 2017 年 10 月 18 日

すべての主要アーティファクト(Paging を除く)が 1.0.0-rc1 になりました。

既知の問題や、1.0.0 でリリース予定の新機能は、これ以上はありません1.0.0-rc1 を使用するようにプロジェクトをアップグレードし、1.0.0 の信頼性を高めるためのバトルテストにご協力ください。

動作の変更

  • このリリースにより、Lifecycle.Event#ON_STOPonSaveInstanceState の呼び出し時にディスパッチされるようになりました(以前は、ON_STOP はディスパッチされず、CREATED としてマークされるだけでした)。詳しくは、Lifecycle のドキュメントをご覧ください。

バグの修正

  • Room:

    • Room が最新の xerial アーティファクトに依存するようになりました。このアーティファクトにより、OutOfMemory の問題をコンパイル時に解決できます。b/62473121
    • Query メソッドのアノテーションに @Transaction を使用できるようになりました。 詳しくは、@Transaction のリファレンス ドキュメントをご覧ください。b/65112315
    • Room の StringUtil クラスが公開 API から削除されました(このクラスは公開 API として意図されたものではありませんでした)。
  • Lifecycle:

    • 24 未満の API でアクティビティが部分的にカバーされている場合、LiveData が適切に動作するようになりました。b/65665621

    • 親クラスの OnLifecycleEvent メソッドが適切に呼び出されるようになりました。このメソッドを呼び出せない場合は、コンパイル時に警告が出力されます。b/63474615

    • LifecycleWeakReferenceLifecycleOwner に保持するようになりました。これにより、Lifecycle が通常より長くメモリに保持されている場合に LifecycleOwner のリークを回避できます(これは予防措置であり、Lifecycle をリークしないように注意する必要があります)。

2017 年 10 月 9 日

Paging alpha-3 がリリースされました。これにより、Lifecycle および Room の beta 2 リリースとの互換性が得られるようになります。

バグの修正

  • Paging のドキュメントを改善しました。

2017 年 10 月 5 日

すべての主要アーティファクト(Paging を除く)が beta 2 になりました。 このリリースには、Paging の新しいバージョンは含まれていません。

バグの修正

  • Lifecycle:

    • LiveData がアクティブでない場合でも、LiveDataReactiveStreams でソース パブリッシャーの登録を適切に解除できるようになりました。b/62609183
    • 親クラスが別のモジュールのクラスでも、ライフサイクル イベントが親クラスに適切に反映されるようになりました。b/63474615
    • オブザーバーが登録の作成中に登録を解除しても、LiveData がオブザーバーを適切に処理できるようになりました。b/66337741
    • Java 8 の言語アーティファクトの FullLifecycleObserver を依存関係ツリー内で利用できるようになりました。b/66525578

    • ProGuard の場合、次の行を ProGuard ファイルに追加してください (1.0.0 がリリースされ次第、この操作は不要になります)。

      • -keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
  • Room:

    • @Query メソッドで返された POJO に、クエリ応答内のどの列とも一致しない @NonNull フィールドが含まれている場合、コンパイル時に Room がエラーを出力するようになりました。フィールドが @Nullable の場合、Room は警告のみを出力します。b/67115337
    • Room が新しい OS バージョンのインデックスを検証するようになりました。b/63132683
    • POJO 内に適合するコンストラクタが複数ある場合、Room はデフォルトで引数のないコンストラクタを選択するようになりました。b/67353427
    • 単一の列が Integer または Long の場合、その主キーに Nullable を指定できるようになりました。b/67086876
    • テストモードにおいて、無効化トラッカーが再エントリを適切に処理できるようになりました。b/65471397
    • Room で、列名とテーブル名に含まれている無効な文字をコンパイル時にチェックできるようになりました(無効な文字: `")。b/64749111

2017 年 9 月 21 日

このリリースで、アーキテクチャ コンポーネントのすべてのモジュールが beta 1 以上になりました(新しい Paging ライブラリ alpha 2 を除く)。

これ以上の API の変更は予定していません。予定外の変更が行われる可能性もありますが、1.0.0 が安定するまでは API の変更に対する制約が非常に大きいため、変更が行われる可能性は低いでしょう。

  • LifecycleActivity と LifecycleFragment は、1.0.0 が安定するまでに削除される予定です。サポート ライブラリ 26.1.0 以降を使用している場合は、これらは必要ありません。

アルファ フェーズとは異なり、ベータフェーズの期間は極めて短くなる予定です。

バージョンの変更

  • Lifecycle 拡張機能と Room は現在、beta 1 です。
  • Paging は現在 alpha 2 です。
  • Lifecycle(ランタイム、共通)と Arch Core(共通)に変更はありません。これらのアーティファクトはどちらも、9 月 13 日以降はバージョン 1.0.0 になります。

新しいアーティファクト

  • Lifecycle に common-java8 という新しいアーティファクトが追加されました。このアーティファクトには、DefaultLifecycleObserver という新しいインターフェースが含まれています。さらにこのインターフェースには、Lifecycle のすべてのメソッドで使用できるデフォルトの実装が含まれています。Java 8 言語を使用している場合は、アノテーションよりもこのアーティファクトを優先する必要があります。

    • beta1 のバグにより、新しい common-java8 アーティファクトを使用するには、android.arch.lifecycle:common:1.0.1 モジュールに対する明示的な依存関係を追加する必要があります。この問題は beta2 で修正される予定です。

パッケージの変更

  • android.arch.persistence.room.dbandroid.arch.persistence.db に移動されました。
  • android.arch.persistence.room.db-impl が移動され、名前が android.arch.persistence.db-framework に変更されました。

これらのアーティファクトはどちらも、すでに Room に対する依存関係になっています。そのため、これらを直接使用していた場合を除き、ビルドファイルを変更する必要はありません。

API の変更

  • Room:

    • @ColumnInfo アノテーションが列に対する照合の設定をサポートするようになりました。b/62007004
    • アノテーションに @ColumnInfo@Embedded@Relation のいずれかを使用している場合を除き、transient フィールドはデフォルトで無視されるようになりました。b/62600692
    • 主キーが自動生成された場合を除き、そのアノテーションには @NonNull を使用しなければならなくなりました。b/64292391
      • この変更を行う場合、スキーマの移行が必要になることがあります。ご不便をおかけして申し訳ありません。
    • 新しい便利なアノテーション(@Transaction)が追加されました。このアノテーションは DAO メソッドをオーバーライドしてトランザクション内で実行します。
  • SQLite データベースのサポート:

  • Paging:

    • Paging のドキュメントを改善しました(例を増やし、スレッド アノテーションに関する記述を追加しました)。

バグの修正

  • Room:
    • @Query メソッド内の Kotlin の複数行の文字列が適切に処理されるようになりました。b/65809374
  • Paging:
    • Paging アーティファクトが JUnit に依存しなくなりました。b/65690261

1.0.0 Alpha 9-1 - 2017 年 9 月 13 日

このメジャー リリースで、Core Lifecycle アーティファクト(ランタイム、共通)と Arch Core(共通)が安定バージョンの 1.0.0 になりました。

今回の変更に伴い、Support Library 26.1.0 がこれらのライブラリに依存するようになりました。 また、AppCompatActivitySupport Fragment の両方に LifecycleOwner インターフェースが実装されました。

このリリースは、新しい統合を利用するうえで、サポート ライブラリ 26.1.0 にも依存しています。

新しいライブラリ: Paging

このリリースには Paging という新しいライブラリも含まれています。このライブラリを使用すると、必要に応じて大規模なデータセットをチャンク単位で RecyclerView に簡単に読み込むことができます。Pagingalpha1 としてリリースされており、今後は独自のサイクルでリリースされます。

API の変更

バグの修正

  • アプリのクラスパスにアノテーションが含まれている場合、生成されたクラスには @Generated アノテーションが付けられるようになりました。b/35754819

  • MediatorLiveData のオブザーバーの比較に関するバグを修正しました。b/64413274

  • SQLite WITH クエリが [LiveData] でサポートされるようになりました。[ref-LiveData] b/62510164

  • 複数のテーブルを監視する場合に InvalidationTracker が適切なリストを送信しないバグを修正しました。b/65099281

  • Windows で Room が異なるファイルを生成するバグを修正しました。b/64470691

  • ルート パッケージの LifecycleObserver がサポートされるようになりました。b/62310817

1.0.0 Alpha 9 - 2017 年 8 月 16 日

バグの修正

  • 1 つ目のオブザーバーonChanged メソッドから削除された場合に 2 つ目のオブザーバーが無視される、LiveData のバグを修正しました。b/64285805

1.0.0 Alpha 8 - 2017 年 8 月 1 日

動作の変更

  • プリミティブ型の列、または NonNull アノテーションが付与された列用に NOT NULL 制約が追加されました。これによりテーブルの構造が変更されるため、アーキテクチャ コンポーネント alpha 7 以前をすでに使用していて、データを保持したり、ビルダーの fallbackToDestructiveMigration() メソッドを使用したりする場合は、移行を実装する必要があります。b/62007004

API の変更

1.0.0 Alpha 7 - 2017 年 7 月 26 日

バグの修正

  • LifecycleObserver の再追加を中断させる、LifecycleRegistry removeObserver メソッドの重大なバグを修正しました。

  • カスタム データベース用の InvalidationTracker を修正しました。b/63162311

1.0.0 Alpha 6 - 2017 年 7 月 25 日

動作の変更

  • LifecycleObserver の呼び出し順序が変更されました。以前は、オブザーバーは追加された順に呼び出されていました。たとえば、observer2 より前に追加された observer1 は、observer2 より前に ON_CREATE とその他すべてのイベントを受け取ります。ただしこれは、破棄イベントには当てはまらなくなりました。破棄イベントの場合、オブザーバーは追加されたのとは逆の順序で呼び出されます。 そのため、現在の動作は次のようになります。observer1observer2 より前に追加された場合、ON_CREATE はまず observer1 に送信され、その後で observer2 に送信されます(ON_STARTON_RESUME についても同様)。ただし、ON_PAUSE イベントはまず observer2 に送信され、その後でのみ observer1 に送信されます(ON_STOPON_DESTROY についても同様)。

  • 移行が行われない場合、Room が例外をスローするようになりました。以前は、Room はデータベースをクリアするだけでしたが、現在はクラッシュするようになりました。 デベロッパーはビルダー API を呼び出すことで、クリア動作を有効にできます。b/63872392

API の変更

  • fallbackToDestructiveMigration() メソッドが RoomDatabase.Builder に追加され、移行が見つからない場合にデータベースをクリアできるようになりました。b/63872392

  • アーキテクチャ コンポーネントは Support Library 26.0.0 に依存するようになりました。

バグの修正

  • @Embedded にネストされた @Relation の処理を修正しました。b/63736065

  • 自動インクリメントされる主キーを持つテーブルの移行テストを修正しました。b/63393618

  • DELETE クエリまたは UPDATE クエリを実行する @Queries が引数を正しく受け取るようになりました。b/63872538

  • オーナーのフラグメントがバックスタック内にあり、設定の変更が 2 回行われた場合でも、ViewModel が保持されるようになりました。b/38445801

1.0.0 Alpha 5 - 2017 年 7 月 18 日

API の変更

  • 新しいコールバック メソッドが RoomDatabase.Builder に追加され、データベースを作成したまたは開いたタイミングを監視できるようになりました。b/62699324

  • @Query で RxJava の Maybe または Single を返せるようになりました。b/62231019

RxJava のサポートを Room に追加するには、android.arch.persistence.room:rxjava2 アーティファクトに依存する必要があります。

バグの修正

  • パラメータのない @Delete クエリを修正しました。b/63608092

  • Room での getter と setter の型チェックを修正しました。b/63733651

1.0.0 Alpha 4 - 2017 年 7 月 11 日

API の変更

  • 新しい便利なメソッド(runInTransaction())が RoomDatabase に追加されました。

  • @Insert@Delete@Update の各メソッドで、さまざまなエンティティ タイプのパラメータを使用できるようになりました。b/62682405

バグの修正

  • @Dao メソッドの byte[] の処理を修正しました。b/62460045

  • Room の移行チェックにおいて、大文字と小文字を区別しない比較が使用されるようになりました。b/62875382

  • Lifecycle アーティファクトの ProGuard の設定を修正しました。b/62113696

1.0.0 Alpha 3 - 2017 年 6 月 15 日

API の変更

  • @OnLifecycleEvent が 1 つのイベント パラメータのみをサポートするようになりました。 これは Java 8 のサポートに備えた変更であり、将来には、デフォルトのメソッドでインターフェースに移行できるようになります。この変更に関連して、@OnLifecycleEvent(ON_ANY) アノテーションが付与されたメソッドでのみ、2 つ目の Event 型のパラメータを受け取れるようになりました(1 つ目のパラメータは LifecycleOwner)。詳しくは、Lifecycle のドキュメントをご覧ください。

  • LifecycleActivity クラスと LifecycleFragment クラスが android.arch.lifecycle:extensions アーティファクトに移動されました。

  • MigrationTestHelper は、Context ではなく Instrumentation インスタンスを受け取ることにより、テストアセットからスキーマを読み取って、アプリのコンテキスト内にデータベースを作成できます。

  • @DAO メソッドの @Insert@Delete@Update の各アノテーションで、パラメータの型として Iterable を使用できるようになりました。b/62259820

バグの修正

  • ライフサイクル イベントでオーバーライドされたメソッドが複数回呼び出されることがなくなりました。

  • 複数の IN パラメータが適切に処理されるようになりました。b/62608681

  • @Database インスタンスを受け取るコンストラクタを DAO 抽象クラスに含めることが可能になりました。b/38488747

  • DAO で、type パラメータを含むスーパークラスまたはインターフェースを使用できるようになりました。b/62103620

1.0.0 Alpha 2 - 2017 年 6 月 2 日

API の変更

バグの修正

  • ライフサイクル用の ProGuard ファイル。(b/62113696
  • 型コンバータによるデータの損失。(b/62100716
  • @Insert クエリから Long[] を返せるようになりました。

1.0.0 Alpha 1 - 2017 年 5 月 17 日

MinSDK: 14

一般的な注意事項

  • リリース前にさまざまなテストを実施しましたが、アーキテクチャ コンポーネントは現時点ではアルファ版です。製品版アプリを作成する場合は、API が 1.0 のリリース前に変更されること、API が十分な堅牢性を備えていない可能性があることに注意してください。使用するライブラリの問題をデバッグする自信がない場合は、最初にサイド プロジェクトでアーキテクチャ コンポーネントを試用してみることをおすすめします。

  • すべての人に今すぐ移行することをおすすめしているわけではありません。アーキテクチャ コンポーネントの 1.0 リリースに対応した移行ガイドをお読みください。

既知の制限事項と問題