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
Navigation 1.0.0-alpha09 がリリースされました。このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。
android.arch.navigation:navigation-testing アーティファクトの開発は継続しないこととなりました。このアーティファクトが NavController の内部テストに役立つことは実証済みですが、別のテスト戦略(navigate() が適切に呼び出されることを確認するために NavController インスタンスをモックするなど)を採用することを強くおすすめします。このアプローチは、AndroidDevSummit 2018 での単一アクティビティに関する講演で詳しく説明されています。また、Navigation を使用したテスト用の補足ドキュメントの作成が予定されています。
新機能
menuCategory="secondary"を指定したMenuItemは、NavigationUIのメソッドとともに使用した場合に、バックスタックをポップしなくなりました。b/120104424AppBarConfigurationを使用して、navController.navigateUp()がfalseを返したときに呼び出される代替のOnNavigateUpListenerインスタンスを設定できるようになりました。b/79993862、b/120690961
互換性を破る変更
argType="reference"を指定して<argument>を使用した場合、Navigation が参照を解析しなくなり、代わりに未加工のリソース ID そのものを提供するようになりました。b/111736515setupメソッドに合わせて、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.ResultがListenableWorkerの内部クラスになりました。これにより、Kotlin の最上位のResultクラスとのリファクタリングの競合が防止されます。これは API の互換性を破る変更です。b/120564418
API の互換性を破る変更
androidx.work.ResultがListenableWorkerの内部クラスになりました。
2018 年 12 月 6 日
Paging
Paging 2.1.0-rc01 がリリースされました。2.1.0-beta01 からの変更はありません。
Navigation
Navigation 1.0.0-alpha08 がリリースされました。このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。
新機能
- デスティネーションのラベルを
NavigationUIのメソッドで使用した場合、android:labelの{argName}インスタンスが自動的に正しい引数で置き換えられるようになりました。b/80267266 - Navigation がサポート ライブラリ 28.0.0 に依存するようになりました。b/120293333
互換性を破る変更
OnNavigatedListenerの名前がOnDestinationChangedListenerに変更されました。b/118670572OnDestinationChangedListenerが引数のBundleも渡すようになりました。aosp/837142app:clearTask属性とapp:launchDocument属性、およびそれらに関連するメソッドが削除されました。バックスタックからすべてのデスティネーションを削除するには、グラフのルートを指定してapp:popUpToを使用してください。b/119628354ActivityNavigator.ExtrasがBuilderパターンを使用するようになり、任意のIntent.FLAG_ACTIVITY_フラグを設定する機能が追加されました。aosp/828140NavController.onHandleDeepLinkの名前がhandleDeepLinkに変更されました。aosp/836063- サブクラス化を想定していない多数のクラスとメソッド(
NavOptions、NavInflater、NavDeepLinkBuilder、AppBarConfigurationなど)が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()を削除しました。代わりに、Navigatorでnavigate()を呼び出してください。aosp/830663Navigatorの大幅なリファクタリングが行われ、OnNavigatorNavigatedListenerが不要になりました。代わりに、navigateが移動先のNavDestinationを返すようになりました。NavigatorインスタンスがポップイベントをNavControllerに送信できなくなりました。[戻る] ボタンの押下をインターセプトしてnavController.popBackStack()を呼び出す場合は、OnBackPressedCallbackの使用を検討してください。aosp/833716
バグの修正
- デスティネーションが
<navigation>要素の場合、常にpopUpToが動作するようになりました。b/116831650 - ネストされたグラフを使用した場合に
IllegalArgumentExceptionが発生する各種のバグを修正しました。b/118713731、b/113611083、b/113346925、b/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アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。 PayloadがResultに統合されました。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/119919774WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)のバリアントが追加されました。このメソッドには API 26 が必要です。- Kotlin 拡張メソッドの
Operation.await()とListenableFuture.await()が追加されました。 Operation.getException()の名前がOperation.getThrowable()に変更されました。これは互換性を破る変更です。ContentUriTriggersクラスとそれを参照するメソッドの一般使用ができなくなりました。これは互換性を破る変更です。- API の合理化のために、
WorkManager、WorkContinuation、OneTimeWorkRequestに含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数をArrays.asList(...)でラップしてください。各メソッドの単一引数のバージョンは引き続き使用できます。これは互換性を破る変更です。 WorkContinuation.combine(OneTimeWorkRequest, *)のバリアントを削除しました。これは API を複雑なものにしていましたが、この変更により、既存のcombineメソッドの可読性が高まりました。これは互換性を破る変更です。
バグの修正
- Marshmallow 以前の実装における、実行中タスクのプロセス終了からの復元に関する信頼性が改善されました。
observeForeverで監視されているLiveDataが WorkManager で追跡されるようになりました。これは、Room ライブラリの修正を移植したものです。b/74477406- シリアル化されたオブジェクトがその最大サイズを超えた場合に、
Data.Builder.build()が例外をスローするようになりました。以前は、この例外のスローは、オブジェクトを適切に処理できないバックグラウンド スレッドでのみ行われていました。 - 処理の停止とキャンセルの区別がより明確になりました。
getWorkInfoById()はListenableWorker.onStopped()の実行中、StateをCANCELLEDに設定してWorkInfoを返します。 ListenableWorkerでnullResultがエラーとして処理されるようになりました。b/120362353- SHIELD Tablet で API 24 を実行しているときに
IllegalArgumentExceptionがスローされることがある問題に対し、理論的な修正が行われました。b/119484416
API の互換性を破る変更
- Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、
work-firebaseアーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。 PayloadがResultに統合されました。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 の合理化のために、
WorkManager、WorkContinuation、OneTimeWorkRequestに含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数をArrays.asList(...)でラップしてください。各メソッドの単一引数のバージョンは引き続き使用できます。 WorkContinuation.combine(OneTimeWorkRequest, *)のバリアントを削除しました。これは API を複雑なものにしていましたが、この変更により、既存のcombineメソッドの可読性が高まりました。
2018 年 12 月 4 日
Room
Room 2.1.0-alpha03 のリリースでは、コルーチンのサポートが追加されたほか、いくつかのバグの修正が行われています。
API の変更
@Fts3または@Fts4の FTStokenizerが列挙値ではなく文字列を受け取るようになりました。これにより、カスタムの tokenizer を Room で使用できるようになりました。組み込みの tokenizer は依然として、FtsOptionsで文字列定数として定義されています。b/119234881
新機能
- コルーチン: DAO メソッドを suspend 関数として使用できるようになりました。Room の suspend 関数をサポートするために、新しいアーティファクト(
room-coroutines)がリリースされました。b/69474692 - DAO メソッドのアノテーションに
@Insert、@Delete、@Updateのいずれかを使用することで、戻り値の型としてListenableFutureを使用できるようになりました。b/119418331
バグの修正
- Room が
@EntityのignoredColumnsプロパティの列を使用して、誤ってコンストラクタを見つけようとするバグを修正しました。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をキューに登録できるようになりました。WorkManagerのenqueueメソッドとcancelメソッドのすべてのバリアントが新しいOperation型を返すようになりました。これは互換性を破る変更です。enqueueのすべてのバリアントがWorkRequestの可変長引数を受け取らなくなりました。これは互換性を破る変更です。 代わりにコレクションを使用してください。Arrays.asList()を使用すると、既存のコードを変更できます。この変更は、API サーフェスとメソッドの数を減らすことを目的としています。- 各プロセスで
WorkManagerを複数回initializeしようとすると、IllegalStateExceptionが発生するようになりました。これは互換性を破る変更です。
バグの修正
work-runtime-ktxアーティファクトのWorkRequest.BuilderでListenableWorkerが使用されるようになりました。b/117666259PeriodicWorkの次回の実行時間が将来の時間に設定されるようになりました。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()に変更されました。WorkManagerのenqueueメソッドと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
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/73781068PagedList.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のリファレンス実装はalpha02のFuturesパッケージで提供されます(下記のWorkManagerのセクションをご覧ください)。WorkerはListenableWorkerを拡張したもので、以前と同じように動作します(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/116253486、b/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の具体的な軽量の実装として、ResolvableFutureとAbstractResolvableFutureを使用できるようになりました。
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 の戻り値の型としてCompletable、Single<T>、Maybe<T>を使用できるようになりました。b/63317956 @Relationが付与された不変の型: Room では従来、@Relationアノテーションが付与されたフィールドは設定できるものである必要がありましたが、それらのフィールドをコンストラクタのパラメータとして指定できるようになりました。enableMultiInstanceInvalidation:RoomDatabase.Builderの新しい API です。この API では、1 つのデータベース ファイルで RoomDatabase の複数のインスタンスを無効にできます。この複数インスタンスの無効化メカニズムは、プロセスが複数にわたる場合でも機能します。b/62334005fallbackToDestructiveMigrationOnDowngrade:RoomDatabase.Builderの新しい API です。この API は、ダウングレードが発生した場合にデータベースを自動的に再作成します。b/110416954ignoredColumns:@Entityアノテーションの新しい API です。この API を使用すると、無視するフィールドをフィールド名のリストで指定できます。エンティティで継承されたフィールドを無視する場合に便利です。b/63522075
API / 動作の変更
RoomDatabaseのmCallbackとmDatabaseが@Deprecatedになりました。これらは Room の次のメジャー バージョンで削除される予定です。b/76109329
バグの修正
- 初期化中にデータベースが破損した場合または不正な移行が行われた場合に、Room を正常に復元できない問題を修正しました。b/111504749、b/111519144
- データクラスに含まれる Kotlin の基本コンストラクタが Room で適切に使用されるようになり、フィールドを
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
Navigation 1.0.0-alpha06 のリリースでは、バグの修正と API の変更が行われています。
新機能
- フラグメントとアクティビティの共有要素の遷移のデスティネーションがサポートされるようになりました(b/79665225)。詳細については、Navigation アーキテクチャ コンポーネントを使用したナビゲーションの実装に関するガイドをご覧ください。
NavigationViewのアイテムを選択した場合、下部シートを含むすべてが閉じるようになりました。b/112158843
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 の変更
WorkerFactoryをWorkManager.Configurationの一部として指定することにより、実行時に独自のWorkerインスタンスを作成できるようになりました。代替ファクトリはDefaultWorkerFactoryです。これは、WorkManager の旧バージョンの動作と一致します。WorkerとNonBlockingWorkerのデフォルト コンストラクタを非推奨にしました。新しいコンストラクタ(Worker(Context, WorkerParameters))を使用し、super(Context, WorkerParameters)を呼び出してください。WorkManager の将来のバージョンでデフォルト コンストラクタが削除される予定です。
- Google 社内で新しい
ListenableFutureアーティファクトの使用が開始されました(Guava 依存関係はなし)。今後のリリースで、ListenableFutures が API に導入される予定です。この変更により、NonBlockingWorkerが最終的に再表示されます。 TestDriver.setInitialDelayMet(UUID)とTestDriver.setPeriodDelayMet(UUID)を使用してTestDriverの時限タスクをトリガーする機能が追加されました。b/113360060
互換性を破る変更
WorkerとNonBlockingWorkerのデフォルト コンストラクタを非推奨にしました。できるだけ早く新しいコンストラクタに移行してください。将来のバージョンでデフォルト コンストラクタが削除される予定です。
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 ConstraintTrackerのConcurrentModificationExceptionを修正しました。b/112272753Data.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
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/56WorkRequest.Builder#build()を使用する場合に一意のWorkRequestを作成できるようになりました。b/111408337RescheduleReceiverは、それを必要とする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
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/111455455、b/111455456
バグの修正
- フラグメントの宛先にディープリンクした後に発生する、システムの [戻る] ボタンに関する問題を修正しました。b/111515685
2018 年 7 月 12 日
Navigation
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.indexはsetDemoControllerIndexになります。b/79995048 - 例:
action_show_settingsはactionShowSettingsになります。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ですでにリリース済み)PagedListAdapterとAsyncPagedListDifferが移動イベントを通知できずにクラッシュする問題を修正しました。b/110711937
2018 年 6 月 26 日
Paging
Paging 1.0.1 のリリースでは、runtime のバグが 1 件修正されています。安定性を得るために、1.0.1 を使用することを強くおすすめします。Paging RxJava2 1.0.1 もリリースされています。これは 1.0.0-rc1 とまったく同じです。
バグの修正
PagedListAdapterとAsyncPagedListDifferが移動イベントを通知できずにクラッシュする問題を修正しました。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/109827628、b/109758949、b/80230748
WorkRequestをキューに再登録するとクラッシュする問題を修正しました。b/109572353work-runtime-ktxの依存関係を利用する場合に Kotlin コンパイラで警告が出力される問題を修正しました。WorkManager で
Roomバージョン1.1.1-rc1が使用されるようになりました。
API の変更
WorkContinuation.getStatuses()の同期バージョンであるgetStatusesSync()を追加しました。ユーザーが開始したキャンセルと OS がリクエストした一時的な停止を区別する機能が
Workerに追加されました。Worker.isStopped()は、どのような種類の停止がリクエストされた場合でもtrueを返します。Worker.isCancelled()は、処理が明示的にキャンセルされた場合にtrueを返します。b/79632247API 28 での JobParameters#getNetwork() のサポートが追加されました。これは
Worker.getNetwork()を介して公開されます。Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)が追加されました。これにより、JobSchedulerまたはAlarmManagerに送信可能なジョブの数を適用できるようになります。これは、使用可能なJobSchedulerスロットをWorkManagerがすべて取得するのを防ぐのに役立ちます。Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)が追加されました。これは、WorkManagerが安全に使用できるJobSchedulerジョブ ID の範囲を定義するのに役立ちます。b/79996760Worker.getRunAttemptCount()が特定のWorkerの現在の実行数を返すようになりました。b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)を使用することで、一意のPeriodicWorkRequestをキューに登録できるようになりました。b/79600647WorkManager.cancelAllWork()がすべてのWorkerをキャンセルするようになりました。WorkManagerに依存するライブラリは、このメソッドがWorkManager.getLastCancelAllTimeMillis()を使用して前回呼び出されたタイミングを照会することで、内部状態をさらにクリーンアップすることができます。完了したジョブを内部データベースから削除するための
WorkManager.pruneWork()が追加されました。b/79950952、b/109710758
動作の変更
- すべての
WorkRequestで使用できる暗黙的なタグが追加されました。このタグはWorkerの完全修飾クラス名です。これにより、tagなしで、またはidを使用できない場合でも、WorkRequestを削除できます。b/109572351
互換性を破る変更
Worker.WorkerResultの名前をWorker.Resultに変更しました。Worker.onStoppedにisCancelledパラメータが追加されました。このパラメータは、Workerが明示的にキャンセルされた場合にtrueに設定されます。
2018 年 6 月 7 日
Navigation 1.0.0-alpha02 がリリースされました。
Navigation
動作の変更
FragmentNavigatorはsetReorderingAllowed(true)を使用するようになりました。b/109826220Navigation で、ディープリンク URL から解析された引数が URL デコードされるようになりました。b/79982454
バグの修正
フラグメントのライフサイクル メソッドから Navigation を呼び出す場合に発生する
IllegalStateExceptionを修正しました。b/79632233Navigation がサポート ライブラリ 27.1.1 に依存するようになり、アニメーションを使用する場合のちらつきが修正されました。b/80160903
defaultNavHost="true" を子フラグメントとして使用する場合に発生する
IllegalArgumentExceptionを修正しました。b/79656847NavDeepLinkBuilder を使用する場合に発生する
StackOverflowErrorを修正しました。b/109653065ネストされたグラフに戻る際に発生する
IllegalArgumentExceptionを修正しました。b/80453447launchSingleTopを使用する場合にフラグメントが重なる問題を修正しました。b/79407969Navigation で、ネストされたグラフ用に適切な合成バックスタックを作成できるようになりました。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/79550068Application.onCreate()でWorkerのスケジュール変更を引き起こしていた問題を修正しました。b/79660657OS で許可されるよりも多くの処理のスケジュールを設定できる問題を修正しました。b/79497378
Workerに関連付けられている wake lock のクリーンアップをバックグラウンド スレッドに移動しました。AlarmManagerの実装で、保留中のすべての処理が完了したときに適切にクリーンアップされるようになりました。英語地域以外に影響を及ぼしていたクリーンアップの SQL クエリを修正しました。b/80065360
Dataのfloatに対するサポートが追加されました。b/79443878Data.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.0、Room 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 が用意されており、Observable と Flowable を作成し、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.Builder、LivePagedListBuilder)setMainThreadExecutor()の名前がsetNotifyExecutor()に変更されました(PagedList.Builder)
PagedList.mCallbacksメンバーを非公開に修正しました。
バグの修正
LivePagedListBuilderは、Arch コンポーネントの IO スレッドプールではなく、指定されたエグゼキュータで、最初のPagedListの読み込みをトリガーするようになりました。内部の
DataSourceラッパー(DataSource.mapの実装と、プレースホルダが無効化されたPositionalDataSourceの読み込みの実装に使用される)での無効な動作を修正しました。b/77237534
Room
バグの修正
Room の Rx の
SingleとMaybeの実装における重大なバグを修正しました。このバグは、クエリのリサイクルを早すぎるタイミングで実行し、返されたSingleインスタンスまたはMaybeインスタンスに複数のオブザーバーを追加した場合に問題を引き起こしていました。 b/76031240RoomDatabase.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/74041772Paging: Room の DataSource の実装で、マルチテーブルの依存関係(関係、結合など)を適切に処理できるようになりました。以前はこの依存関係により、新しい結果をトリガーできず、コンパイルを実行できないこともありました。 b/74128314
Lifecycle
1 つの小規模な変更のみ: android.arch.core.util.Function が arch:runtime から arch:common に移動されました。これにより、(下記の paging:common のような)ランタイムの依存関係がなくてもこのメソッドを使用できるようになりました。
lifecycle:common は lifecycle: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 に反映されています(上記を参照)。 - プレースホルダが有効で、合計サイズがページサイズのちょうど倍数である場合に、
PositionalDataSourceでBoundaryCallback.onItemAtEndLoadedが呼び出されないバグを修正しました。
2018 年 3 月 2 日
Room 1.1.0-alpha3 がリリースされました。これは、Room 1.1.0 の最後のアルファ版リリースになる予定です。
API の変更
InvalidationTracker の
addObserverメソッドとremoveObserverメソッドが同期するようになりました。UI 以外のスレッドではこれらのメソッドを呼び出す必要があります。これにより、テーブルを監視しながら一部の競合状態を防止できます。RoomDatabase クラスに新しい
clearAllTables()メソッドが追加されました。このメソッドは、テーブルの内容をすべて切り捨てます。b/63807999クエリ パラメータの数を返す
getArgCount()メソッドがSupportSQLiteQueryに追加されました。b/67038952
バグの修正
@RawQueryが Paging のクエリ用に適切にサポートされるようになりました。b/72600425生成された
Daoクラスの名前が Room によって適切に付けられるようになりました。2 つ以上のDaoインターフェースが同じパッケージ内の内部クラスで、それらの名前が同じ場合でも、名前が重複しなくなりました。b/73536380Pojoの汎用フィールドのタイプが拡張クラスのメンバーとして適切に解析されるようになりました。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->AsyncListDifferListAdapterConfig->AsyncDifferConfigDiffCallback->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-alpha6とcom.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/67757002Guava のサポート:
DAOクエリにおいて、Room が Guava のOptional<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 8とKotlinの両方でサポートされます。b/72416735
バグの修正
使用可能な別のコンストラクタがある場合、
@Relationが付与されたコンストラクタが原因のコンパイル エラーが発生しなくなりました。b/72884434@Queryメソッドで'によってエスケープされるテーブル名が、無効化トラッカーで適切にエスケープされるようになりました。b/72366965Room で 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.0android.arch.lifecycle:viewmodel:1.1.0
API の変更
- サポートが終了した
LifecycleActivityとLifecycleFragmentは削除されました。FragmentActivity、AppCompatActivityを使用するか、Fragmentをサポートしてください。 @NonNullアノテーションがViewModelProvidersとViewModelStoresに追加されました。ViewModelProvidersコンストラクタのサポートが終了しました。その静的メソッドを直接使用してください。ViewModelProviders.DefaultFactoryのサポートが終了しました。ViewModelProvider.AndroidViewModelFactoryを使用してください。- 静的な
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)メソッドが追加され、ViewModelインスタンスやAndroidViewModelインスタンスの作成に適した静的なFactoryを取得できるようになりました。
Room 1.1.0-alpha1
新機能
RawQuery: この新しい API を使用すると、@Daoメソッドで SQL をクエリ パラメータとして受け取ることができます。 b/62103290、b/71458963fallBackToDestructiveMigrationsFrom:RoomDatabase.Builderのこの新しい API を使用すると、よりきめ細かな制御が可能になり、スキーマ バージョンの破壊的な移行を開始できるようになります(fallbackToDestructiveMigration との比較)。 b/64989640- Room で新しい Paging API(alpha-4 以上)のみをサポートするようになりました。非推奨の
LivePagedListProviderのサポートは終了しました。新しい Room アルファ版を使用するには、Pagingalpha-4以上を使用し、LivePagedListProviderからLivePagedListBuilderに切り替える必要があります(まだ切り替えていない場合)。
バグの修正
- Kotlin Kapt の型に対するサポートが改善されました。b/69164099
- フィールドの順序によってスキーマが無効化されることがなくなりました。b/64290754
Paging 1.0.0-alpha5
バグの修正
- プレースホルダが無効になっているときのページ読み込みを修正しました。b/70573345
- IllegalArgumentException のバグを見つけるためのログが追加されました。b/70360195(および Room 側の理論的な修正)
- Javadoc のサンプルコードを修正しました。b/70411933、b/71467637
2017 年 12 月 11 日
Paging alpha4-1 がリリースされました。このリリースでは、Paging alpha 4 の小規模なバグ修正が行われています。
バグの修正
- 無効なデータソースのコールバック パラメータが確認されなくなりました。b/70353706、b/70360195
2017 年 12 月 7 日
Paging alpha4 がリリースされました。このリリースでは、ネットワークのユースケース、およびネットワークとデータベースのユースケースを主なターゲットとして重要な変更と追加が行われています。
API の変更
DataSourceが非同期の API になりました。これにより、ページングをネットワークから直接、簡単に行えるようになりました。- 初期のサイズとデータ用の単一のエントリ ポイント。
- コールバックを保持し、後でディスパッチすることにより、ネットワークの再試行をサポートします。
- Threadsafe コールバックを使用すると、非同期読み込みが可能になり、UI スレッド上にネットワーク対応の単一の
PagedListを作成できるようになります。 - 初期読み込み用のパラメータに関するエラー動作がより明確になりました。
掲載順位に基づくインデックス登録を反映し、プレースホルダが無効になっている場合には画像をタイル表示しないことを示すために、
TiledDataSourceの名前がPositionalDataSourceに変更されました。ネットワークのページ読み込みに埋め込まれた次または前のトークンをサポートするために、
PageKeyedDataSourceが追加されました。また、違いを明確にするために、KeyedDataSourceの名前がItemKeyedDataSourceに変更されました。LivePagedListBuilderとDataSource.FactoryがLivePagedListProviderに代わって使用されるようになりました。このビルダーが提供する機能は同じですが、詳細なカスタマイズが可能になり、デフォルトがよりシンプルになっています。出荷時設定で、DataSource生成コードをLiveDataから独立した状態に維持できます。データベースとネットワークのユースケース用に
PagedList.BoundaryCallbackが追加されました。PagedList.BuilderコンストラクタがDataSourceとPagedList.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 とまったく同じです。
バグの修正
LiveDataReactiveStreamsにより、リアクティブなストリームの仕様を適切に実装できるようになりました。b/67999342
リリース候補 - 2017 年 10 月 18 日
すべての主要アーティファクト(Paging を除く)が 1.0.0-rc1 になりました。
既知の問題や、1.0.0 でリリース予定の新機能は、これ以上はありません。1.0.0-rc1 を使用するようにプロジェクトをアップグレードし、1.0.0 の信頼性を高めるためのバトルテストにご協力ください。
動作の変更
- このリリースにより、
Lifecycle.Event#ON_STOPがonSaveInstanceStateの呼び出し時にディスパッチされるようになりました(以前は、ON_STOPはディスパッチされず、CREATEDとしてマークされるだけでした)。詳しくは、Lifecycle のドキュメントをご覧ください。
バグの修正
Room:
- Room が最新の xerial アーティファクトに依存するようになりました。このアーティファクトにより、
OutOfMemoryの問題をコンパイル時に解決できます。b/62473121 Queryメソッドのアノテーションに@Transactionを使用できるようになりました。 詳しくは、@Transactionのリファレンス ドキュメントをご覧ください。b/65112315- Room の
StringUtilクラスが公開 API から削除されました(このクラスは公開 API として意図されたものではありませんでした)。
- Room が最新の xerial アーティファクトに依存するようになりました。このアーティファクトにより、
Lifecycle:
24 未満の API でアクティビティが部分的にカバーされている場合、
LiveDataが適切に動作するようになりました。b/65665621親クラスの
OnLifecycleEventメソッドが適切に呼び出されるようになりました。このメソッドを呼び出せない場合は、コンパイル時に警告が出力されます。b/63474615Lifecycle が
WeakReferenceを元の状態に戻すようになりました。 LifecycleOwner を使用して、 LifecycleOwner(Lifecycle がメモリに長く保持されている場合) (これは単なる予防措置であり、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/66525578ProGuard の場合、次の行を 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.dbがandroid.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 データベースのサポート:
- データベース構成の API が変更されました。b/65349673、b/65499876
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 がこれらのライブラリに依存するようになりました。 また、AppCompatActivity と Support Fragment の両方に LifecycleOwner インターフェースが実装されました。
このリリースは、新しい統合を利用するうえで、サポート ライブラリ 26.1.0 にも依存しています。
新しいライブラリ: Paging
このリリースには Paging という新しいライブラリも含まれています。このライブラリを使用すると、必要に応じて大規模なデータセットをチャンク単位で RecyclerView に簡単に読み込むことができます。Paging は alpha1 としてリリースされており、今後は独自のサイクルでリリースされます。
API の変更
- 以下のクラスはサポートが終了し、今後のリリースで削除される予定です。
バグの修正
アプリのクラスパスにアノテーションがある場合、生成されたクラスに
@Generatedアノテーションが付けられるようになりました。 b/35754819MediatorLiveData のオブザーバーの比較に関するバグを修正しました。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 の変更
- SupportSQLiteProgram で AutoCloseable が拡張されました。b/63131997
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とその他すべてのイベントを受け取ります。ただしこれは、破棄イベントには当てはまらなくなりました。破棄イベントの場合、オブザーバーは追加されたのとは逆の順序で呼び出されます。 そのため、現在の動作は次のようになります。observer1がobserver2より前に追加された場合、ON_CREATEはまずobserver1に送信され、その後でobserver2に送信されます(ON_STARTとON_RESUMEについても同様)。ただし、ON_PAUSEイベントはまずobserver2に送信され、その後でのみobserver1に送信されます(ON_STOPとON_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/63608092Room での getter と setter の型チェックを修正しました。b/63733651
1.0.0 Alpha 4 - 2017 年 7 月 11 日
API の変更
新しい便利なメソッド(
runInTransaction())が RoomDatabase に追加されました。@Insert、@Delete、@Updateの各メソッドで、さまざまなエンティティ タイプのパラメータを使用できるようになりました。b/62682405
バグの修正
@Daoメソッドのbyte[]の処理を修正しました。b/62460045Room の移行チェックにおいて、大文字と小文字を区別しない比較が使用されるようになりました。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/38488747DAOで、type パラメータを含むスーパークラスまたはインターフェースを使用できるようになりました。b/62103620
1.0.0 Alpha 2 - 2017 年 6 月 2 日
API の変更
InvalidationTracker コールバックが変更済みのテーブル名のリストを受け取るようになりました。b/38468740
SupportSQLiteDatabase クラスの API サーフェスが縮小されました。b/38481640
バグの修正
- ライフサイクル用の ProGuard ファイルを修正しました。b/62113696
- 型コンバータによるデータの消失を修正しました。b/62100716
@InsertクエリからLong[]を返せるようになりました。
1.0.0 Alpha 1 - 2017 年 5 月 17 日
MinSDK: 14
一般的な注意事項
リリース前にさまざまなテストを実施しましたが、アーキテクチャ コンポーネントは現時点ではアルファ版です。製品版アプリを作成する場合は、API が 1.0 のリリース前に変更されること、API が十分な堅牢性を備えていない可能性があることに注意してください。使用するライブラリの問題をデバッグする自信がない場合は、最初にサイド プロジェクトでアーキテクチャ コンポーネントを試用してみることをおすすめします。
すべての人に今すぐ移行することをおすすめしているわけではありません。アーキテクチャ コンポーネントの 1.0 リリースに対応した移行ガイドをお読みください。
既知の制限事項と問題
- サポート ライブラリ内の Lifecycle の
FragmentとActivityCompatには、LifecycleOwnerインターフェースがまだ実装されていません。アーキテクチャ コンポーネントのバージョン 1.0.0 で実装される予定です。