変更履歴
[3.5.0-beta01] - 2026年5月4日
iosX64およびmacosX64ターゲットを削除しました。 (#3386)- Android の最小 SDK バージョンを 23 に引き上げました。 (#3283)
- JS/WASM において、フルでの Skia デコードへのフォールバックを避けるため、WebP サイズの高速抽出を追加しました。 (#3341)
CacheStrategyの実装において、キャッシュされた失敗レスポンス(例:有効期限切れのキャッシュされた404レスポンス)を更新できない問題を修正しました。 (#3401)- コンパイル SDK を 36 に更新しました。
- Kotlin を 2.3.21 に更新しました。
- Compose を 1.11.0-beta03 に更新しました。
- Okio を 3.17.0 に更新しました。
- Skiko を 0.144.5 に更新しました。
androidx.annotationを 1.10.0 に更新しました。
[3.4.0] - 2026年2月24日
- 新機能: 同じキーに対する実行中のネットワークリクエストの統合をサポートする
ConcurrentRequestStrategyを追加しました。 (#2995, #3326)DeDupeConcurrentRequestStrategyはこの動作を有効にし、待機リクエストが実行中のネットワークリクエストの結果を待てるようにします。- この動作は実験的(experimental)であり、現在はデフォルトで無効になっています。
- 現在、リクエストは常に
diskCacheKeyに基づいて統合されます。
OkHttpNetworkFetcherFactory、KtorNetworkFetcherFactory、およびNetworkFetcher.FactoryがconcurrentRequestStrategyを受け取るようになりました。
- 新機能: JS/WASM において、ブラウザのメインスレッドをブロックしないよう、Web Worker を使用して画像をデコードするようにしました。 (#3305)
- 新機能: Compose を使用しないマルチプラットフォーム・アーティファクトにおいて、Linux ネイティブターゲット(
linuxX64およびlinuxArm64)のサポートを追加しました。 (#3054) - 新機能: 後続のリクエスト間の遷移を改善するため、Compose 専用の API を追加しました。 (#3141, #3175)
ImageRequest.Builder.useExistingImageAsPlaceholderは、プレースホルダーが設定されていない場合に、前の画像からのクロスフェードを有効にします。ImageRequest.Builder.preferEndFirstIntrinsicSizeは、CrossfadePainterが終了側のペインターの固有サイズ(intrinsic size)を優先するようにします。
- 新機能:
coil-gifにImageLoader.Builder.repeatCount(Int)を追加し、アニメーション画像のグローバルな繰り返し回数を設定できるようにしました。 (#3143) - 新機能:
coil-videoにおいて、埋め込み動画サムネイルの優先サポートを追加しました。 (#3107) - 新機能:
coil-coreと共にcoil-lintをパブリッシュし、ImageRequest.Builderブロック内での誤ったkotlin.error()呼び出しを検出する lint チェックを追加しました。 (#3304) - Kotlin の言語バージョンを 2.1 に設定しました。 (#3302)
BitmapFetcherを共通コード(common code)で利用可能にしました。 (#3286)- Android でシングルトンの
ImageLoaderを作成する際、applicationContextを使用するようにしました。 (#3246) - デフォルトで、キャッシュ可能な非2xxの HTTP レスポンス(例:
404)をキャッシュし、キャッシュ不可なレスポンス(例:500)のキャッシュを停止しました。 (#3137, #3139) - OkHttp のレスポンスボディを消費する際の潜在的な競合状態(race condition)を修正しました。 (#3186)
- Android でサイズ超過のビットマップによるクラッシュを防ぐため、
maxBitmapSizeのエッジケースを修正しました。 (#3259) - Kotlin を 2.3.10 に更新しました。
- Compose を 1.9.3 に更新しました。
- Okio を 3.16.4 に更新しました。
- Skiko を 0.9.22.2 に更新しました。
kotlinx-io-okioを 0.9.0 に更新しました。androidx.coreを 1.16.0 に更新しました。androidx.lifecycleを 2.9.4 に更新しました。androidx.exifinterfaceを 1.4.2 に更新しました。
[3.3.0] - 2025年7月22日
- 新機能: アプリがバックグラウンドにある間、Android で
MemoryCache.maxSizeを制限する新しい API を導入しました。ImageLoader.Builder.memoryCacheMaxSizePercentWhileInBackgroundが設定されている場合、アプリがバックグラウンドにある間、ImageLoaderのメモリキャッシュは最大サイズの指定された割合に制限されます。この設定は現在はデフォルトで無効になっています。- アプリがバックグラウンドに移行すると、制限された最大サイズに達するまでメモリキャッシュから画像がトリミング(削除)されます。ただし、最近トリミングされた画像へのメモリキャッシュの弱参照(weak references)は影響を受けません。つまり、画像が他の場所(例:
AsyncImage、ImageViewなど)で現在参照されている場合は、引き続きメモリキャッシュに存在します。 - この API は、バックグラウンドでのメモリ使用量を削減し、アプリが早期に強制終了されるのを防ぎ、ユーザーのデバイスのメモリ負荷を軽減するのに役立ちます。
- 新機能:
SvgDecoderにSvg.Parser引数を追加しました。- これにより、デフォルトの SVG パーサーがニーズに合わない場合に、カスタム SVG パーサーを使用できるようになります。
SvgDecoderにdensity引数を追加し、カスタムの密度倍率を提供できるようにしました。Uriのコピーと変更をサポートするUri.Builderを追加しました。- テストで Coil の
Dispatchers.main.immediate使用をオーバーライドできるようにImageLoader.Builder.mainCoroutineContextを追加しました。 - アニメーション終了時に
start画像の参照が解除されたときにCrossfadePainter.intrinsicSizeが変化する問題を修正しました。これにより、CrossfadeDrawableの動作と一致するようになります。 ImageLoaders.executeBlockingが Java からアクセスできない問題を修正しました。coil-network-ktor3でkotlinx.ioの Okio 相互運用モジュールを使用するようにしました。kotlinx-datetimeを0.7.1に更新しました。- このリリースには、
coil-network-cache-controlモジュールのみに影響するバイナリ互換性のない変更が含まれています。詳細は こちら を参照してください。
- このリリースには、
- Kotlin を 2.2.0 に更新しました。
- Compose を 1.8.2 に更新しました。
- Okio を 3.15.0 に更新しました。
- Skiko を 0.9.4.2 に更新しました。
[3.2.0] - 2025年5月13日
3.1.0 からの変更点:
- 重要: Compose
1.8.0が Java 11 を要求するため、coil-composeとcoil-compose-coreは Java 11 バイトコードが必要になりました。有効にする方法については こちら を参照してください。 AsyncImagePreviewHandlerの関数型コンストラクタが、AsyncImagePainter.State.LoadingではなくAsyncImagePainter.State.Successを返すように変更しました。ConstraintsSizeResolver#size()におけるキャンセル処理を修正しました。- R8 でビルドする際に
PlatformContextが見つからないという警告が出る問題を修正しました。 - デフォルトの
FakeImageLoaderEngineレスポンスが返されたときに、FakeImageLoaderEngineがTransition.Factory.NONEを設定しない問題を修正しました。 ColorImageから実験的(experimental)アノテーションを削除しました。CacheControlCacheStrategyにおいて、ネットワークヘッダーのパースを遅延(lazy)させるようにしました。- 共通コードを共有するため、
CircleCropTransformationとRoundedCornersTransformationをリファクタリングしました。 ExifOrientationStrategyがRESPECT_PERFORMANCEでない場合、内部的にBitmapFactoryを使用するようにフォールバックしました。- Kotlin を 2.1.20 に更新しました。
- Compose を 1.8.0 に更新しました。
- Okio を 3.11.0 に更新しました。
- Skiko を 0.9.4 に更新しました。
- Coroutines を 1.10.2 に更新しました。
accompanist-drawablepainterを 0.37.3 に更新しました。
3.2.0-rc02 からの変更点:
ExifOrientationStrategyがRESPECT_PERFORMANCEでない場合、内部的にBitmapFactoryを使用するようにフォールバックしました。- Compose を 1.8.0 に更新しました。
accompanist-drawablepainterを 0.37.3 に更新しました。
[3.2.0-rc02] - 2025年4月26日
- 非 JVM ターゲットにおいて
KtorNetworkFetcherFactory(Ktor 3) で画像を読み込む際、画像リクエストがClosedByteChannelExceptionで失敗する問題を修正しました。
[3.2.0-rc01] - 2025年4月24日
- 重要: Compose
1.8.0が Java 11 を要求するため、coil-composeとcoil-compose-coreは Java 11 バイトコードが必要になりました。有効にする方法については こちら を参照してください。 AsyncImagePreviewHandlerの関数型コンストラクタが、AsyncImagePainter.State.LoadingではなくAsyncImagePainter.State.Successを返すように変更しました。ConstraintsSizeResolver#size()におけるキャンセル処理を修正しました。- R8 でビルドする際に
PlatformContextが見つからないという警告が出る問題を修正しました。 - デフォルトの
FakeImageLoaderEngineレスポンスが返されたときに、FakeImageLoaderEngineがTransition.Factory.NONEを設定しない問題を修正しました。 ColorImageから実験的(experimental)アノテーションを削除しました。CacheControlCacheStrategyにおいて、ネットワークヘッダーのパースを遅延させるようにしました。- 共通コードを共有するため、
CircleCropTransformationとRoundedCornersTransformationをリファクタリングしました。 coil-network-ktor2とcoil-network-ktor3でkotlinx.ioの Okio 相互運用モジュールを使用するようにしました。- Kotlin を 2.1.20 に更新しました。
- Compose を 1.8.0-rc01 に更新しました。
- Okio を 3.11.0 に更新しました。
- Skiko を 0.9.4 に更新しました。
- Coroutines を 1.10.2 に更新しました。
[3.1.0] - 2025年2月4日
AsyncImageのパフォーマンスを改善しました。- 実行時のパフォーマンスは、コンポーザブルがインスタンス化されるか再利用されるかに応じて 25% から 40% 向上しました。アロケーションも 35% から 48% 削減されました。詳細は こちら を参照してください。
ColorImageを追加し、FakeImageを非推奨にしました。ColorImageは、テストやプレビューでフェイクの値を返すのに役立ちます。FakeImageと同じユースケースを解決しますが、coil-testではなくcoil-coreでより簡単にアクセスできます。
coil-compose-coreのDispatchers.Main.immedateへの依存を削除しました。- これにより、Paparazzi や Roborazzi のスクリーンショットテストで
AsyncImagePainterがImageRequestを同期的に実行しない問題も修正されました。
- これにより、Paparazzi や Roborazzi のスクリーンショットテストで
data:[<mediatype>][;base64],<data>形式の data URI のサポートを追加しました。- GIF のメタデータに含まれるエンコードされた繰り返し回数を使用できるように
AnimatedImageDecoder.ENCODED_LOOP_COUNTを追加しました。 - カスタム拡張をサポートするため、
NetworkRequestにExtrasを追加しました。 DiskCache.Builder.cleanupCoroutineContextを追加し、DiskCache.Builder.cleanupDispatcherを非推奨にしました。- API 29 以上で
android.graphics.ImageDecoderの使用をオプションで無効化できるようにImageLoader.Builder.imageDecoderEnabledを追加しました。 ImageRequestのデータ型に対して登録されたKeyerがない場合に警告をログ出力するようにしました。CrossfadePainterをパブリックにしました。- すべてのマルチプラットフォーム・ターゲットで
Transformationをサポートしました。 CacheControlCacheStrategyでExpiresヘッダーの値として 0 をサポートしました。ContentScaleがNoneとの間で変更された場合に、AsyncImage/SubcomposeAsyncImage/rememberAsyncImageが新しいImageRequestを開始しない問題を修正しました。- Kotlin を 2.1.10 に更新しました。
- 注意: このリリースでは、Kotlin Native を使用する場合、LLVM の更新(11.1.0 から 16.0.0 へ)のため、Kotlin 2.1.0 以上でコンパイルする必要があります。
- Compose を 1.7.3 に更新しました。
androidx.coreを 1.15.0 に更新しました。
[3.0.4] - 2024年11月25日
- Android Studio のプレビューでベクタードローアブルがレンダリングされない問題を修正しました。
- サイズが
maxBitmapSizeを超えるリクエストにおいて、メモリキャッシュがヒットしない可能性がある問題を修正しました。 - Android で
FakeImageがレンダリングされない問題を修正しました。 AsyncImage/rememberAsyncImagePainter/SubcomposeAsyncImageで使用している際、リクエストのTransformationが変更されても新しい画像リクエストが開始されない問題を修正しました。ScaleDrawableとCrossfadeDrawableが tint の状態を尊重しない問題を修正しました。ImageDecoderが部分的な画像ソースをデコードできるようにしました。これはBitmapFactoryの動作と一致します。- デコード後に
Bitmap.prepareToDraw()が呼び出されない問題を修正しました。 - ラスタライズされていない画像に対して
SvgDecoderがisSampled = trueを返さないようにしました。 - メインのイミディエイト・ディスパッチャ(immediate main dispatcher)が利用できない場合、Compose で
Dispatchers.Unconfinedにフォールバックするようにしました。これはプレビューやテスト環境でのみ使用されます。 - Ktor 2 を
2.3.13に更新しました。
[3.0.3] - 2024年11月14日
ImageViewのScaleTypeに基づくImageRequest.scaleの設定を修正しました。DiskCacheがファイルを削除した後にエントリの削除を追跡しないエッジケースを修正しました。- エラーをログ出力する際に
Loggerに throwable を渡すようにしました。 kotlin-stdlib-jdk7およびkotlin-stdlib-jdk8をkotlin-stdlibに置換しないようにしました。
[3.0.2] - 2024年11月9日
- Android でカスタムの
CacheStrategyを指定してOkHttpNetworkFetcherFactoryを呼び出した際のクラッシュを修正しました。 CacheControlCacheStrategyがキャッシュエントリの有効期間(age)を誤って計算する問題を修正しました。- API 28 以上において、
ImageRequest.bitmapConfigがARGB_8888またはHARDWAREの場合にのみ尊重されるケースを修正しました。
[3.0.1] - 2024年11月7日
- クラッシュを修正:ハードウェアビットマップをバックエンドに持つ
BitmapImageに対してImage.toBitmapを呼び出した際のクラッシュを修正しました。 AsyncImageModelEqualityDelegate.DefaultがImageRequest以外のモデルに対して等価性を誤って比較する問題を修正しました。
[3.0.0] - 2024年11月4日
Coil 3.0.0 は、Compose Multiplatform をフルサポートした次のメジャーリリースです。
3.0.0 における改善点と重要な変更の全リストについては、アップグレードガイドを確認してください。
3.0.0-rc02 からの変更点:
- 残っていた非推奨のメソッドを削除しました。
[3.0.0-rc02] - 2024年10月28日
3.x における改善点と重要な変更の全リストについては、アップグレードガイドを確認してください。 3.0.0-rc01 からの変更点:
BlackholeDecoderを追加しました。これにより、ディスクキャッシュのみのプリロード が簡素化されます。ConstraintsSizeResolverとDrawScopeSizeResolverのためのremember関数を追加しました。AsyncImageのパラメータからEqualityDelegateを削除しました。代わりに、LocalAsyncImageModelEqualityDelegateを通じて設定する必要があります。- 親コンポーザブルが
IntrinsicSizeを使用している場合にAsyncImageがレンダリングされない問題を修正しました。 AsyncImagePainterに子ペインターがない場合に、AsyncImageが利用可能な制約(constraints)を埋め尽くしてしまう問題を修正しました。EqualityDelegateが無視されるために、状態が監視されるとrememberAsyncImagePainterが無限に再構成(recomposition)される問題を修正しました。- 特殊文字を含む
File/Pathパスのパースを修正しました。 VideoFrameDecoderでカスタムFileSystem実装を使用できるように修正しました。- Ktor を
3.0.0に更新しました。 androidx.annotationを1.9.0に更新しました。
[3.0.0-rc01] - 2024年10月8日
3.x における改善点と重要な変更の全リストについては、アップグレードガイドを確認してください。 3.0.0-alpha10 からの変更点:
- 破壊的変更:
addLastModifiedToFileCacheKeyをデフォルトで無効にし、リクエストごとに設定できるようにしました。この動作は同じフラグで再度有効にできます。 - 新機能:
Cache-Controlヘッダー のサポートを実装した新しいcoil-network-cache-controlアーティファクトを導入しました。 - 新機能:
SvgDecoder.FactoryにscaleToDensityプロパティを追加しました。このプロパティは、固有の寸法を持つ SVG がデバイスの密度で乗算されることを保証します(Android でのみサポート)。 ExifOrientationPolicyをExifOrientationStrategyに改名しました。- 取得時に共有不可な画像を
MemoryCacheから削除するようにしました。 ConstraintsSizeResolverをパブリックにしました。setSingletonImageLoaderFactoryを安定化しました。coil-network-ktor3で最適化された JVM I/O 関数を復元しました。- mime type のリストに
pdfを追加しました。 - コンパイル SDK を 35 に更新しました。
- Kotlin を 2.0.20 に更新しました。
- Okio を 3.9.1 に更新しました。
[3.0.0-alpha10] - 2024年8月7日
- 破壊的変更:
ImageLoader.Builder.networkObserverEnabledをNetworkFetcherのためのConnectivityCheckerインターフェースに置き換えました。- ネットワークオブザーバーを無効にするには、
KtorNetworkFetcherFactory/OkHttpNetworkFetcherFactoryのコンストラクタにConnectivityChecker.ONLINEを渡します。
- ネットワークオブザーバーを無効にするには、
- 新機能: すべてのプラットフォームで Compose Multiplatform リソース の読み込みをサポートしました。リソースを読み込むには、
Res.getUriを使用します。
AsyncImage(
model = Res.getUri("drawable/image.jpg"),
contentDescription = null,
)ImageLoaderとImageRequestにmaxBitmapSizeプロパティを追加しました。- このプロパティのデフォルトは 4096x4096 で、割り当てられるビットマップの寸法の安全な上限を提供します。これにより、誤って非常に大きな画像を
Size.ORIGINALで読み込んでしまい、メモリ不足(Out of Memory)例外が発生するのを防ぎます。
- このプロパティのデフォルトは 4096x4096 で、割り当てられるビットマップの寸法の安全な上限を提供します。これにより、誤って非常に大きな画像を
- カスタムポリシーをサポートするため、
ExifOrientationPolicyをインターフェースに変更しました。 - Windows のファイルパスにおける
Uriの処理を修正しました。 ImageAPI から@ExperimentalCoilApiを削除しました。- Kotlin を 2.0.10 に更新しました。
[3.0.0-alpha09] - 2024年7月23日
- 破壊的変更:
io.coil-kt.coil3:coil-network-ktorアーティファクトを、Ktor 2.x に依存するio.coil-kt.coil3:coil-network-ktor2に改名しました。さらに、Ktor 3.x に依存するio.coil-kt.coil3:coil-network-ktor3を導入しました。wasmJsのサポートは Ktor 3.x でのみ利用可能です。 - 新機能: 画像リクエストを手動で再開するための
AsyncImagePainter.restart()を追加しました。 NetworkClientおよび関連クラスから@ExperimentalCoilApiを削除しました。- 不必要な
ExtrasやMapのアロケーションを避けるため、ImageRequestを最適化しました。
[2.7.0] - 2024年7月17日
ImageLoader.execute、AsyncImage、SubcomposeAsyncImage、およびrememberAsyncImagePainterのパフォーマンス向上のため、内部のコルーチン使用をわずかに最適化しました。 (#2205)- チャンク化された(chunked)レスポンスに対する重複したネットワーク呼び出しを修正しました。 (#2363)
- Kotlin を 2.0.0 に更新しました。
- Compose UI を 1.6.8 に更新しました。
- Okio を 3.9.0 に更新しました。
[3.0.0-alpha08] - 2024年7月8日
- 破壊的変更:
ImageRequestとImageLoaderのdispatcherメソッドをcoroutineContextに改名しました。例えば、ImageRequest.Builder.dispatcherはImageRequest.Builder.coroutineContextになりました。これは、メソッドが任意のCoroutineContextを受け取れるようになり、Dispatcherが必須ではなくなったためです。 - 修正: 競合状態により発生する可能性があった
IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been appliedを修正しました。- 注意: これにより
Dispatchers.Main.immediateへの緩い依存関係が再導入されました。結果として、JVM ではkotlinx-coroutines-swingへの依存関係を再度追加する必要があります。これがインポートされていない場合、ImageRequestは即座にディスパッチされず、ImageRequest.placeholderの設定やメモリキャッシュからの解決の前に 1 フレームの遅延が発生します。
- 注意: これにより
[3.0.0-alpha07] - 2024年6月26日
- 破壊的変更:
AsyncImagePainterはデフォルトでonDrawを待機せず、代わりにSize.ORIGINALを使用するようになりました。- これにより Roborazzi/Paparazzi との互換性の問題 が修正され、全体的なテストの信頼性が向上します。
onDrawを待機する以前の動作に戻すには、ImageRequest.sizeResolverとしてDrawScopeSizeResolverを設定してください。
- 破壊的変更: マルチプラットフォーム
ImageAPI をリファクタリングしました。特に、asCoilImageはasImageに改名されました。 - 破壊的変更:
AsyncImagePainter.stateがStateFlow<AsyncImagePainter.State>に変更されました。値を監視するにはcollectAsStateを使用してください。これによりパフォーマンスが向上します。 - 破壊的変更:
AsyncImagePainter.imageLoaderとAsyncImagePainter.requestがStateFlow<AsyncImagePainter.Inputs>に統合されました。値を監視するにはcollectAsStateを使用してください。これによりパフォーマンスが向上します。 - 破壊的変更: リソースのシュリンキング(最適化)を妨げるため、
android.resource://example.package.name/drawable/image形式の URI サポートを削除しました。- もしこの機能が引き続き必要な場合は、コンポーネントレジストリに手動で
ResourceUriMapperを含める ことができます。
- もしこの機能が引き続き必要な場合は、コンポーネントレジストリに手動で
- 新機能:
AsyncImagePainterのプレビューレンダリング動作の制御をサポートするため、AsyncImagePreviewHandlerを導入しました。- プレビューの動作をオーバーライドするには
LocalAsyncImagePreviewHandlerを使用します。 - この変更およびその他の
coil-composeの改善の一環として、AsyncImagePainterはデフォルトでImageRequest.placeholderを表示するのではなく、デフォルトでImageRequestを実行しようとするようになりました。ネットワークやファイルを使用するリクエストは、プレビュー環境では失敗することが予想されますが、Android リソースは動作するはずです。
- プレビューの動作をオーバーライドするには
- 新機能: フレームインデックスによる動画画像の抽出をサポートしました。 (#2183)
- 新機能: 任意の
CoroutineDispatcherメソッドへのCoroutineContextの受け渡しをサポートしました。 (#2241)。 - 新機能: JS および WASM JS における弱参照(weak reference)メモリキャッシュをサポートしました。
- Compose において
Dispatchers.Main.immediateにディスパッチしないようにしました。副次的な効果として、JVM でkotlinx-coroutines-swingをインポートする必要がなくなりました。 - パフォーマンス向上のため、Compose で
asyncを呼び出したりディスポーザブルを作成したりしないようにしました(@mlykotom に感謝!)。 (#2205) - 修正:グローバルな
ImageLoaderの extra をOptionsに渡すよう修正しました。 (#2223) - 非 Android ターゲットで
crossfade(false)が動作しない問題を修正しました。 - VP8X フィーチャーフラグのバイトオフセットを修正しました(#2199)。
- 非 Android ターゲットの
SvgDecoderにおいて、描画時に画像をレンダリングするのではなく、ビットマップにレンダリングするように変更しました。これによりパフォーマンスが向上します。- この動作は
SvgDecoder(renderToBitmap)を使用して制御できます。
- この動作は
ScaleDrawableをcoil-gifからcoil-coreに移動しました。- Update Kotlin to 2.0.0.
- Update Compose to 1.6.11.
- Update Okio to 3.9.0.
- Update Skiko to 0.8.4.
- 3.x における重要な変更の全リストについては、アップグレードガイドを確認してください。
[3.0.0-alpha06] - 2024年2月29日
- Skiko を 0.7.93 にダウングレードしました。
- 3.x における重要な変更の全リストについては、アップグレードガイドを確認してください。
[3.0.0-alpha05] - 2024年2月28日
- 新機能:
wasmJsターゲットをサポートしました。 - 非 Android プラットフォームでビットマップをバックエンドに持たない
Imageの描画をサポートするため、DrawablePainterとDrawableImageを作成しました。ImageAPI は実験的(experimental)であり、アルファリリース間で変更される可能性があります。
Modifier.Nodeを実装するようにContentPainterModifierを更新しました。- 修正: コンポーネントのコールバックとネットワークオブザーバーの登録をバックグラウンドスレッドで遅延(lazy)して行うようにしました。これにより、通常メインスレッドで発生していた初期化の遅延が修正されます。
- 修正:
ImageRequestでImageLoader.Builder.placeholder/error/fallbackが使用されない問題を修正しました。 - Update Compose to 1.6.0.
- Update Coroutines to 1.8.0.
- Update Okio to 3.8.0.
- Update Skiko to 0.7.94.
- 3.x における重要な変更の全リストについては、アップグレードガイドを確認してください。
[2.6.0] - 2024年2月23日
rememberAsyncImagePainter、AsyncImage、およびSubcomposeAsyncImageを restartable および skippable にしました。これにより、コンポーザブルの引数のいずれかが変更されない限り再構成(recomposition)を回避でき、パフォーマンスが向上します。modelが再構成をトリガーするかどうかを制御するため、rememberAsyncImagePainter、AsyncImage、およびSubcomposeAsyncImageにオプションのmodelEqualityDelegate引数を追加しました。
Modifier.Nodeを実装するようにContentPainterModifierを更新しました。- 修正: コンポーネントのコールバックとネットワークオブザーバーの登録をバックグラウンドスレッドで遅延して行うようにしました。これにより、通常メインスレッドで発生していた初期化の遅延が修正されます。
- 修正:
ImageRequest.listenerまたはImageRequest.targetが変更された場合でも、rememberAsyncImagePainter、AsyncImage、およびSubcomposeAsyncImageで新しい画像リクエストを再開しないようにしました。 - 修正:
AsyncImagePainterで画像リクエストを 2 回監視しないようにしました。 - Update Kotlin to 1.9.22.
- Update Compose to 1.6.1.
- Update Okio to 3.8.0.
- Update
androidx.collectionto 1.4.0. - Update
androidx.lifecycleto 2.7.0.
[3.0.0-alpha04] - 2024年2月1日
- 破壊的変更:
OkHttpNetworkFetcherFactoryとKtorNetworkFetcherFactoryのパブリック API からLazyを削除しました。 OkHttpNetworkFetcherFactoryにおいて、OkHttpClientではなくCall.Factoryを公開するようにしました。NetworkResponseBodyがByteStringをラップするように変更しました。- Compose を 1.5.12 にダウングレードしました。
- 重要な変更の全リストについては、アップグレードガイドを確認してください。
[3.0.0-alpha03] - 2024年1月20日
- 破壊的変更:
coil-networkをcoil-network-ktorに改名しました。さらに、OkHttp に依存し Ktor エンジンの指定を必要としない新しいcoil-network-okhttpアーティファクトを追加しました。- インポートするアーティファクトに応じて、
KtorNetworkFetcherFactoryまたはOkHttpNetworkFetcherFactoryを使用して手動でFetcher.Factoryを参照できます。
- インポートするアーティファクトに応じて、
- Apple プラットフォームでの
NSUrlの読み込みをサポートしました。 AsyncImageにclipToBoundsパラメータを追加しました。- 重要な変更の全リストについては、アップグレードガイドを確認してください。
[3.0.0-alpha02] - 2024年1月10日
- 破壊的変更:
coil-gif、coil-network、coil-svg、およびcoil-videoのパッケージを更新し、すべてのクラスがそれぞれcoil.gif、coil.network、coil.svg、およびcoil.videoに含まれるようにしました。これにより、他のアーティファクトとのクラス名衝突を回避できます。 - 破壊的変更:
ImageDecoderDecoderをAnimatedImageDecoderに改名しました。 - 新機能:
coil-gif、coil-network、coil-svg、およびcoil-videoのコンポーネントが、各ImageLoaderのComponentRegistryに自動的に追加されるようになりました。- 明確に言うと、
3.0.0-alpha01とは異なり、NetworkFetcher.Factory()をComponentRegistryに手動で追加する必要はありません。io.coil-kt.coil3:coil-network:[version]と Ktor エンジン をインポートするだけで、ネットワーク画像を読み込むことができます。 - これらのコンポーネントを手動で
ComponentRegistryに追加しても安全です。手動で追加されたコンポーネントは、自動的に追加されるコンポーネントよりも優先されます。 - 必要であれば、この動作は
ImageLoader.Builder.serviceLoaderEnabled(false)を使用して無効にできます。
- 明確に言うと、
- 新機能: すべてのプラットフォームで
coil-svgをサポートしました。Android では AndroidSVG が、非 Android プラットフォームでは SVGDOM がバックエンドとして使用されます。 - Coil は内部的に Android の
ImageDecoderAPI を使用するようになりました。これにより、ファイル、リソース、またはコンテンツ URI から直接デコードする際のパフォーマンスが向上します。 - 修正: 複数の
coil3.Uriパースの修正。 - 重要な変更の全リストについては、アップグレードガイドを確認してください。
[3.0.0-alpha01] - 2023年12月30日
- 新機能: Compose Multiplatform をサポートしました。Coil は Android、JVM、iOS、macOS、Javascript をサポートする Kotlin Multiplatform ライブラリになりました。
- Coil の Maven 座標を
io.coil-kt.coil3に、インポートをcoil3に更新しました。これにより、バイナリ互換性の問題を発生させることなく、Coil 3 を Coil 2 と共存させることができます。例えば、io.coil-kt:coil:[version]はio.coil-kt.coil3:coil:[version]になりました。 coil-baseおよびcoil-compose-baseアーティファクトを、Coroutines、Ktor、AndroidX で使用されている命名規則に合わせて、それぞれcoil-coreおよびcoil-compose-coreに改名しました。- 重要な変更の全リストについては、アップグレードガイドを確認してください。
[2.5.0] - 2023年10月30日
- 新機能:
coil-videoでMediaDataSource実装のデコードをサポートするため、MediaDataSourceFetcher.Factoryを追加しました。 (#1795) - ハードウェアビットマップのブロックリストに
SHIFT6mデバイスを追加しました。 (#1812) - 修正: 片方の次元が無制限(unbounded)のサイズを返すペインターへのガードを追加しました。 (#1826)
- 修正: キャッシュされたヘッダーに非 ASCII 文字が含まれている場合、
304 Not Modifiedの後のディスクキャッシュ読み込みが失敗する問題を修正しました。 (#1839) - 修正:
FakeImageEngineがインターセプターチェーンのリクエストを更新しない問題を修正しました。 (#1905) - Update compile SDK to 34.
- Update Kotlin to 1.9.10.
- Update Coroutines to 1.7.3.
- Update
accompanist-drawablepainterto 0.32.0. - Update
androidx.annotationto 1.7.0. - Update
androidx.compose.foundationto 1.5.4. - Update
androidx.coreto 1.12.0. - Update
androidx.exifinterface:exifinterfaceto 1.3.6. - Update
androidx.lifecycleto 2.6.2. - Update
com.squareup.okhttp3to 4.12.0. - Update
com.squareup.okioto 3.6.0.
[2.4.0] - 2023年5月21日
DiskCacheのget/editをopenSnapshot/openEditorに改名しました。AsyncImagePainterでColorDrawableをColorPainterに自動変換しないようにしました。- シンプルな
AsyncImageオーバーロードに@NonRestartableComposableアノテーションを付与しました。 - 修正:
ImageSourceでContext.cacheDirを遅延して呼び出すようにしました。 - 修正:
coil-bomのパブリッシュを修正しました。 - 修正: ハードウェアビットマップが無効な場合、常にビットマップ設定を
ARGB_8888に設定するように修正しました。 - Update Kotlin to 1.8.21.
- Update Coroutines to 1.7.1.
- Update
accompanist-drawablepainterto 0.30.1. - Update
androidx.compose.foundationto 1.4.3. - Update
androidx.profileinstaller:profileinstallerto 1.3.1. - Update
com.squareup.okhttp3to 4.11.0.
[2.3.0] - 2023年3月25日
- 新機能:
FakeImageLoaderEngineを含む新しいcoil-testアーティファクトを導入しました。このクラスは、イメージローダー의 レスポンスをハードコードし、テストにおいて一貫性のある同期的な(メインスレッドからの)レスポンスを保証するのに役立ちます。詳細は こちら を参照してください。 - 新機能:
coil-base(coilの子モジュール) およびcoil-compose-base(coil-composeの子モジュール) に ベースラインプロフィール(baseline profiles) を追加しました。- これにより Coil の実行時パフォーマンスが向上し、アプリでの Coil の使用方法に応じて より良いフレームタイミング が得られます。
- 修正: エンコードされたデータを含む
file://URI のパースを修正しました。 #1601 - 修正: 存在しないディレクトリが渡された場合に、
DiskCacheが最大サイズを正しく計算するように修正しました。 #1620 Coil.resetをパブリック API にしました。 #1506- Java のデフォルトメソッド生成を有効にしました。 #1491
- Update Kotlin to 1.8.10.
- Update
accompanist-drawablepainterto 0.30.0. - Update
androidx.annotationto 1.6.0. - Update
androidx.appcompat:appcompat-resourcesto 1.6.1. - Update
androidx.compose.foundationto 1.4.0. - Update
androidx.coreto 1.9.0. - Update
androidx.exifinterface:exifinterfaceto 1.3.6. - Update
androidx.lifecycleto 2.6.1. - Update
okioto 3.3.0.
[2.2.2] - 2022年10月1日
- イメージローダーの初期化が完全に完了してから、システムコールバックを登録するようにしました。 #1465
- バンディング(階調の縞)を避けるため、API 30+ において
VideoFrameDecoderで優先されるビットマップ設定をセットするようにしました。 #1487 FileUriMapperにおいて#を含むパスのパースを修正しました。 #1466- ディスクキャッシュから非 ASCII ヘッダーを持つレスポンスを読み込む問題を修正しました。 #1468
- アセットのサブフォルダ内にある動画のデコードを修正しました。 #1489
- Update
androidx.annotationto 1.5.0.
[2.2.1] - 2022年9月8日
- 修正:
RoundedCornersTransformationがinputビットマップを適切にスケールするように修正しました。 kotlin-parcelizeプラグインへの依存関係を削除しました。- コンパイル SDK を 33 に更新しました。
- #1423 回避のため、
androidx.appcompat:appcompat-resourcesを 1.4.2 にダウングレードしました。
[2.2.0] - 2022年8月16日
- 新機能: 動画の再生時間に対する割合で動画フレームを指定できるよう、
coil-videoにImageRequest.videoFramePercentを追加しました。 - 新機能:
BitmapFactoryDecoderが EXIF 回転(orientation)データをどのように扱うかを設定するExifOrientationPolicyを追加しました。 - 修正: 未定義の寸法を持つサイズが渡された場合でも
RoundedCornersTransformationで例外をスローしないようにしました。 - 修正: GIF のフレーム遅延を、1バイトの符号付き整数ではなく、2バイトの符号なし整数として読み込むようにしました。
- Update Kotlin to 1.7.10.
- Update Coroutines to 1.6.4.
- Update Compose to 1.2.1.
- Update OkHttp to 4.10.0.
- Update Okio to 3.2.0.
- Update
accompanist-drawablepainterto 0.25.1. - Update
androidx.annotationto 1.4.0. - Update
androidx.appcompat:appcompat-resourcesto 1.5.0. - Update
androidx.coreto 1.8.0.
[2.1.0] - 2022年5月17日
- 新機能:
ByteArrayの読み込みをサポートしました。 (#1202) - 新機能:
ImageRequest.Builder.cssを使用して SVG のカスタム CSS ルールを設定できるようになりました。 (#1210) - 修正:
GenericViewTargetの private メソッドを protected に変更しました。 (#1273) - コンパイル SDK を 32 に更新しました。 (#1268)
[2.0.0] - 2022年5月10日
Coil 2.0.0 はライブラリのメジャーアップデートであり、破壊的変更が含まれています。アップグレード方法については アップグレードガイド を確認してください。
- 新機能:
coil-composeにAsyncImageを導入しました。詳細は ドキュメント を確認してください。
// ネットワークから画像を表示します。
AsyncImage(
model = "https://example.com/image.jpg",
contentDescription = null,
)
// プレースホルダー、円形クロップ、クロスフェードアニメーションを使用してネットワークから画像を表示します。
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data("https://example.com/image.jpg")
.crossfade(true)
.build(),
placeholder = painterResource(R.drawable.placeholder),
contentDescription = stringResource(R.string.description),
contentScale = ContentScale.Crop,
modifier = Modifier.clip(CircleShape)
)- 新機能: パブリックな
DiskCacheAPI を導入しました。- ディスクキャッシュを設定するには
ImageLoader.Builder.diskCacheとDiskCache.Builderを使用します。 - Coil 2.0 では OkHttp の
Cacheを使用すべきではありません。詳細は こちら を参照してください。 Cache-Controlやその他のキャッシュヘッダーは引き続きサポートされます(キャッシュは URL の一致のみをチェックするためVaryヘッダーは除きます)。また、レスポンスコードが [200..300) の範囲内のレスポンスのみがキャッシュされます。- 既存のディスクキャッシュは 2.0 へのアップグレード時にクリアされます。
- ディスクキャッシュを設定するには
- サポートされる最小 API が 21 になりました。
ImageRequestのデフォルトのScaleはScale.FITになりました。- これは、デフォルトの
Scaleを持つ他のクラスとImageRequest.scaleの一貫性を持たせるために変更されました。 ImageViewTargetを持つリクエストのScaleは引き続き自動検出されます。
- これは、デフォルトの
- 画像パイプラインクラスの再構築:
Mapper、Fetcher、およびDecoderは、より柔軟になるようリファクタリングされました。Fetcher.keyは新しいKeyerインターフェースに置き換えられました。Keyerは入力データからキャッシュキーを作成します。Decoderが Okio のファイルシステム API を使用して直接Fileを読み込めるようにするImageSourceを追加しました。
- Jetpack Compose 統合の再構築:
rememberImagePainterとImagePainterは、それぞれrememberAsyncImagePainterとAsyncImagePainterに改名されました。LocalImageLoaderを非推奨にしました。詳細は非推奨メッセージを確認してください。
- 実行時の非 null アサーションの生成を無効にしました。
- Java を使用している場合、非 null アノテーションが付与された引数に null を渡しても、即座に
NullPointerExceptionがスローされなくなりました。Kotlin のコンパイル時の null 安全性により、これが防止されます。 - この変更により、ライブラリのサイズを小さくすることができます。
- Java を使用している場合、非 null アノテーションが付与された引数に null を渡しても、即座に
Sizeは、幅と高さの 2 つのDimension値で構成されるようになりました。Dimensionは正のピクセル値またはDimension.Undefinedのいずれかになります。詳細は こちら を参照してください。BitmapPoolとPoolableViewTargetをライブラリから削除しました。VideoFrameFileFetcherとVideoFrameUriFetcherをライブラリから削除しました。すべてのデータソースをサポートするVideoFrameDecoderを代わりに使用してください。BlurTransformationおよびGrayscaleTransformationはライブラリから削除されました。使用している場合は、コードをプロジェクトにコピーしてください。Transition.transitionを suspend しない関数に変更しました。完了するまでトランジションを suspend する必要がなくなったためです。- 進行中の
BitmapFactoryオペレーションの最大数を制限するbitmapFactoryMaxParallelismのサポートを追加しました。この値はデフォルトで 4 で、UI パフォーマンスを向上させます。 interceptorDispatcher、fetcherDispatcher、decoderDispatcher、およびtransformationDispatcherのサポートを追加しました。- 共通の
ViewTargetロジックを処理するGenericViewTargetを追加しました。 - デフォルトでサポートされるデータ型に
ByteBufferを追加しました。 Disposableをリファクタリングし、基盤となるImageRequestのジョブを公開するようにしました。MemoryCacheAPI を刷新しました。ImageRequest.errorは、ImageRequest.fallbackが null の場合、Targetに設定されるようになりました。Transformation.keyはTransformation.cacheKeyに置き換えられました。- Update Kotlin to 1.6.10.
- Update Compose to 1.1.1.
- Update OkHttp to 4.9.3.
- Update Okio to 3.0.0.
2.0.0-rc03 からの変更点:
Dimension.OriginalをDimension.Undefinedに変換しました。- これにより、サイズシステムにおけるいくつかのエッジケース(例)を修正するため、非ピクセル次元のセマンティクスがわずかに変更されました。
- ContentScale が None の場合、画像を
Size.ORIGINALで読み込むようにしました。 ImageView.loadビルダー引数が最後ではなく最初に適用される問題を修正しました。- レスポンスが変更されていない場合(not modified)、HTTP ヘッダーを結合しない問題を修正しました。
[2.0.0-rc03] - 2022年4月11日
ScaleResolverインターフェースを削除しました。Sizeコンストラクタを関数に変更しました。Dimension.PixelsのtoStringがピクセル値のみになるよう変更しました。SystemCallbacks.onTrimMemoryにおける稀なクラッシュへのガードを追加しました。- Update Coroutines to 1.6.1.
[2.0.0-rc02] - 2022年3月20日
ImageRequestのデフォルトサイズをSize.ORIGINALではなく、現在のディスプレイサイズに戻しました。DiskCache.Builderが実験的(experimental)としてマークされていた問題を修正しました。DiskCacheのメソッドのみが実験的です。- 片方の次元が
WRAP_CONTENTであるImageViewに画像を読み込む際、制限された次元に合わせるのではなく、元のサイズで画像を読み込んでしまうケースを修正しました。 MemoryCache.Key、MemoryCache.Value、およびParameters.Entryからコンポーネント関数(component functions)を削除しました。
[2.0.0-rc01] - 2022年3月2日
1.4.0 からの重要な変更点:
- サポートされる最小 API が 21 になりました。
- Jetpack Compose 統合の再構築。
rememberImagePainterはrememberAsyncImagePainterに改名されました。AsyncImageとSubcomposeAsyncImageのサポートを追加しました。詳細は ドキュメント を確認してください。LocalImageLoaderを非推奨にしました。詳細は非推奨メッセージを確認してください。
- Coil 2.0 は独自のディスクキャッシュ実装を持ち、ディスクキャッシュのために OkHttp に依存しなくなりました。
- ディスクキャッシュを設定するには
ImageLoader.Builder.diskCacheとDiskCache.Builderを使用します。 - Coil 2.0 では OkHttp の
Cacheを使用すべきではありません。書き込み中にスレッドが中断されるとキャッシュが破損する可能性があるためです。 Cache-Controlやその他のキャッシュヘッダーは引き続きサポートされます(キャッシュは URL の一致のみをチェックするためVaryヘッダーは除きます)。また、レスポンスコードが [200..300) の範囲内のレスポンスのみがキャッシュされます。- 既存のディスクキャッシュは 2.0 へのアップグレード時にクリアされます。
- ディスクキャッシュを設定するには
ImageRequestのデフォルトのScaleはScale.FITになりました。- これは、デフォルトの
Scaleを持つ他のクラスとImageRequest.scaleの一貫性を持たせるために変更されました。 ImageViewTargetを持つリクエストのScaleは引き続き自動検出されます。
- これは、デフォルトの
ImageRequestのデフォルトサイズはSize.ORIGINALになりました。- 画像パイプラインクラスの再構築:
Mapper、Fetcher、およびDecoderは、より柔軟になるようリファクタリングされました。Fetcher.keyは新しいKeyerインターフェースに置き換えられました。Keyerは入力データからキャッシュキーを作成します。Decoderが Okio のファイルシステム API を使用して直接Fileを読み込めるようにするImageSourceを追加しました。
- 実行時の non-null アサーションの生成を無効にしました。
- Java を使用している場合、non-null アノテーションが付与されたパラメータに null を渡しても、即座に
NullPointerExceptionがスローされなくなりました。Kotlin のコンパイル時の null 安全性により、これが防止されます。 - この変更により、ライブラリのサイズを小さくすることができます。
- Java を使用している場合、non-null アノテーションが付与されたパラメータに null を渡しても、即座に
Sizeは、幅と高さの 2 つDimension値で構成されるようになりました。Dimensionは正のピクセル値またはDimension.Originalのいずれかになります。BitmapPoolとPoolableViewTargetはライブラリから削除されました。VideoFrameFileFetcherとVideoFrameUriFetcherはライブラリから削除されました。すべてのデータソースをサポートするVideoFrameDecoderを代わりに使用してください。BlurTransformationおよびGrayscaleTransformationはライブラリから削除されました。使用している場合は、コードをプロジェクトにコピーしてください。Transition.transitionを suspend しない関数に変更しました。完了するまでトランジションを suspend する必要がなくなったためです。- 進行中の
BitmapFactoryオペレーションの最大数を制限するbitmapFactoryMaxParallelismのサポートを追加しました。この値はデフォルトで 4 で、UI パフォーマンスを向上させます。 interceptorDispatcher、fetcherDispatcher、decoderDispatcher、およびtransformationDispatcherのサポートを追加しました。- 共通の
ViewTargetロジックを処理するGenericViewTargetを追加しました。 - デフォルトでサポートされるデータ型に
ByteBufferを追加しました。 Disposableをリファクタリングし、基盤となるImageRequestのジョブを公開するようにしました。MemoryCacheAPI を刷新しました。ImageRequest.errorは、ImageRequest.fallbackが null の場合、Targetに設定されるようになりました。Transformation.keyはTransformation.cacheKeyに置き換えられました。- Update Kotlin to 1.6.10.
- Update Compose to 1.1.1.
- Update OkHttp to 4.9.3.
- Update Okio to 3.0.0.
2.0.0-alpha09 からの変更点:
-Xjvm-default=allコンパイラフラグを削除しました。- must-revalidate/e-tag を持つ複数のリクエストが同時に実行された場合に、画像の読み込みに失敗する問題を修正しました。
<svgタグの後に改行文字がある場合にDecodeUtils.isSvgが false を返す問題を修正しました。LocalImageLoader.providesの非推奨メッセージをより明確にしました。- Update Compose to 1.1.1.
- Update
accompanist-drawablepainterto 0.23.1.
[2.0.0-alpha09] - 2022年2月16日
AsyncImageが無効な制約(constraints)を作成する問題を修正しました。 (#1134)AsyncImagePainterにContentScale引数を追加しました。 (#1144)- 画像が正しいサイズで読み込まれることを保証するため、
Imageに設定されているものと同じ値を設定する必要があります。
- 画像が正しいサイズで読み込まれることを保証するため、
ImageRequestのScaleを遅延解決できるようScaleResolverを追加しました。 (#1134)ImageRequest.scaleはImageRequest.scaleResolver.scale()に置き換える必要があります。
- Update Compose to 1.1.0.
- Update
accompanist-drawablepainterto 0.23.0. - Update
androidx.lifecycleto 2.4.1.
[2.0.0-alpha08] - 2022年2月7日
DiskCacheとImageSourceを Okio のFileSystemAPI を使用するように更新しました。 (#1115)
[2.0.0-alpha07] - 2022年1月30日
AsyncImageのパフォーマンスを大幅に向上させ、AsyncImageをAsyncImageとSubcomposeAsyncImageに分割しました。 (#1048)SubcomposeAsyncImageはloading/success/error/contentスロット API を提供し、サブコンポジション(subcomposition)を使用しますが、パフォーマンスは低下します。AsyncImageは、読み込み中やリクエスト失敗時に描画されるPainterを上書きするためのplaceholder/error/fallback引数を提供します。AsyncImageはサブコンポジションを使用せず、SubcomposeAsyncImageよりもはるかに高いパフォーマンスを発揮します。SubcomposeAsyncImage.contentからAsyncImagePainter.State引数を削除しました。必要であればpainter.stateを使用してください。AsyncImageとSubcomposeAsyncImageの両方にonLoading/onSuccess/onErrorコールバックを追加しました。
LocalImageLoaderを非推奨にしました。 (#1101)ImageRequest.tagsのサポートを追加しました。 (#1066)DecodeUtils内のisGif、isWebP、isAnimatedWebP、isHeif、isAnimatedHeifを coil-gif に移動しました。isSvgを coil-svg に追加しました。 (#1117)FetchResultとDecodeResultを非データクラス(non-data classes)に変更しました。 (#1114)- 未使用の
DiskCache.Buildercontext 引数を削除しました。 (#1099) - 元のサイズのビットマップリソースに対するスケーリングを修正しました。 (#1072)
ImageDecoderDecoderでImageDecoderのクローズに失敗する問題を修正しました。 (#1109)- ドローアブルをビットマップに変換する際の不正確なスケーリングを修正しました。 (#1084)
- Update Compose to 1.1.0-rc03.
- Update
accompanist-drawablepainterto 0.22.1-rc. - Update
androidx.appcompat:appcompat-resourcesto 1.4.1.
[2.0.0-alpha06] - 2021年12月24日
- バッファリングや一時ファイルなしでアセット、リソース、およびコンテンツ URI からデコードできるよう、
ImageSource.Metadataを追加しました。 (#1060) AsyncImageが正の制約(positive constraints)を持つまで、画像リクエストの実行を遅延させるようにしました。 (#1028)loading、success、errorがすべて設定されている場合に、AsyncImageでDefaultContentを使用するよう修正しました。 (#1026)- プラットフォームの
LruCacheではなく、androidx のLruCacheを使用するようにしました。 (#1047) - Update Kotlin to 1.6.10.
- Update Coroutines to 1.6.0.
- Update Compose to 1.1.0-rc01.
- Update
accompanist-drawablepainterto 0.22.0-rc. - Update
androidx.collectionto 1.2.0.
[2.0.0-alpha05] - 2021年11月28日
- 重要: いずれかの次元で画像の元のサイズ(original size)を使用できるよう、
Sizeをリファクタリングしました。Sizeは、幅と高さの 2 つのDimension値で構成されるようになりました。Dimensionは正のピクセル値またはDimension.Originalのいずれかになります。- この変更は、一方の次元が固定ピクセル値である場合の、無制限の幅/高さの値(例:
wrap_content、Constraints.Infinity)をより良くサポートするために行われました。
- 修正:
AsyncImageのインスペクションモード(プレビュー)をサポートしました。 - 修正:
imageLoader.memoryCacheが null の場合、SuccessResult.memoryCacheKeyが常にnullになるようにしました。 - コンストラクタに似た
ImageLoader、SizeResolver、およびViewSizeResolverのinvoke関数をトップレベル関数に変換しました。 CrossfadeDrawableの開始および終了ドローアブルをパブリック API にしました。ImageLoaderの placeholder/error/fallback ドローアブルをミューテート(mutate)するようにしました。SuccessResultのコンストラクタにデフォルト引数を追加しました。androidx.collection-ktxではなくandroidx.collectionに依存するようにしました。- Update OkHttp to 4.9.3.
[2.0.0-alpha04] - 2021年11月22日
- 新機能:
coil-composeにAsyncImageを追加しました。AsyncImageはImageRequestを非同期で実行し、結果をレンダリングするコンポーザブルです。AsyncImageは、ほとんどのユースケースでrememberImagePainterを置き換えることを意図しています。- その API は最終確定ではなく、2.0 の最終リリース前に変更される可能性があります。
Imageと同様の API を持ち、Alignment、ContentScale、alpha、ColorFilter、FilterQualityといった同じ引数をサポートします。content、loading、success、error引数を使用して、各AsyncImagePainterの状態ごとに描画される内容を上書きすることをサポートします。rememberImagePainterが持っていた、画像のサイズやスケールの解決に関する設計上の問題を解決します。- 使用例:
// 画像のみを描画します。
AsyncImage(
model = "https://example.com/image.jpg",
contentDescription = null, // `null` を避け、可能な限りローカライズされた文字列を設定してください。
)
// 円形クロップ、クロスフェードを適用し、`loading` 状態を上書きして画像を描画します。
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data("https://example.com/image.jpg")
.crossfade(true)
.build(),
contentDescription = null,
modifier = Modifier
.clip(CircleShape),
loading = {
CircularProgressIndicator()
},
contentScale = ContentScale.Crop
)
// 円形クロップ、クロスフェードを適用し、すべての状態を上書きして画像を描画します。
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data("https://example.com/image.jpg")
.crossfade(true)
.build(),
contentDescription = null,
modifier = Modifier
.clip(CircleShape),
contentScale = ContentScale.Crop
) { state ->
if (state is AsyncImagePainter.State.Loading) {
CircularProgressIndicator()
} else {
AsyncImageContent() // 画像を描画します。
}
}- 重要:
ImagePainterをAsyncImagePainterに、rememberImagePainterをrememberAsyncImagePainterに改名しました。ExecuteCallbackはサポートされなくなりました。AsyncImagePainterがonDrawの呼び出しを待たずに実行されるようにするには、代わりにImageRequest.size(OriginalSize)(または任意のサイズ) を設定してください。rememberAsyncImagePainterにオプションのFilterQuality引数を追加しました。
DiskCacheのクリーンアップ操作にコルーチンを使用し、DiskCache.Builder.cleanupDispatcherを追加しました。ImageLoader.Builder.placeholderを使用して設定されたプレビューの Compose プレビューを修正しました。- より効率的なコードを生成するため、
LocalImageLoader.currentを@ReadOnlyComposableでマークしました。 - Update Compose to 1.1.0-beta03 and depend on
compose.foundationinstead ofcompose.ui. - Update
androidx.appcompat-resourcesto 1.4.0.
[2.0.0-alpha03] - 2021年11月12日
- Android 29+ で音楽のサムネイルを読み込む機能を追加しました。 (#967)
- 修正: 現在のパッケージのリソースを読み込むために
context.resourcesを使用するようにしました。 (#968) - 修正:
clear->disposeの置換式を修正しました。 (#970) - Update Compose to 1.0.5.
- Update
accompanist-drawablepainterto 0.20.2. - Update Okio to 3.0.0.
- Update
androidx.annotationto 1.3.0. - Update
androidx.coreto 1.7.0. - Update
androidx.lifecycleto 2.4.0.lifecycle-common-java8がlifecycle-commonに統合されたため、その依存関係を削除しました。
[2.0.0-alpha02] - 2021年10月24日
- bill of materials (BOM) を含む新しい
coil-bomアーティファクトを追加しました。coil-bomをインポートすることで、バージョンを指定せずに他の Coil アーティファクトに依存できるようになります。
ExecuteCallback.Immediateを使用した際の画像読み込み失敗を修正しました。- Update Okio to 3.0.0-alpha.11.
- これにより、Okio 3.0.0-alpha.11 との互換性の問題も解決されます。
- Update Kotlin to 1.5.31.
- Update Compose to 1.0.4.
[2.0.0-alpha01] - 2021年10月11日
Coil 2.0.0 はライブラリの次のメジャーアップデートであり、新機能、パフォーマンス向上、API の改善、および様々なバグ修正が含まれています。このリリースは、2.0.0 の安定版リリースまで、将来のアルファリリースとバイナリ/ソースの互換性がない可能性があります。
- 重要: サポートされる最小 API が 21 になりました。
- 重要:
-Xjvm-default=allを有効にしました。 - 重要: Coil は独自のディスクキャッシュ実装を持つようになり、ディスクキャッシュのために OkHttp に依存しなくなりました。
- この変更は以下の理由によります:
- 画像のデコード中にスレッドの中断をより良くサポートするため。これにより、画像リクエストが短時間で連続して開始・停止された際のパフォーマンスが向上します。
Fileをバックエンドに持つImageSourceの公開をサポートするため。これにより、デコードにFileが必要な Android API(例:MediaMetadataRetriever)を使用する際の不必要なコピーを回避できます。- ディスクキャッシュファイルへの直接の読み書きをサポートするため。
- ディスクキャッシュを設定するには
ImageLoader.Builder.diskCacheとDiskCache.Builderを使用します。 - Coil 2.0 では OkHttp の
Cacheを使用すべきではありません。書き込み中に中断されると破損する可能性があるためです。 Cache-Controlやその他のキャッシュヘッダーは引き続きサポートされます(キャッシュは URL の一致のみをチェックするためVaryヘッダーは除きます)。また、レスポンスコードが [200..300) の範囲内のレスポンスのみがキャッシュされます。- キャッシュヘッダーのサポートは
ImageLoader.Builder.respectCacheHeadersを使用して有効化・無効化できます。 - 既存のディスクキャッシュは 2.0 へのアップグレード時にクリアされ、再構築されます。
- この変更は以下の理由によります:
- 重要:
ImageRequestのデフォルトのScaleはScale.FITになりました。- これは、デフォルトの
Scaleを持つ他のクラスとImageRequest.scaleの一貫性を持たせるために変更されました。 ImageViewTargetを持つリクエストのスケールは引き続き自動検出されます。
- これは、デフォルトの
- 画像パイプラインクラスの重要な変更:
Mapper、Fetcher、およびDecoderは、より柔軟になるようリファクタリングされました。Fetcher.keyは新しいKeyerインターフェースに置き換えられました。Keyerは入力データからキャッシュキーを作成します。Decoderが直接FileをデコードできるようにするImageSourceを追加しました。
BitmapPoolとPoolableViewTargetはライブラリから削除されました。ビットマッププーリング(bitmap pooling)が削除された理由は以下の通りです:- API 23 以下で最も効果的でしたが、新しい Android リリースでは効果が低くなっていました。
- ビットマッププーリングを削除することで、Coil はパフォーマンス上の利点がある不変(immutable)のビットマップを使用できるようになります。
- ビットマッププールを管理するための実行時のオーバーヘッドがあります。
- ビットマッププーリングは、ビットマップがプーリングに適しているかどうかを追跡する必要があるため、Coil の API に設計上の制約を生んでいました。ビットマッププーリングを削除することで、Coil はより多くの場所(例:
Listener、Disposable)で結果のDrawableを公開できるようになります。さらに、Coil がImageViewをクリアする必要がなくなるため、問題 の発生を防ぐことができます。 - ビットマッププーリングは エラーが発生しやすい です。使用中の可能性があるビットマップを再利用しようとするよりも、新しいビットマップを割り当てる方がはるかに安全です。
MemoryCacheは、より柔軟になるようリファクタリングされました。- 実行時の非 null アサーションの生成を無効にしました。
- Java を使用している場合、非 null アノテーションが付与されたパラメータに null を渡しても、即座に
NullPointerExceptionがスローされなくなりました。Kotlin を使用している場合、実質的に変更はありません。 - この変更により、ライブラリのサイズを小さくすることができます。
- Java を使用している場合、非 null アノテーションが付与されたパラメータに null を渡しても、即座に
VideoFrameFileFetcherとVideoFrameUriFetcherはライブラリから削除されました。すべてのデータソースをサポートするVideoFrameDecoderを代わりに使用してください。- 進行中の
BitmapFactoryオペレーションの最大数を制限するbitmapFactoryMaxParallelismのサポートを追加しました。この値はデフォルトで 4 で、UI パフォーマンスを向上させます。 interceptorDispatcher、fetcherDispatcher、decoderDispatcher、およびtransformationDispatcherのサポートを追加しました。Disposableをリファクタリングし、基盤となるImageRequestのジョブを公開するようにしました。Transition.transitionを suspend しない関数に変更しました。完了するまでトランジションを suspend する必要がなくなったためです。- 共通の
ViewTargetロジックを処理するGenericViewTargetを追加しました。 BlurTransformationおよびGrayscaleTransformationはライブラリから削除されました。- 使用している場合は、コードをプロジェクトにコピーしてください。
ImageRequest.errorは、ImageRequest.fallbackが null の場合、Targetに設定されるようになりました。Transformation.keyはTransformation.cacheKeyに置き換えられました。ImageRequest.ListenerはonSuccessとonErrorでそれぞれSuccessResult/ErrorResultを返すようになりました。- デフォルトでサポートされるデータ型に
ByteBufferを追加しました。 - 複数のクラスから
toString実装を削除しました。 - Update OkHttp to 4.9.2.
- Update Okio to 3.0.0-alpha.10.
[1.4.0] - 2021年10月6日
- 新機能:
ImagePainter.State.SuccessとImagePainter.State.ErrorにImageResultを追加しました。 (#887)- これは
ImagePainter.State.SuccessとImagePainter.State.Errorのシグネチャに対するバイナリ互換性のない変更ですが、これらの API は実験的(experimental)としてマークされています。
- これは
View.isShownがtrueの場合にのみCrossfadeTransitionを実行するようにしました。以前はView.isVisibleのみをチェックしていました。 (#898)- 丸め処理の問題によりスケーリング倍率が 1 をわずかに下回った場合に、メモリキャッシュがヒットしない可能性がある問題を修正しました。 (#899)
- インライン化されていない
ComponentRegistryメソッドをパブリックにしました。 (#925) accompanist-drawablepainterに依存するようにし、Coil のカスタムDrawablePainter実装を削除しました。 (#845)- デザガリング(desugaring)の問題を回避するため、Java 8 のメソッドの使用を削除しました。 (#924)
ImagePainter.ExecuteCallbackを安定した API に昇格させました。 (#927)- compileSdk を 31 に更新しました。
- Update Kotlin to 1.5.30.
- Update Coroutines to 1.5.2.
- Update Compose to 1.0.3.
[1.3.2] - 2021年8月4日
coil-composeがcompose.foundationではなくcompose.uiに依存するようになりました。compose.uiはcompose.foundationのサブセットであるため、より小さな依存関係となります。
- Update Jetpack Compose to 1.0.1.
- Update Kotlin to 1.5.21.
- Update Coroutines to 1.5.1.
- Update
androidx.exifinterface:exifinterfaceto 1.3.3.
[1.3.1] - 2021年7月28日
- Jetpack Compose を
1.0.0に更新しました。安定版リリース おめでとうございます! - Update
androidx.appcompat:appcompat-resourcesto 1.3.1.
[1.3.0] - 2021年7月10日
- 新機能: Jetpack Compose のサポートを追加しました。Accompanist の Coil 統合をベースにしていますが、いくつかの変更が加えられています。詳細は ドキュメント を確認してください。
Transformationにおける自動ビットマップ変換を有効・無効にするallowConversionToBitmapを追加しました。 (#775)- GIF のフレーム遅延がしきい値を下回る場合に書き換えを可能にする
enforceMinimumFrameDelayをImageDecoderDecoderとGifDecoderに追加しました。 (#783)- これはデフォルトでは無効ですが、将来のリリースでデフォルトで有効になる予定です。
ImageLoaderの内部ネットワークオブザーバーを有効化・無効化する機能を追加しました。 (#741)BitmapFactoryDecoderでデコードされたビットマップの密度(density)を修正しました。 (#776)- Licensee が Coil のライセンス URL を見つけられない問題を修正しました。 (#774)
- Update
androidx.core:core-ktxto 1.6.0.
[1.2.2] - 2021年6月4日
- 共有された状態を持つドローアブルをビットマップに変換する際の競合状態を修正しました。 (#771)
ImageLoader.Builder.fallbackがfallbackドローアブルではなくerrorドローアブルを設定してしまう問題を修正しました。ResourceUriFetcherによって返される不正確なデータソースを修正しました。 (#770)- API 26 および 27 において利用可能なファイル記述子がない場合のログチェックを修正しました。
- プラットフォームのベクタードローアブルサポートに関する不正確なバージョンチェックを修正しました。 (#751)
- Update Kotlin (1.5.10).
- Update Coroutines (1.5.0).
- Update
androidx.appcompat:appcompat-resourcesto 1.3.0. - Update
androidx.core:core-ktxto 1.5.0.
[1.2.1] - 2021年4月27日
- 修正:
VideoFrameUriFetcherが http/https URI を処理しようとする問題を修正しました。 (#734
[1.2.0] - 2021年4月12日
- 重要:
SvgDecoderにおいて、SVG のアスペクト比を計算するために SVG の view bounds を使用するようにしました。 (#688)- 以前は、
SvgDecoderは SVG のwidth/height要素を使用してアスペクト比を決定していましたが、これは SVG 仕様に正しく従っていませんでした。 - 以前の動作に戻すには、
SvgDecoderを構築する際にuseViewBoundsAsIntrinsicSize = falseを設定してください。
- 以前は、
- 新機能: 任意のソースから動画フレームをデコードできるよう
VideoFrameDecoderを追加しました。 (#689) - 新機能: MIME タイプだけでなく、ソースの内容を使用した SVG の自動検出をサポートしました。 (#654)
- 新機能:
ImageLoader.newBuilder()を使用したリソースの共有をサポートしました。 (#653)- 重要な点として、これにより
ImageLoaderインスタンス間でのメモリキャッシュの共有が可能になります。
- 重要な点として、これにより
- 新機能:
AnimatedTransformationを使用したアニメーション画像の変換のサポートを追加しました。 (#659) - 新機能: アニメーションドローアブルの開始/終了コールバックのサポートを追加しました。 (#676)
- HEIF/HEIC ファイルの EXIF データのパースを修正しました。 (#664)
- ビットマッププーリングが無効な場合に
EmptyBitmapPool実装を使用しない問題を修正しました。 (#638)- この修正がなくてもビットマッププーリングは適切に無効化されていましたが、より重い
BitmapPool実装が使用されていました。
- この修正がなくてもビットマッププーリングは適切に無効化されていましたが、より重い
MovieDrawable.getOpacityが誤って透明を返すケースを修正しました。 (#682)- デフォルトの一時ディレクトリが存在しない場合へのガードを追加しました。 (#683)
- JVM IR バックエンドを使用してビルドするようにしました。 (#670)
- Update Kotlin (1.4.32).
- Update Coroutines (1.4.3).
- Update OkHttp (3.12.13).
- Update
androidx.lifecycle:lifecycle-common-java8to 2.3.1.
[1.1.1] - 2021年1月11日
- 修正: コルーチンを複数回再開(resume)することによる
IllegalStateExceptionをViewSizeResolver.sizeがスローする可能性がある問題を修正しました。 - 修正: メインスレッドから呼び出された場合に
HttpFetcherが永久にブロックされる問題を修正しました。ImageRequest.dispatcher(Dispatchers.Main.immediate)を使用してメインスレッドで強制的に実行されるリクエストは、ImageRequest.networkCachePolicyがCachePolicy.DISABLEDまたはCachePolicy.WRITE_ONLYに設定されていない限り、NetworkOnMainThreadExceptionで失敗します。
- 動画に回転メタデータがある場合、
VideoFrameFetcherからの動画フレームを回転させるようにしました。 - Update Kotlin (1.4.21).
- Update Coroutines (1.4.2).
- Update Okio (2.10.0).
- Update
androidx.exifinterface:exifinterface(1.3.2).
[1.1.0] - 2020年11月24日
- 重要:
CENTERおよびMATRIXのImageViewスケールタイプをOriginalSizeに解決されるよう変更しました。 (#587)- この変更は、リクエストのサイズが明示的に指定されていない場合の暗黙的なサイズ解決アルゴリズムにのみ影響します。
- この変更は、画像リクエストの視覚的な結果が
ImageView.setImageResource/ImageView.setImageURIと一致することを保証するために行われました。以前の動作に戻すには、リクエスト構築時にViewSizeResolverを設定してください。
- 重要: ビューのレイアウトパラメータが
WRAP_CONTENTの場合、ViewSizeResolverからディスプレイサイズを返すようにしました。 (#562)- 以前は、ビューが完全にレイアウトされている場合にのみディスプレイサイズを返していました。この変更により、典型的な動作がより一貫し、直感的になります。
- アルファ事前乗算(alpha pre-multiplication)を制御する機能を追加しました。 (#569)
CrossfadeDrawableにおいて、正確な固有サイズ(intrinsic size)を優先するサポートを追加しました。 (#585)- バージョンを含む完全な GIF ヘッダーをチェックするようにしました。 (#564)
- 空のビットマッププール実装を追加しました。 (#561)
EventListener.Factoryを関数型インターフェースにしました。 (#575)EventListenerを安定化しました。 (#574)ImageRequest.Builder.placeholderMemoryCacheKeyのStringオーバーロードを追加しました。ViewSizeResolverコンストラクタに@JvmOverloadsを追加しました。- 修正:
CrossfadeDrawableの開始/終了ドローアブルをミューテートするようにしました。 (#572) - 修正: 2回目の読み込み時に GIF が再生されない問題を修正しました。 (#577)
- Kotlin (1.4.20) に更新し、
kotlin-parcelizeプラグインに移行しました。 - Update Coroutines (1.4.1).
[1.0.0] - 2020年10月22日
0.13.0 からの変更点:
Context.imageLoader拡張関数を追加しました。 (#534)ImageLoader.executeBlocking拡張関数を追加しました。 (#537)- シングルトンのイメージローダーを置換した際、以前のイメージローダーをシャットダウンしないようにしました。 (#533)
1.0.0-rc3 からの変更点:
- 修正: ActivityManager が欠落している、または無効である場合へのガードを追加しました。 (#541)
- 修正: OkHttp が失敗したレスポンスをキャッシュできるようにしました。 (#551)
- Update Kotlin to 1.4.10.
- Update Okio to 2.9.0.
- Update
androidx.exifinterface:exifinterfaceto 1.3.1.
[1.0.0-rc3] - 2020年9月21日
- 不安定さのため、
-Xjvm-default=allコンパイラフラグの使用を元に戻しました。- これは以前のリリース候補版(release candidate)からのソース互換性はありますが、バイナリ互換性のない変更です。
Context.imageLoader拡張関数を追加しました。 (#534)ImageLoader.executeBlocking拡張関数を追加しました。 (#537)- シングルトンのイメージローダーを置換した際、以前のイメージローダーをシャットダウンしないようにしました。 (#533)
- AndroidX の依存関係を更新しました:
androidx.exifinterface:exifinterface-> 1.3.0
[1.0.0-rc2] - 2020年9月3日
- このリリースには Kotlin 1.4.0 以上が必要です。
- 0.13.0 に含まれるすべての変更点。
stdlib-jdk8ではなくベースの Kotlinstdlibに依存するようにしました。
[0.13.0] - 2020年9月3日
- 重要: デフォルトで Interceptor チェーンをメインスレッドで開始するようにしました。 (#513)
- これにより、メモリキャッシュがメインスレッドで同期的にチェックされていた
0.11.0以前の動作が概ね復元されます。 0.12.0のようにImageRequest.dispatcher上でメモリキャッシュをチェックする動作に戻すには、ImageLoader.Builder.launchInterceptorChainOnMainThread(false)を設定してください。- 詳細は
launchInterceptorChainOnMainThreadを参照してください。
- これにより、メモリキャッシュがメインスレッドで同期的にチェックされていた
- 修正: デタッチされた Fragment 内の
ViewTargetでリクエストが開始された場合の潜在的なメモリリークを修正しました。 (#518) - 修正: リソース URI を読み込むために
ImageRequest.contextを使用するようにしました。 (#517) - 修正: 後続のリクエストがディスクキャッシュに保存されない原因となる競合状態を修正しました。 (#510)
- 修正: API 18 で
blockCountLongおよびblockSizeLongを使用するように修正しました。
ImageLoaderFactoryを fun インターフェースにしました。Fileから読み込まれた画像のメモリキャッシュキーに、最終更新日時を追加するかどうかを設定できるImageLoader.Builder.addLastModifiedToFileCacheKeyを追加しました。
- Update Kotlin to 1.4.0.
- Update Coroutines to 1.3.9.
- Update Okio to 2.8.0.
[1.0.0-rc1] - 2020年8月18日
- このリリースには Kotlin 1.4.0 以上が必要です。
- Kotlin を 1.4.0 に更新し、
-Xjvm-default=allを有効にしました。- ビルドファイルで
-Xjvm-default=allを有効にする方法については こちら を参照してください。 - これにより、Kotlin のデフォルトインターフェースメソッドに対して Java 8 のデフォルトメソッドが生成されます。
- ビルドファイルで
- 0.12.0 で存在したすべての非推奨メソッドを削除しました。
- Update Coroutines to 1.3.9.
[0.12.0] - 2020年8月18日
- 破壊的変更:
LoadRequestおよびGetRequestはImageRequestに置き換えられました:ImageLoader.execute(LoadRequest)->ImageLoader.enqueue(ImageRequest)ImageLoader.execute(GetRequest)->ImageLoader.execute(ImageRequest)ImageRequestはequals/hashCodeを実装しています。
- 破壊的変更: 多くのクラスが改名、またはパッケージ変更されました:
coil.request.RequestResult->coil.request.ImageResultcoil.request.RequestDisposable->coil.request.Disposablecoil.bitmappool.BitmapPool->coil.bitmap.BitmapPoolcoil.DefaultRequestOptions->coil.request.DefaultRequestOptions
- 破壊的変更:
SparseIntArraySetがパブリック API から削除されました。 - 破壊的変更:
TransitionTargetがViewTargetを実装しなくなりました。 - 破壊的変更:
ImageRequest.Listener.onSuccessのシグネチャが、DataSourceだけでなくImageResult.Metadataを返すように変更されました。 - 破壊的変更:
LoadRequest.aliasKeysのサポートを削除しました。この API はメモリキャッシュへの直接の読み書きアクセスでより良く処理できます。
- 重要: メモリキャッシュ内の値は(メインスレッドから呼び出された場合でも)同期的に解決されなくなりました。
- この変更は、バックグラウンドディスパッチャで
Interceptorを実行することをサポートするためにも必要でした。 - この変更により、より多くの処理がメインスレッド外に移動し、パフォーマンスが向上します。
- この変更は、バックグラウンドディスパッチャで
- 重要:
Mappersがバックグラウンドディスパッチャで実行されるようになりました。副次的な効果として、自動的なビットマップサンプリングは自動的にはサポートされなくなりました。同じ効果を得るには、前のリクエストのMemoryCache.Keyを後続のリクエストのplaceholderMemoryCacheKeyとして使用してください。例はこちら を参照してください。placeholderMemoryCacheKeyAPI は、異なるデータを持つ2つの画像リクエスト(例:小サイズと大サイズの画像の異なる URL)を「リンク」できるため、より自由度が高くなります。
- 重要: Coil の
ImageView拡張関数がcoil.apiパッケージからcoilパッケージに移動しました。- 検索置換を使用して、
import coil.api.load->import coil.loadにリファクタリングしてください。残念ながら、Kotlin のReplaceWith機能を使用してインポートを置換することはできません。
- 検索置換を使用して、
- 重要: ドローアブルが同じ画像でない場合は、標準のクロスフェードを使用するようにしました。
- 重要: API 24+ では不変(immutable)のビットマップを優先するようにしました。
- 重要:
MeasuredMapperは新しいInterceptorインターフェースのために非推奨となりました。MeasuredMapperをInterceptorに変換する方法の例については こちら を参照してください。Interceptorは、より幅広いカスタムロジックを可能にする、制限の少ない API です。
- 重要:
ImageRequest.dataは null 不可になりました。データを設定せずにImageRequestを作成した場合、データとしてNullRequestDataが返されます。
- 新機能:
ImageLoaderのMemoryCacheへの直接の読み書きアクセスのサポートを追加しました。詳細は ドキュメント を参照してください。 - 新機能:
Interceptorのサポートを追加しました。詳細は ドキュメント を参照してください。Coil のInterceptor設計は OkHttp に強くインスパイアされています。 - 新機能:
ImageLoader.Builder.bitmapPoolingEnabledを使用してビットマッププーリングを有効・無効にする機能を追加しました。- ビットマッププーリングは API 23 以下で最も効果的ですが、API 24 以上でも(積極的に
Bitmap.recycleを呼び出すことで)有益な場合があります。
- ビットマッププーリングは API 23 以下で最も効果的ですが、API 24 以上でも(積極的に
- 新機能: デコード中のスレッド中断をサポートしました。
- content-type ヘッダー内の複数セグメントのパースを修正しました。
- より堅牢になるよう、ビットマップの参照カウントを再構築しました。
- API < 19 のデバイスでの WebP デコードを修正しました。
- EventListener API で FetchResult と DecodeResult を公開しました。
- SDK 30 でコンパイルするようにしました。
- Update Coroutines to 1.3.8.
- Update OkHttp to 3.12.12.
- Update Okio to 2.7.0.
- AndroidX の依存関係を更新しました:
androidx.appcompat:appcompat-> 1.2.0androidx.core:core-ktx-> 1.3.1
[0.11.0] - 2020年5月14日
- 破壊的変更: このバージョンでは、既存の非推奨関数をすべて削除しました。
- これにより、アプリの起動時にコードを実行しないよう、Coil の
ContentProviderを削除できるようになります。
- これにより、アプリの起動時にコードを実行しないよう、Coil の
- 破壊的変更:
SparseIntArraySet.sizeを val に変更しました。 (#380) - 破壊的変更:
Parameters.count()を拡張関数に移動しました。 (#403) - 破壊的変更:
BitmapPool.maxSizeを Int にしました。 (#404)
- 重要:
ImageLoader.shutdown()をオプションにしました(OkHttpClientと同様)。 (#385)
- デフォルトのメモリキャッシュサイズを 20% に削減しました。 (#390)
- 以前の動作を復元するには、
ImageLoader作成時にImageLoaderBuilder.availableMemoryPercentage(0.25)を設定してください。
- 以前の動作を復元するには、
- Update Coroutines to 1.3.6.
- Update OkHttp to 3.12.11.
[0.10.1] - 2020年4月26日
- 修正: API 23 以下で大きな PNG をデコードする際の OOM(メモリ不足)を修正しました。 (#372)。
- これにより、PNG ファイルに対する EXIF 回転(orientation)のデコードが無効になります。PNG の EXIF 回転は非常に稀にしか使用されず、PNG EXIF データを読み取るには(たとえ空であっても)ファイル全体をメモリにバッファリングする必要があり、パフォーマンスに悪影響を与えます。
SparseIntArraySetに対する些細な Java 互換性の改善。
- Update Okio to 2.6.0.
[0.10.0] - 2020年4月20日
ハイライト
このバージョンでは、ビルダーを直接使用するスタイルを優先し、ほとんどの DSL API を非推奨にしました。 変更内容は以下の通りです:
kotlin// 0.9.5 (旧) val imageLoader = ImageLoader(context) { bitmapPoolPercentage(0.5) crossfade(true) } val disposable = imageLoader.load(context, "https://example.com/image.jpg") { target(imageView) } val drawable = imageLoader.get("https://example.com/image.jpg") { size(512, 512) } // 0.10.0 (新) val imageLoader = ImageLoader.Builder(context) .bitmapPoolPercentage(0.5) .crossfade(true) .build() val request = LoadRequest.Builder(context) .data("https://example.com/image.jpg") .target(imageView) .build() val disposable = imageLoader.execute(request) val request = GetRequest.Builder(context) .data("https://example.com/image.jpg") .size(512, 512) .build() val drawable = imageLoader.execute(request).drawableio.coil-kt:coilアーティファクトを使用している場合は、Coil.execute(request)を呼び出してシングルトンのImageLoaderでリクエストを実行できます。
ImageLoaderが弱参照(weak reference)メモリキャッシュを持つようになりました。 これは、画像が強参照(strong reference)メモリキャッシュから追い出された後、それらへの弱参照を追跡します。- つまり、画像への強参照がまだどこかに存在する場合、画像は常に
ImageLoaderのメモリキャッシュから返されます。 - 一般的に、これによりメモリキャッシュはより予測可能になり、ヒット率が向上します。
- この動作は
ImageLoaderBuilder.trackWeakReferencesで有効化・無効化できます。
- つまり、画像への強参照がまだどこかに存在する場合、画像は常に
動画ファイルから特定のフレームをデコードするための新しいアーティファクト、
io.coil-kt:coil-videoを追加しました。詳細はこちら。メトリクスを追跡するための新しい EventListener API を追加しました。
シングルトンの初期化を簡素化するために、
Applicationで実装できる ImageLoaderFactory を追加しました。
フルリリースノート
- 重要: DSL 構文を非推奨にし、ビルダー構文を優先するようにしました。 (#267)
- 重要:
CoilおよびImageLoaderの拡張関数を非推奨にしました。 (#322) - 破壊的変更:
ImageLoader.execute(GetRequest)からシールされたRequestResult型を返すようにしました。 (#349) - 破壊的変更:
ExperimentalCoilをExperimentalCoilApiに改名しました。@Experimentalから@RequiresOptInに移行しました。 (#306) - 破壊的変更:
CoilLoggerをLoggerインターフェースに置き換えました。 (#316) - 破壊的変更: destWidth/destHeight を dstWidth/dstHeight に改名しました。 (#275)
- 破壊的変更:
MovieDrawableのコンストラクタパラメータを再配置しました。 (#272) - 破壊的変更:
Request.Listenerのメソッドが、データではなく完全なRequestオブジェクトを受け取るようになりました。 - 破壊的変更:
GetRequestBuilderコンストラクタでContextが必須になりました。 - 破壊的変更:
Requestのいくつかのプロパティが nullable になりました。 - 動作変更: デフォルトでキャッシュキーにパラメータ値を含めるようにしました。 (#319)
- 動作変更:
Request.Listener.onStart()のタイミングをTarget.onStart()の直後に呼び出されるよう微調整しました。 (#348)
- 新機能:
WeakMemoryCache実装を追加しました。 (#295) - 新機能: 動画フレームのデコードをサポートする
coil-videoを追加しました。 (#122) - 新機能:
EventListenerを導入しました。 (#314) - 新機能:
ImageLoaderFactoryを導入しました。 (#311) - 新機能: Android 11 でアニメーション HEIF 画像シーケンスをサポートしました。 (#297)
- 新機能: Java 互換性を向上させました。 (#262)
- 新機能: デフォルトの
CachePolicy設定をサポートしました。 (#307) - 新機能: デフォルトの
Bitmap.Config設定をサポートしました。 (#342) - 新機能: 単一のメモリキャッシュアイテムをクリアするための
ImageLoader.invalidate(key)を追加しました。 (#55) - 新機能: キャッシュされた画像が再利用されない理由を説明するデバッグログを追加しました。 (#346)
- 新機能: get リクエストに対して
errorおよびfallbackドローアブルをサポートしました。
- 修正: Transformation が入力ビットマップのサイズを縮小した際に、メモリキャッシュがヒットしない問題を修正しました。 (#357)
- 修正: BlurTransformation において、半径が RenderScript の最大値以下であることを保証するようにしました。 (#291)
- 修正: 高色深度(high colour depth)画像のデコードを修正しました。 (#358)
- 修正: Android 11 以上で
ImageDecoderDecoderのクラッシュ回避策を無効化しました。 (#298) - 修正: pre-API 23 での EXIF データ読み込み失敗を修正しました。 (#331)
- 修正: Android R SDK との不整合を修正しました。 (#337)
- 修正:
ImageViewが一致するSizeResolverを持っている場合にのみ、不正確なサイズ(inexact size)を有効にするように修正しました。 (#344) - 修正: キャッシュされた画像が、要求されたサイズから最大1ピクセルずれることを許容するようにしました。 (#360)
- 修正: ビューが可視でない場合にクロスフェードトランジションをスキップするようにしました。 (#361)
CoilContentProviderを非推奨にしました。 (#293)- いくつかの
ImageLoaderメソッドに@MainThreadアノテーションを付与しました。 - ライフサイクルが現在開始されている場合、
LifecycleCoroutineDispatcherを作成しないようにしました。 (#356) OriginalSize.toString()に完全なパッケージ名を使用するようにしました。- ソフトウェアビットマップをデコードする際に事前割り当て(preallocate)を行うようにしました。 (#354)
- Update Kotlin to 1.3.72.
- Update Coroutines to 1.3.5.
- Update OkHttp to 3.12.10.
- Update Okio to 2.5.0.
- AndroidX の依存関係を更新しました:
androidx.exifinterface:exifinterface-> 1.2.0
[0.9.5] - 2020年2月6日
- 修正: ハードウェアアクセラレーションが有効かチェックする前に、ビューがアタッチされていることを保証するようにしました。これにより、ハードウェアビットマップのリクエストがメモリキャッシュをミスするケースが修正されます。
- AndroidX の依存関係を更新しました:
androidx.core:core-ktx-> 1.2.0
[0.9.4] - 2020年2月3日
- 修正: ImageDecoderDecoder において、ダウンサンプリング時にアスペクト比を尊重するようにしました。@zhanghai に感謝。
- 以前は、キャッシュされた設定(config)がリクエストで指定された設定以上であれば、メモリキャッシュからビットマップが返されていました。例えば、
ARGB_8888ビットマップをリクエストした場合、メモリキャッシュからRGBA_F16ビットマップが返される可能性がありました。今後は、キャッシュされた設定と要求された設定が等しくなければなりません。 CrossfadeDrawableおよびCrossfadeTransitionのscaleとdurationMillisをパブリックにしました。
[0.9.3] - 2020年2月1日
- 修正: 子ドローアブルが中央に配置されるよう、
ScaleDrawable内部で子ドローアブルを平行移動するようにしました。 - 修正: GIF や SVG が境界を完全に埋めないケースを修正しました。
HttpUrl.get()の呼び出しをバックグラウンドスレッドに遅延させるようにしました。- BitmapFactory のビットマップ null エラーメッセージを改善しました。
- ハードウェアビットマップのブラックリストに 3 つのデバイスを追加しました。 (#264)
- AndroidX の依存関係を更新しました:
androidx.lifecycle:lifecycle-common-java8-> 2.2.0
[0.9.2] - 2020年1月19日
- 修正: pre-API 19 デバイスでの GIF デコードを修正しました。@mario に感謝。
- 修正: ラスタライズされたベクタードローアブルがサンプリング済み(sampled)としてマークされない問題を修正しました。
- 修正: Movie の寸法が <= 0 の場合に例外をスローするようにしました。
- 修正: メモリキャッシュイベントに対して CrossfadeTransition が再開されない問題を修正しました。
- 修正: 許可されていない場合に、すべてのターゲットメソッドにハードウェアビットマップを返さないようにしました。
- 修正: MovieDrawable がその境界の中央に配置されない問題を修正しました。
- CrossfadeDrawable からの自動スケーリングを削除しました。
BitmapPool.trimMemoryをパブリックにしました。- AnimatedImageDrawable を境界いっぱいに広げるため、
ScaleDrawableでラップするようにしました。 RequestBuilder.setParameterに@JvmOverloadsを追加しました。- view box が設定されていない場合に、SVG の view box をそのサイズに設定するようにしました。
- 状態とレベルの変更を CrossfadeDrawable の子に渡すようにしました。
- OkHttp を 3.12.8 に更新しました。
[0.9.1] - 2019年12月30日
- 修正:
LoadRequestBuilder.crossfade(false)を呼び出した際のクラッシュを修正しました。
[0.9.0] - 2019年12月30日
- 破壊的変更:
Transformation.transformにSizeパラメータが含まれるようになりました。これは、Targetのサイズに基づいて出力Bitmapのサイズを変更する transformation をサポートするためです。transformation を持つリクエストは、画像サンプリング からも除外されるようになりました。 - 破壊的変更: 任意のタイプの
DrawableにTransformationが適用されるようになりました。以前は、入力DrawableがBitmapDrawableでない場合、Transformationはスキップされていました。今後は、Transformationを適用する前にDrawableがBitmapにレンダリングされます。 - 破壊的変更:
ImageLoader.loadにnullデータを渡すとエラーとして扱われ、データがnullの場合にfallbackドローアブルを設定できるよう、Target.onErrorおよびRequest.Listener.onErrorがNullRequestDataExceptionと共に呼び出されるようになりました。以前はリクエストが黙って無視されていました。 - 破壊的変更:
RequestDisposable.isDisposedがvalになりました。
- 新機能: カスタムトランジションをサポートしました。詳細はこちら。API が検討中であるため、トランジションは実験的(experimental)としてマークされています。
- 新機能:
LoadRequestの進行中に suspend できるようRequestDisposable.awaitを追加しました。 - 新機能: リクエストデータが null の際に
fallbackドローアブルを設定できるようサポートしました。 - 新機能:
Precisionを追加しました。これにより、スケーリングをサポートするターゲット(例:ImageViewTarget)に対してスケーリングの最適化を可能にしつつ、出力Drawableのサイズを正確にします。詳細は ドキュメント を参照してください。 - 新機能: 複数のキャッシュキーの一致をサポートするため、
RequestBuilder.aliasKeysを追加しました。
- 修正: RequestDisposable をスレッドセーフにしました。
- 修正:
RoundedCornersTransformationにおいて、ターゲットのサイズにクロップしてから角を丸めるようにしました。 - 修正:
CircleCropTransformationにおいて、中央からクロップするようにしました。 - 修正: ハードウェアビットマップ・ブラックリスト にいくつかのデバイスを追加しました。
- 修正: Drawable を Bitmap に変換する際のアスペクト比を維持するようにしました。
- 修正:
Scale.FITにおいて、メモリキャッシュがミスする可能性を修正しました。 - 修正: Parameters の反復順序が確定的(deterministic)であることを保証するようにしました。
- 修正: Parameters および ComponentRegistry 作成時の防御的コピー(defensive copy)を行うようにしました。
- 修正: RealBitmapPool の maxSize が >= 0 であることを保証するようにしました。
- 修正: CrossfadeDrawable がアニメーション中でない、または終了している場合に開始ドローアブルを表示するようにしました。
- 修正: 固有サイズ(intrinsic size)が未定義の子に対応するよう CrossfadeDrawable を調整しました。
- 修正:
MovieDrawableが正しくスケーリングされない問題を修正しました。
- Update Kotlin to 1.3.61.
- Update Kotlin Coroutines to 1.3.3.
- Update Okio to 2.4.3.
- Update AndroidX dependencies:
androidx.exifinterface:exifinterface-> 1.1.0
[0.8.0] - 2019年10月22日
- 破壊的変更:
SvgDrawableが削除されました。代わりに、SvgDecoderによって SVG がBitmapDrawableに事前レンダリングされるようになりました。これにより、SVG のメインスレッドでのレンダリング負荷が大幅に軽減されます。また、SvgDecoderのコンストラクタでContextが必須になりました。 - 破壊的変更:
SparseIntArraySet拡張関数がcoil.extensionパッケージに移動しました。
- 新機能: リクエストごとのネットワークヘッダー設定をサポートしました。詳細はこちら。
- 新機能: 画像パイプラインを通じてカスタムデータを渡すための新しい
ParametersAPI を追加しました。 - 新機能: RoundedCornersTransformation において、角ごとに異なる半径の設定をサポートしました。@khatv911 に感謝。
- 新機能: リソースを積極的に解放できるよう
ImageView.clear()を追加しました。 - 新機能: 他のパッケージからのリソース読み込みをサポートしました。
- 新機能: 計測時にビューのパディングを差し引くかどうかを設定できるよう、ViewSizeResolver に
subtractPadding属性を追加しました。 - 新機能: HttpUrlFetcher の MIME タイプ検出を改善しました。
- 新機能: MovieDrawable と CrossfadeDrawable に Animatable2Compat サポートを追加しました。
- 新機能: GIF の繰り返し回数を設定できるよう、
RequestBuilder<*>.repeatCountを追加しました。 - 新機能: BitmapPool の作成をパブリック API に追加しました。
- 新機能: Request.Listener のメソッドに
@MainThreadアノテーションを付与しました。
- 修正: テスト用に CoilContentProvider を可視化しました。
- 修正: リソースキャッシュキーにナイトモードを含めるようにしました。
- 修正: ImageDecoder のネイティブクラッシュを回避するため、一時的にソースをディスクに書き込むようにしました。
- 修正: 連絡先の表示写真 URI を正しく処理するようにしました。
- 修正: CrossfadeDrawable の子に tint を渡すようにしました。
- 修正: ソースを閉じていない複数の箇所を修正しました。
- 修正: 不完全または壊れたハードウェアビットマップ実装を持つデバイスのブラックリストを追加しました。
- SDK 29 でコンパイルするようにしました。
- Update Kotlin Coroutines to 1.3.2.
- Update OkHttp to 3.12.6.
- Update Okio to 2.4.1.
coil-baseにおいてappcompat-resourcesをcompileOnlyからimplementationに変更しました。
[0.7.0] - 2019年9月8日
- 破壊的変更:
ImageLoaderBuilder.okHttpClient(OkHttpClient.Builder.() -> Unit)はImageLoaderBuilder.okHttpClient(() -> OkHttpClient)になりました。また、初期化子(initializer)はバックグラウンドスレッドで遅延して呼び出されるようになりました。カスタムのOkHttpClientを設定する場合は、ディスクキャッシュを有効にするためにOkHttpClient.cacheを設定する必要があります。 カスタムのOkHttpClientを設定しない場合、Coil はデフォルトでディスクキャッシュが有効なOkHttpClientを作成します。デフォルトの Coil キャッシュはCoilUtils.createDefaultCache(context)を使用して作成できます。例:
val imageLoader = ImageLoader(context) {
okHttpClient {
OkHttpClient.Builder()
.cache(CoilUtils.createDefaultCache(context))
.build()
}
}- 破壊的変更:
Fetcher.keyにデフォルト実装がなくなりました。 - 破壊的変更: 以前は、最初に適用可能な
Mapperのみが呼び出されていました。今後は、適用可能なすべてのMapperが呼び出されます。API の変更はありません。 - 破壊的変更: 些細な名前付きパラメータの改名:
url->uri、factory->initializer。
- 新機能: SVG の自動デコードをサポートする
SvgDecoderを持つcoil-svgアーティファクトを追加しました。AndroidSVG を使用しています。@rharter に感謝。 - 新機能:
load(String)およびget(String)が、サポートされている任意の Uri スキームを受け入れるようになりました。例:imageView.load("file:///path/to/file.jpg")が可能になりました。 - 新機能:
OkHttpClientの代わりにCall.Factoryを使用するよう ImageLoader をリファクタリングしました。これにより、ImageLoaderBuilder.okHttpClient { OkHttpClient() }を使用してネットワークリソースを遅延初期化できるようになります。@ZacSweers に感謝。 - 新機能: リクエストに対して明示的にデコーダーを設定するための
RequestBuilder.decoder。 - 新機能: ImageLoader に対してデフォルトでハードウェアビットマップを有効・無効にする
ImageLoaderBuilder.allowHardware。 - 新機能: ImageDecoderDecoder におけるソフトウェアレンダリングのサポート。
- 修正: ベクタードローアブルの読み込みに関する複数のバグを修正しました。
- 修正: WRAP_CONTENT の View 寸法をサポートしました。
- 修正: 8192 バイトより長い EXIF データのパースをサポートしました。
- 修正: クロスフェード時にアスペクト比が異なるドローアブルを引き伸ばさないように修正しました。
- 修正: 例外によりネットワークオブザーバーの登録に失敗する場合へのガードを追加しました。
- 修正: MovieDrawable における 0 除算エラーを修正しました。@R12rus に感謝。
- 修正: ネストされた Android アセットファイルをサポートしました。@JaCzekanski に感謝。
- 修正: Android O および O_MR1 でファイル記述子が不足する場合へのガードを追加しました。
- 修正: メモリキャッシュを無効にした際のクラッシュを修正しました。@hansenji に感謝。
- 修正: Target.cancel が常にメインスレッドから呼び出されることを保証するようにしました。
- Update Kotlin to 1.3.50.
- Update Kotlin Coroutines to 1.3.0.
- Update OkHttp to 3.12.4.
- Update Okio to 2.4.0.
- AndroidX 依存関係を最新の安定版に更新しました:
androidx.appcompat:appcompat-> 1.1.0androidx.core:core-ktx-> 1.1.0androidx.lifecycle:lifecycle-common-java8-> 2.1.0
appcompatを、より小さなアーティファクトであるappcompat-resources(オプションのcompileOnly依存関係)に置き換えました。
[0.6.1] - 2019年8月16日
- 新機能:
transformations(List<Transformation>)を RequestBuilder に追加しました。 - 修正: ファイル URI のキャッシュキーに最終更新日を追加しました。
- 修正: View の寸法が少なくとも 1px に評価されることを保証するようにしました。
- 修正: フレーム間で MovieDrawable のキャンバスをクリアするようにしました。
- 修正: アセットを正しく開くようにしました。
[0.6.0] - 2019年8月12日
- 初回リリース。
