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

このページには、アーキテクチャ コンポーネントのリリースに関する情報(既知の問題、制限事項、一般的な注意事項を含む)が記載されています。アーキテクチャ コンポーネントを使用する前にこのリリースノートをご確認ください。

皆様からのフィードバックは非常に重要です。フィードバックを最終リリースに反映できるよう、公開バグトラッカーで問題を報告してください。

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 が Support Library 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() が削除されました。navigate()Navigator で呼び出すようになりました。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-rxjava2)によって RxWorker が導入されました。これは、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 を返します。
  • ListenableWorker において、null Result がエラーとして処理されるようになりました。b/120362353
  • SHIELD Tablet で API 24 を実行しているときに 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 の setter が公開 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 サーフェスとメソッドの数を減らすことを目的としています。
  • 各プロセスで initialize WorkManager を複数回実行しようとすると、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 の可変長引数を受け取らなくなりました。
  • 各プロセスで initialize WorkManager を複数回実行しようとすると、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() が、次に代わる Kotlin のオプションとして追加されました。PagedList.Config.Builder
  • androidx.paging.PagedList() が次に代わる Kotlin のオプションとして追加されました。PagedList.Builder
  • 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 の変更

  • デフォルトの deprecated コンストラクタをはじめ、以前に Worker したすべてのメソッドとクラスが削除されました。これは 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
  • データクラスに含まれている Kotlin の基本コンストラクタが Room で適切に使用されるようになり、フィールドを vars として宣言する必要がなくなりました。b/105769985

2018 年 10 月 1 日

Room 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 の変更

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

バグの修正

  • NavigationUI.setupWithNavController() を各宛先からビューとともに使用する場合、ビューがリークしなくなりました。b/111961977
  • Navigator の 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 で修正します。

    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 の変更

  • 実行時に独自の Worker インスタンスを作成できるようになりました(WorkerFactoryWorkManager.Configuration の一部として指定)。代替ファクトリは 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
  • Generated 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
  • デバイスのスリープの後に 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 Plugin 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 の変更

  • getStatusesSync()WorkContinuation.getStatuses() の同期バージョン)が追加されました。

  • ユーザーが開始したキャンセルと 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 が Support Library 27.1.1 に依存するようになり、アニメーションを使用する場合のちらつきが修正されました。b/80160903

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

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

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

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

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

  • NavigationUI で、ネストされたグラフを MenuItem として使用する場合に適切なアイテムをハイライト表示できるようになりました。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 パッケージから androix.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 は、アプリ内ナビゲーションを作成するためのフレームワークを提供します。Navigation の初期リリースは 1.0.0-alpha01 です。

新しいライブラリ: WorkManager

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 を取得したりすることができます。

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、Lifecycle 1.1.1 がリリースされました。

Room

API の変更

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

バグの修正

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

  • @RawQuery は、POJO が Embedded フィールドまたは Relation を介して 1 つ以上のエンティティを参照する限り、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 が Support Library リリース 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 としてマークされるだけでした)。詳しくは、ライフサイクルのドキュメントをご覧ください。

バグの修正

  • Room:

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

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

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

    • Lifecycle が通常よりも長期にわたってメモリ内に保持される場合に LifecycleOwner のリークを回避するために、Lifecycle はその LifecycleOwnerWeakReference を保持できるようになりました(これは予防策にすぎません。これまでどおり、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 が安定するまでに削除される予定です。Support Library 26.1.0 以降を使用している場合は、これらは必要ありません。

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

バージョンの変更

  • Lifecycle Extension と 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 インターフェースが実装されました。

このリリースは、新しい統合を利用するうえで、Support Library 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
  • Type Converter によるデータ消失を修正しました。b/62100716
  • @Insert クエリから Long[] を返せるようになりました。

1.0.0 Alpha 1 - 2017 年 5 月 17 日

MinSDK: 14

一般的な注意事項

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

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

既知の制限事項と問題