변경 로그
[3.3.0] - 2025년 7월 22일
- 신규: 앱이 백그라운드 상태일 때 Android에서
MemoryCache.maxSize를 제한하는 새로운 API를 도입합니다.ImageLoader.Builder.memoryCacheMaxSizePercentWhileInBackground가 설정된 경우, 앱이 백그라운드 상태일 때ImageLoader의 메모리 캐시가 최대 크기의 일정 비율로 제한됩니다. 이 설정은 현재 기본적으로 비활성화되어 있습니다.- 앱이 백그라운드 상태가 되면 메모리 캐시에서 이미지가 잘라내어져 제한된 최대 크기에 도달하지만, 최근 잘라낸 이미지에 대한 메모리 캐시의 약한 참조는 영향을 받지 않습니다. 즉, 이미지가 현재 다른 곳(예:
AsyncImage,ImageView등)에서 참조되고 있다면 메모리 캐시에 여전히 존재합니다. - 이 API는 백그라운드 메모리 사용량을 줄이고, 앱이 더 일찍 종료되는 것을 방지하며, 사용자 기기의 메모리 압박을 줄이는 데 도움이 됩니다.
- 신규:
SvgDecoder에Svg.Parser인수를 추가합니다.- 이를 통해 기본 SVG 파서가 요구 사항을 충족하지 않을 경우 사용자 지정 SVG 파서를 사용할 수 있습니다.
- 사용자 지정 밀도 승수를 제공하는 것을 지원하기 위해
SvgDecoder에density인수를 추가합니다. Uri를 복사하고 수정하는 것을 지원하기 위해Uri.Builder를 추가합니다.- 테스트에서 Coil의
Dispatchers.main.immediate사용을 오버라이드하는 것을 지원하기 위해ImageLoader.Builder.mainCoroutineContext를 추가합니다. start이미지가 애니메이션 끝에서 참조 해제될 때CrossfadePainter.intrinsicSize가 변경되는 문제를 수정합니다. 이는CrossfadeDrawable의 동작과 일치합니다.- Java에서
ImageLoaders.executeBlocking에 접근할 수 없는 문제를 수정합니다. 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에서 네트워크 헤더를 지연 방식으로 파싱합니다.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일
- 중요:
coil-compose및coil-compose-core도 이제 Compose1.8.0이 요구함에 따라 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.immediate에 대한 의존성을 제거합니다.- 이는
AsyncImagePainter가 Paparazzi 및 Roborazzi 스크린샷 테스트에서ImageRequest를 동기적으로 실행하지 않던 경우도 수정합니다.
- 이는
data:[<mediatype>][;base64],<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를 공개 API로 만듭니다.- 모든 멀티플랫폼 타겟에서
Transformation을 지원합니다. CacheControlCacheStrategy에서Expires헤더 값으로 0을 지원합니다.AsyncImage/SubcomposeAsyncImage/rememberAsyncImage가ContentScale이None으로 변경되거나None에서 변경될 때 새ImageRequest를 시작하지 않는 문제를 수정합니다.- Kotlin을 2.1.10으로 업데이트합니다.
- 참고: 이 릴리스는 LLVM 업데이트로 인해 Kotlin/Native를 사용하는 경우 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이 틴트 상태를 따르지 않는 문제를 수정합니다.ImageDecoder가 부분적인 이미지 소스를 디코딩할 수 있도록 허용합니다. 이는BitmapFactory의 동작과 일치합니다.- 디코딩 후
Bitmap.prepareToDraw()가 호출되지 않는 문제를 수정합니다. SvgDecoder는 래스터화되지 않은 이미지에 대해isSampled = true를 반환해서는 안 됩니다.- 즉시 메인 디스패처를 사용할 수 없는 경우 Compose에서
Dispatchers.Unconfined를 사용하도록 대체합니다. 이는 미리보기/테스트 환경에서만 사용됩니다. - Ktor 2를
2.3.13으로 업데이트합니다.
[3.0.3] - 2024년 11월 14일
ImageView의ScaleType에 따라ImageRequest.scale이 설정되는 문제를 수정합니다.DiskCache가 파일을 삭제한 후 항목 제거를 추적하지 않는 엣지 케이스를 수정합니다.- 오류 기록 시 예외(throwable)를
Logger로 전달합니다. kotlin-stdlib-jdk7및kotlin-stdlib-jdk8를kotlin-stdlib로 대체하지 않도록 합니다.
[3.0.2] - 2024년 11월 9일
- Android에서 사용자 지정
CacheStrategy로OkHttpNetworkFetcherFactory를 호출할 때 충돌이 발생하는 문제를 수정합니다. CacheControlCacheStrategy가 캐시 항목의 수명을 잘못 계산하는 문제를 수정합니다.ImageRequest.bitmapConfig가ARGB_8888또는HARDWARE인 경우에만 API 28 이상에서 적용되는 문제를 수정합니다.
[3.0.1] - 2024년 11월 7일
- 하드웨어 비트맵 기반
BitmapImage로Image.toBitmap을 호출할 때 충돌이 발생하는 문제를 수정합니다. AsyncImageModelEqualityDelegate.Default가ImageRequest가 아닌 모델에 대해 등가성(equality) 비교를 잘못하는 문제를 수정합니다.
[3.0.0] - 2024년 11월 4일
Coil 3.0.0은 Compose Multiplatform에 대한 완전한 지원을 포함하는 Coil의 다음 주요 릴리스입니다.
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가 사용 가능한 제약 조건을 채우는 문제를 수정합니다.EqualityDelegate가 무시되어 상태가 관찰될 때rememberAsyncImagePainter가 무한히 다시 구성되는 문제를 수정합니다.- 특수 문자가 포함된
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 이후 변경 사항:
- BREAKING: 기본적으로
addLastModifiedToFileCacheKey를 비활성화하고 요청별로 설정할 수 있도록 허용합니다. 이 동작은 동일한 플래그로 다시 활성화할 수 있습니다. - 신규:
Cache-Control헤더 지원을 구현하는 새로운coil-network-cache-control아티팩트를 도입합니다. - 신규:
SvgDecoder.Factory에scaleToDensity속성을 추가합니다. 이 속성은 고유 치수를 가진 SVG가 기기 밀도에 의해 곱해지도록 보장합니다 (Android에서만 지원됨). ExifOrientationPolicy의 이름을ExifOrientationStrategy로 변경합니다.- 가져올 때
MemoryCache에서 공유할 수 없는 이미지를 제거합니다. ConstraintsSizeResolver를 공개 API로 만듭니다.setSingletonImageLoaderFactory를 안정화합니다.coil-network-ktor3에서 최적화된 JVM I/O 함수를 복원합니다.- MIME 유형 목록에
pdf를 추가합니다. - 컴파일 SDK를 35로 업데이트합니다.
- Kotlin을 2.0.20으로 업데이트합니다.
- Okio를 3.9.1으로 업데이트합니다.
[3.0.0-alpha10] - 2024년 8월 7일
- BREAKING:
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을 사용하여 매우 큰 이미지를 실수로 로드하여 메모리 부족 예외가 발생하는 것을 방지하는 데 도움이 됩니다.
- 이 속성의 기본값은 4096x4096이며, 할당된 비트맵의 차원에 대한 안전한 상한을 제공합니다. 이는
ExifOrientationPolicy를 사용자 지정 정책을 지원하는 인터페이스로 전환합니다.- Windows 파일 경로의
Uri처리 문제를 수정합니다. ImageAPI에서@ExperimentalCoilApi를 제거합니다.- Kotlin을 2.0.10으로 업데이트합니다.
[3.0.0-alpha09] - 2024년 7월 23일
- BREAKING:
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)- 청크된 응답에 대한 중복 네트워크 호출 문제를 수정합니다. (#2363)
- Kotlin을 2.0.0으로 업데이트합니다.
- Compose UI를 1.6.8로 업데이트합니다.
- Okio를 3.9.0으로 업데이트합니다.
[3.0.0-alpha08] - 2024년 7월 8일
- BREAKING:
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를 설정하거나 메모리 캐시에서 해결하기 전에 한 프레임의 지연이 발생합니다.
- 참고: 이로 인해
[3.0.0-alpha07] - 2024년 6월 26일
- BREAKING:
AsyncImagePainter는 기본적으로onDraw를 더 이상 기다리지 않고Size.ORIGINAL을 사용합니다.- 이는 Roborazzi/Paparazzi와의 호환성 문제를 수정하고 전반적인 테스트 안정성을 향상시킵니다.
onDraw를 다시 기다리려면DrawScopeSizeResolver를ImageRequest.sizeResolver로 설정하세요.
- BREAKING: 멀티플랫폼
ImageAPI를 리팩터링합니다. 특히asCoilImage의 이름이asImage로 변경되었습니다. - BREAKING:
AsyncImagePainter.state가StateFlow<AsyncImagePainter.State>로 변경되었습니다. 해당 값을 관찰하려면collectAsState를 사용하세요. 이는 성능을 향상시킵니다. - BREAKING:
AsyncImagePainter.imageLoader및AsyncImagePainter.request가StateFlow<AsyncImagePainter.Inputs>로 결합되었습니다. 해당 값을 관찰하려면collectAsState를 사용하세요. 이는 성능을 향상시킵니다. - BREAKING: 리소스 축소 최적화를 방해하므로
android.resource://example.package.name/drawable/imageURI에 대한 지원을 제거합니다.- 여전히 해당 기능이 필요한 경우 컴포넌트 레지스트리에
ResourceUriMapper를 수동으로 포함할 수 있습니다.
- 여전히 해당 기능이 필요한 경우 컴포넌트 레지스트리에
- 신규:
AsyncImagePreviewHandler를 도입하여AsyncImagePainter의 미리보기 렌더링 동작을 제어하는 것을 지원합니다.- 미리보기 동작을 오버라이드하려면
LocalAsyncImagePreviewHandler를 사용하세요. - 이 변경 및 기타
coil-compose개선의 일환으로,AsyncImagePainter는 이제ImageRequest.placeholder를 표시하는 것으로 기본 설정하는 대신 기본적으로ImageRequest실행을 시도합니다. 미리보기 환경에서는 네트워크 또는 파일을 사용하는 요청이 실패할 것으로 예상되지만, Android 리소스는 작동해야 합니다.
- 미리보기 동작을 오버라이드하려면
- 신규: 프레임 인덱스별 비디오 이미지 추출을 지원합니다. (#2183)
- 신규: 모든
CoroutineDispatcher메서드에CoroutineContext전달을 지원합니다. (#2241). - 신규: JS 및 WASM JS에서 약한 참조 메모리 캐시를 지원합니다.
- Compose에서
Dispatchers.Main.immediate로 디스패치하지 않도록 합니다. 부작용으로 JVM에서kotlinx-coroutines-swing를 더 이상 임포트할 필요가 없습니다. - 성능 향상을 위해 Compose에서
async를 호출하고 디스포저블을 생성하지 않도록 합니다 (@mlykotom님께 감사드립니다!). (#2205) - 전역
ImageLoader의 추가 데이터를Options로 전달하는 문제를 수정합니다. (#2223) crossfade(false)가 비-Android 타겟에서 작동하지 않는 문제를 수정합니다.- VP8X 기능 플래그 바이트 오프셋 문제를 수정합니다. (#2199).
- 비-Android 타겟의
SvgDecoder가 그리기 시간에 이미지를 렌더링하는 대신 비트맵으로 렌더링하도록 전환합니다. 이는 성능을 향상시킵니다.- 이 동작은
SvgDecoder(renderToBitmap)을 사용하여 제어할 수 있습니다.
- 이 동작은
ScaleDrawable을coil-gif에서coil-core로 이동합니다.- Kotlin을 2.0.0으로 업데이트합니다.
- Compose를 1.6.11으로 업데이트합니다.
- Okio를 3.9.0으로 업데이트합니다.
- Skiko를 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 플랫폼에서
Bitmap으로 백업되지 않은Image를 그리는 것을 지원하기 위해DrawablePainter및DrawableImage를 생성합니다.ImageAPI는 실험적이며 알파 릴리스 간에 변경될 가능성이 있습니다.
ContentPainterModifier가Modifier.Node를 구현하도록 업데이트합니다.- 수정: 컴포넌트 콜백 및 네트워크 옵저버를 백그라운드 스레드에서 지연 등록하도록 합니다. 이는 일반적으로 메인 스레드에서 발생하는 느린 초기화 문제를 수정합니다.
- 수정:
ImageLoader.Builder.placeholder/error/fallback을ImageRequest가 사용하지 않는 문제를 수정합니다. - Compose를 1.6.0으로 업데이트합니다.
- Coroutines를 1.8.0으로 업데이트합니다.
- Okio를 3.8.0으로 업데이트합니다.
- Skiko를 0.7.94로 업데이트합니다.
- 3.x의 중요 변경 사항에 대한 전체 목록은 업그레이드 가이드를 참조하세요.
[2.6.0] - 2024년 2월 23일
rememberAsyncImagePainter,AsyncImage및SubcomposeAsyncImage를 재시작 및 스킵 가능하도록 만듭니다. 이는 컴포저블의 인수가 변경되지 않는 한 다시 구성되는 것을 방지하여 성능을 향상시킵니다.rememberAsyncImagePainter,AsyncImage및SubcomposeAsyncImage에 선택적modelEqualityDelegate인수를 추가하여model이 다시 구성을 트리거할지 여부를 제어합니다.
ContentPainterModifier가Modifier.Node를 구현하도록 업데이트합니다.- 수정: 컴포넌트 콜백 및 네트워크 옵저버를 백그라운드 스레드에서 지연 등록하도록 합니다. 이는 일반적으로 메인 스레드에서 발생하는 느린 초기화 문제를 수정합니다.
- 수정:
ImageRequest.listener또는ImageRequest.target이 변경되면rememberAsyncImagePainter,AsyncImage및SubcomposeAsyncImage에서 새 이미지 요청을 다시 시작하는 것을 방지합니다. - 수정:
AsyncImagePainter에서 이미지 요청을 두 번 관찰하지 않도록 합니다. - Kotlin을 1.9.22로 업데이트합니다.
- Compose를 1.6.1로 업데이트합니다.
- Okio를 3.8.0으로 업데이트합니다.
androidx.collection을 1.4.0으로 업데이트합니다.androidx.lifecycle을 2.7.0으로 업데이트합니다.
[3.0.0-alpha04] - 2024년 2월 1일
- Breaking:
OkHttpNetworkFetcherFactory및KtorNetworkFetcherFactory의 공개 API에서Lazy를 제거합니다. OkHttpNetworkFetcherFactory에서OkHttpClient대신Call.Factory를 노출합니다.NetworkResponseBody가ByteString을 래핑하도록 전환합니다.- Compose를 1.5.12로 다운그레이드합니다.
- 중요 변경 사항에 대한 전체 목록은 업그레이드 가이드를 참조하세요.
[3.0.0-alpha03] - 2024년 1월 20일
- Breaking:
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일
- Breaking:
coil-gif,coil-network,coil-svg,coil-video의 패키지가 업데이트되어 모든 클래스가 각각coil.gif,coil.network,coil.svg,coil.video의 일부가 되었습니다. 이는 다른 아티팩트와의 클래스 이름 충돌을 방지하는 데 도움이 됩니다. - Breaking:
ImageDecoderDecoder의 이름이AnimatedImageDecoder로 변경되었습니다. - 신규:
coil-gif,coil-network,coil-svg,coil-video의 구성 요소가 이제 각ImageLoader의ComponentRegistry에 자동으로 추가됩니다.- 분명히 말하자면,
3.0.0-alpha01과 달리ComponentRegistry에NetworkFetcher.Factory()를 수동으로 추가할 필요가 없습니다. 단순히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 멀티플랫폼 라이브러리입니다.
- 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아티팩트의 이름이 각각coil-core및coil-compose-core로 변경되어 Coroutines, Ktor 및 AndroidX에서 사용되는 명명 규칙과 일치하도록 합니다.- 중요 변경 사항에 대한 전체 목록은 업그레이드 가이드를 참조하세요.
[2.5.0] - 2023년 10월 30일
- 신규:
coil-video에서MediaDataSource구현 디코딩을 지원하기 위해MediaDataSourceFetcher.Factory를 추가합니다. (#1795) SHIFT6m기기를 하드웨어 비트맵 차단 목록에 추가합니다. (#1812)- 수정: 제한 없는 차원을 가진 크기를 반환하는 페인터에 대비합니다. (#1826)
- 수정: 캐시된 헤더에 비-ASCII 문자가 포함된 경우
304 Not Modified이후 디스크 캐시 로드가 실패하는 문제를 수정합니다. (#1839) - 수정:
FakeImageEngine이 인터셉터 체인의 요청을 업데이트하지 않는 문제를 수정합니다. (#1905) - 컴파일 SDK를 34로 업데이트합니다.
- Kotlin을 1.9.10으로 업데이트합니다.
- Coroutines를 1.7.3으로 업데이트합니다.
accompanist-drawablepainter를 0.32.0으로 업데이트합니다.androidx.annotation을 1.7.0으로 업데이트합니다.androidx.compose.foundation을 1.5.4로 업데이트합니다.androidx.core를 1.12.0으로 업데이트합니다.androidx.exifinterface:exifinterface를 1.3.6으로 업데이트합니다.androidx.lifecycle을 2.6.2로 업데이트합니다.com.squareup.okhttp3를 4.12.0으로 업데이트합니다.com.squareup.okio를 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로 설정하는 문제를 수정합니다. - Kotlin을 1.8.21으로 업데이트합니다.
- Coroutines를 1.7.1으로 업데이트합니다.
accompanist-drawablepainter를 0.30.1으로 업데이트합니다.androidx.compose.foundation을 1.4.3으로 업데이트합니다.androidx.profileinstaller:profileinstaller를 1.3.1으로 업데이트합니다.com.squareup.okhttp3를 4.11.0으로 업데이트합니다.
[2.3.0] - 2023년 3월 25일
- 신규:
FakeImageLoaderEngine을 포함하는 새로운coil-test아티팩트를 도입합니다. 이 클래스는 테스트에서 일관되고 동기적인(메인 스레드에서) 응답을 보장하기 위해 이미지 로더 응답을 하드코딩하는 데 유용합니다. 자세한 내용은 여기를 참조하세요. - 신규:
coil-base(Coil의 자식 모듈) 및coil-compose-base(Coil-Compose의 자식 모듈)에 베이스라인 프로필을 추가합니다.- 이는 Coil의 런타임 성능을 개선하며, 앱에서 Coil이 어떻게 사용되는지에 따라 더 나은 프레임 타이밍을 제공해야 합니다.
- 수정: 인코딩된 데이터가 포함된
file://URI 파싱 문제를 수정합니다. #1601 - 수정:
DiskCache가 존재하지 않는 디렉토리가 전달된 경우 최대 크기를 올바르게 계산하도록 수정합니다. #1620 Coil.reset을 공개 API로 만듭니다. #1506- Java 기본 메서드 생성을 활성화합니다. #1491
- Kotlin을 1.8.10으로 업데이트합니다.
accompanist-drawablepainter를 0.30.0으로 업데이트합니다.androidx.annotation을 1.6.0으로 업데이트합니다.androidx.appcompat:appcompat-resources를 1.6.1으로 업데이트합니다.androidx.compose.foundation을 1.4.0으로 업데이트합니다.androidx.core를 1.9.0으로 업데이트합니다.androidx.exifinterface:exifinterface를 1.3.6으로 업데이트합니다.androidx.lifecycle을 2.6.1으로 업데이트합니다.okio를 3.3.0으로 업데이트합니다.
[2.2.2] - 2022년 10월 1일
- 이미지 로더가 시스템 콜백을 등록하기 전에 완전히 초기화되도록 합니다. #1465
- API 30 이상에서 밴딩을 방지하기 위해
VideoFrameDecoder에 선호하는 비트맵 구성을 설정합니다. #1487 FileUriMapper에서#가 포함된 경로 파싱 문제를 수정합니다. #1466- 디스크 캐시에서 비-ASCII 헤더가 포함된 응답을 읽는 문제를 수정합니다. #1468
- 에셋 하위 폴더 내에서 비디오 디코딩 문제를 수정합니다. #1489
androidx.annotation을 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 방향 데이터를 처리하는 방법을 구성하기 위해ExifOrientationPolicy를 추가합니다. - 수정:
RoundedCornersTransformation에 정의되지 않은 차원을 가진 크기가 전달된 경우 예외를 발생시키지 않도록 합니다. - 수정: GIF의 프레임 지연을 하나의 부호 있는 바이트 대신 두 개의 부호 없는 바이트로 읽도록 합니다.
- Kotlin을 1.7.10으로 업데이트합니다.
- Coroutines를 1.6.4로 업데이트합니다.
- Compose를 1.2.1으로 업데이트합니다.
- OkHttp를 4.10.0으로 업데이트합니다.
- Okio를 3.2.0으로 업데이트합니다.
accompanist-drawablepainter를 0.25.1으로 업데이트합니다.androidx.annotation을 1.4.0으로 업데이트합니다.androidx.appcompat:appcompat-resources를 1.5.0으로 업데이트합니다.androidx.core를 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입니다.- 이는
ImageRequest.scale을 기본Scale을 가진 다른 클래스와 일관되게 만들기 위해 변경되었습니다. ImageViewTarget을 사용하는 요청은 여전히Scale이 자동으로 감지됩니다.
- 이는
- 이미지 파이프라인 클래스를 재작업합니다:
Mapper,Fetcher,Decoder가 더 유연하게 리팩터링되었습니다.Fetcher.key가 새로운Keyer인터페이스로 대체되었습니다.Keyer는 입력 데이터에서 캐시 키를 생성합니다.Decoder가 Okio의 파일 시스템 API를 사용하여File을 직접 읽을 수 있도록ImageSource를 추가합니다.
- Jetpack Compose 통합을 재작업합니다:
rememberImagePainter및ImagePainter의 이름이 각각rememberAsyncImagePainter및AsyncImagePainter로 변경되었습니다.LocalImageLoader를 지원 중단합니다. 자세한 내용은 지원 중단 메시지를 참조하세요.
- 런타임 not-null 어설션 생성을 비활성화합니다.
- Java를 사용하는 경우, not-null 주석이 달린 인수에 null을 전달해도 더 이상
NullPointerException이 즉시 발생하지 않습니다. Kotlin의 컴파일 시점 null 안전성이 이러한 발생을 방지합니다. - 이 변경으로 라이브러리 크기가 더 작아집니다.
- Java를 사용하는 경우, not-null 주석이 달린 인수에 null을 전달해도 더 이상
Size는 이제 너비와 높이에 대한 두 개의Dimension값으로 구성됩니다.Dimension은 양수 픽셀 값이거나Dimension.Undefined일 수 있습니다. 자세한 내용은 여기를 참조하세요.BitmapPool및PoolableViewTarget이 라이브러리에서 제거되었습니다.VideoFrameFileFetcher및VideoFrameUriFetcher가 라이브러리에서 제거되었습니다. 대신 모든 데이터 소스를 지원하는VideoFrameDecoder를 사용하세요.BlurTransformation및GrayscaleTransformation이 라이브러리에서 제거되었습니다. 사용하는 경우 코드를 프로젝트에 복사할 수 있습니다.Transition.transition이 전환 완료 시까지 일시 중단할 필요가 없으므로 일시 중단되지 않는 함수로 변경됩니다.- 진행 중인
BitmapFactory작업의 최대 수를 제한하는bitmapFactoryMaxParallelism지원을 추가합니다. 이 값은 기본적으로 4이며, UI 성능을 향상시킵니다. interceptorDispatcher,fetcherDispatcher,decoderDispatcher및transformationDispatcher지원을 추가합니다.- 공통
ViewTarget로직을 처리하는GenericViewTarget를 추가합니다. - 기본 지원 데이터 유형에
ByteBuffer를 추가합니다. Disposable이 리팩터링되어 기본ImageRequest의 작업을 노출합니다.MemoryCacheAPI를 재작업합니다.ImageRequest.fallback이 null인 경우ImageRequest.error가Target에 설정됩니다.Transformation.key가Transformation.cacheKey로 대체됩니다.- Kotlin을 1.6.10으로 업데이트합니다.
- Compose를 1.1.1으로 업데이트합니다.
- OkHttp를 4.9.3으로 업데이트합니다.
- Okio를 3.0.0으로 업데이트합니다.
2.0.0-rc03 이후 변경 사항:
Dimension.Original을Dimension.Undefined로 전환합니다.- 이는 크기 시스템의 일부 엣지 케이스(예시)를 수정하기 위해 비-픽셀 차원의 의미를 약간 변경합니다.
- ContentScale이 None인 경우
Size.ORIGINAL로 이미지를 로드합니다. ImageView.load빌더 인수를 마지막이 아닌 먼저 적용하는 문제를 수정합니다.- 응답이 수정되지 않은 경우 HTTP 헤더를 결합하지 않는 문제를 수정합니다.
[2.0.0-rc03] - 2022년 4월 11일
ScaleResolver인터페이스를 제거합니다.Size생성자를 함수로 전환합니다.Dimension.Pixels의toString이 픽셀 값만 반환하도록 변경합니다.SystemCallbacks.onTrimMemory에서 드물게 발생하는 충돌에 대비합니다.- Coroutines를 1.6.1으로 업데이트합니다.
[2.0.0-rc02] - 2022년 3월 20일
ImageRequest의 기본 크기를Size.ORIGINAL대신 현재 디스플레이 크기로 되돌립니다.DiskCache.Builder가 실험적으로 표시되는 문제를 수정합니다.DiskCache의 메서드만 실험적입니다.- 한 차원이
WRAP_CONTENT인ImageView에 이미지를 로드할 때, 이미지가 제한된 차원에 맞춰지지 않고 원본 크기로 로드되는 경우를 수정합니다. MemoryCache.Key,MemoryCache.Value및Parameters.Entry에서 컴포넌트 함수를 제거합니다.
[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입니다.- 이는
ImageRequest.scale을 기본Scale을 가진 다른 클래스와 일관되게 만들기 위해 변경되었습니다. ImageViewTarget을 사용하는 요청은 여전히Scale이 자동으로 감지됩니다.
- 이는
ImageRequest의 기본 크기는 이제Size.ORIGINAL입니다.- 이미지 파이프라인 클래스를 재작업합니다:
Mapper,Fetcher,Decoder가 더 유연하게 리팩터링되었습니다.Fetcher.key가 새로운Keyer인터페이스로 대체되었습니다.Keyer는 입력 데이터에서 캐시 키를 생성합니다.Decoder가 Okio의 파일 시스템 API를 사용하여File을 직접 읽을 수 있도록ImageSource를 추가합니다.
- 런타임 not-null 어설션 생성을 비활성화합니다.
- Java를 사용하는 경우, not-null 주석이 달린 파라미터에 null을 전달해도 더 이상
NullPointerException이 즉시 발생하지 않습니다. Kotlin을 사용하는 경우 본질적으로 변화가 없습니다. - 이 변경으로 라이브러리 크기가 더 작아집니다.
- Java를 사용하는 경우, not-null 주석이 달린 파라미터에 null을 전달해도 더 이상
Size는 이제 너비와 높이에 대한 두 개의Dimension값으로 구성됩니다.Dimension은 양수 픽셀 값이거나Dimension.Original일 수 있습니다.BitmapPool및PoolableViewTarget이 라이브러리에서 제거되었습니다.VideoFrameFileFetcher및VideoFrameUriFetcher가 라이브러리에서 제거되었습니다. 대신 모든 데이터 소스를 지원하는VideoFrameDecoder를 사용하세요.BlurTransformation및GrayscaleTransformation이 라이브러리에서 제거되었습니다. 사용하는 경우 코드를 프로젝트에 복사할 수 있습니다.Transition.transition이 전환 완료 시까지 일시 중단할 필요가 없으므로 일시 중단되지 않는 함수로 변경됩니다.- 진행 중인
BitmapFactory작업의 최대 수를 제한하는bitmapFactoryMaxParallelism지원을 추가합니다. 이 값은 기본적으로 4이며, UI 성능을 향상시킵니다. interceptorDispatcher,fetcherDispatcher,decoderDispatcher및transformationDispatcher지원을 추가합니다.- 공통
ViewTarget로직을 처리하는GenericViewTarget를 추가합니다. - 기본 지원 데이터 유형에
ByteBuffer를 추가합니다. Disposable이 리팩터링되어 기본ImageRequest의 작업을 노출합니다.MemoryCacheAPI를 재작업합니다.ImageRequest.fallback이 null인 경우ImageRequest.error가Target에 설정됩니다.Transformation.key가Transformation.cacheKey로 대체됩니다.- Kotlin을 1.6.10으로 업데이트합니다.
- Compose를 1.1.1으로 업데이트합니다.
- OkHttp를 4.9.3으로 업데이트합니다.
- Okio를 3.0.0으로 업데이트합니다.
2.0.0-alpha09 이후 변경 사항:
-Xjvm-default=all컴파일러 플래그를 제거합니다.must-revalidate/e-tag를 사용하는 여러 요청이 동시에 실행될 때 이미지 로드 실패 문제를 수정합니다.<svg태그 뒤에 새 줄 문자가 있는 경우DecodeUtils.isSvg가 false를 반환하는 문제를 수정합니다.LocalImageLoader.provides지원 중단 메시지를 더 명확하게 합니다.- Compose를 1.1.1으로 업데이트합니다.
accompanist-drawablepainter를 0.23.1으로 업데이트합니다.
[2.0.0-alpha09] - 2022년 2월 16일
AsyncImage가 잘못된 제약 조건을 생성하는 문제를 수정합니다. (#1134)AsyncImagePainter에ContentScale인수를 추가합니다. (#1144)- 이는 이미지가 올바른 크기로 로드되도록
Image에 설정된 값과 동일하게 설정되어야 합니다.
- 이는 이미지가 올바른 크기로 로드되도록
ImageRequest에 대한Scale을 지연 방식으로 해결하는 것을 지원하기 위해ScaleResolver를 추가합니다. (#1134)ImageRequest.scale은ImageRequest.scaleResolver.scale()로 대체되어야 합니다.
- Compose를 1.1.0으로 업데이트합니다.
accompanist-drawablepainter를 0.23.0으로 업데이트합니다.androidx.lifecycle을 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를 제공하며 성능이 낮은 서브컴포지션을 사용합니다.AsyncImage는placeholder/error/fallback인수를 제공하여 로드 중이거나 요청이 실패했을 때 그려지는Painter를 덮어씁니다.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로 이동합니다. coil-svg에isSvg를 추가합니다. (#1117)FetchResult및DecodeResult를 비-데이터 클래스로 전환합니다. (#1114)- 사용되지 않는
DiskCache.Builder컨텍스트 인수를 제거합니다. (#1099) - 원본 크기를 가진 비트맵 리소스의 스케일링 문제를 수정합니다. (#1072)
ImageDecoderDecoder에서ImageDecoder를 닫지 못하는 문제를 수정합니다. (#1109)- 드로어블을 비트맵으로 변환할 때 잘못된 스케일링 문제를 수정합니다. (#1084)
- Compose를 1.1.0-rc03으로 업데이트합니다.
accompanist-drawablepainter를 0.22.1-rc로 업데이트합니다.androidx.appcompat:appcompat-resources를 1.4.1으로 업데이트합니다.
[2.0.0-alpha06] - 2021년 12월 24일
- 버퍼링이나 임시 파일 없이 에셋, 리소스 및 콘텐츠 URI에서 디코딩을 지원하기 위해
ImageSource.Metadata를 추가합니다. (#1060) AsyncImage가 양의 제약 조건을 가질 때까지 이미지 요청 실행을 지연합니다. (#1028)loading,success,error가 모두 설정된 경우AsyncImage에DefaultContent를 사용하는 문제를 수정합니다. (#1026)- 플랫폼
LruCache대신 androidxLruCache를 사용합니다. (#1047) - Kotlin을 1.6.10으로 업데이트합니다.
- Coroutines를 1.6.0으로 업데이트합니다.
- Compose를 1.1.0-rc01으로 업데이트합니다.
accompanist-drawablepainter를 0.22.0-rc로 업데이트합니다.androidx.collection을 1.2.0으로 업데이트합니다.
[2.0.0-alpha05] - 2021년 11월 28일
- 중요: 이미지의 원본 크기를 어느 한 차원에 사용할 수 있도록
Size를 리팩터링합니다.Size는 이제 너비와 높이에 대한 두 개의Dimension값으로 구성됩니다.Dimension은 양수 픽셀 값이거나Dimension.Original일 수 있습니다.- 이 변경은 한 차원이 고정 픽셀 값일 때 무제한 너비/높이 값(예:
wrap_content,Constraints.Infinity)을 더 잘 지원하기 위해 이루어졌습니다.
- 수정:
AsyncImage에 대한 검사 모드(미리보기)를 지원합니다. - 수정:
imageLoader.memoryCache가 null인 경우SuccessResult.memoryCacheKey는 항상null이어야 합니다. ImageLoader,SizeResolver및ViewSizeResolver의 생성자와 유사한invoke함수를 최상위 함수로 전환합니다.CrossfadeDrawable의 시작 및 끝 드로어블을 공개 API로 만듭니다.ImageLoader의 플레이스홀더/오류/폴백 드로어블을 변경합니다.SuccessResult생성자에 기본 인수를 추가합니다.androidx.collection-ktx대신androidx.collection에 의존합니다.- OkHttp를 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을 표시합니다. - Compose를 1.1.0-beta03으로 업데이트하고
compose.ui대신compose.foundation에 의존합니다. androidx.appcompat-resources를 1.4.0으로 업데이트합니다.
[2.0.0-alpha03] - 2021년 11월 12일
- Android 29 이상에서 음악 썸네일을 로드하는 기능을 추가합니다. (#967)
- 수정: 현재 패키지의 리소스를 로드하기 위해
context.resources를 사용합니다. (#968) - 수정:
clear->dispose교체 표현식을 수정합니다. (#970) - Compose를 1.0.5로 업데이트합니다.
accompanist-drawablepainter를 0.20.2로 업데이트합니다.- Okio를 3.0.0으로 업데이트합니다.
androidx.annotation을 1.3.0으로 업데이트합니다.androidx.core를 1.7.0으로 업데이트합니다.androidx.lifecycle을 2.4.0으로 업데이트합니다.lifecycle-common-java8이lifecycle-common에 병합되었으므로 해당 의존성을 제거합니다.
[2.0.0-alpha02] - 2021년 10월 24일
- BOM(Bill of Materials)을 포함하는 새로운
coil-bom아티팩트를 추가합니다.coil-bom을 임포트하면 버전을 지정하지 않고 다른 Coil 아티팩트에 의존할 수 있습니다.
ExecuteCallback.Immediate를 사용할 때 이미지 로드 실패 문제를 수정합니다.- Okio를 3.0.0-alpha.11로 업데이트합니다.
- 이는 Okio 3.0.0-alpha.11과의 호환성 문제도 해결합니다.
- Kotlin을 1.5.31으로 업데이트합니다.
- Compose를 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노출을 지원합니다. 이는 Android API가 디코딩을 위해File을 요구할 때 (예: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입니다.- 이는
ImageRequest.scale을 기본Scale을 가진 다른 클래스와 일관되게 만들기 위해 변경되었습니다. ImageViewTarget을 사용하는 요청은 여전히 스케일이 자동으로 감지됩니다.
- 이는
- 이미지 파이프라인 클래스에 대한 주요 변경 사항:
Mapper,Fetcher,Decoder가 더 유연하게 리팩터링되었습니다.Fetcher.key가 새로운Keyer인터페이스로 대체되었습니다.Keyer는 입력 데이터에서 캐시 키를 생성합니다.Decoder가File을 직접 디코딩할 수 있도록ImageSource를 추가합니다.
BitmapPool및PoolableViewTarget이 라이브러리에서 제거되었습니다. 비트맵 풀링이 제거된 이유는 다음과 같습니다.- API 23 이하에서 가장 효과적이며 최신 Android 릴리스에서는 효과가 감소했습니다.
- 비트맵 풀링을 제거하면 Coil이 변경 불가능한 비트맵을 사용할 수 있으며, 이는 성능 이점이 있습니다.
- 비트맵 풀을 관리하는 데 런타임 오버헤드가 있습니다.
- 비트맵 풀링은 비트맵이 풀링 대상인지 추적해야 하므로 Coil의 API에 설계 제한을 만듭니다. 비트맵 풀링을 제거하면 Coil이 더 많은 곳에서 결과
Drawable을 노출할 수 있습니다(예:Listener,Disposable). 또한, 이는 Coil이ImageView를 지울 필요가 없다는 것을 의미하며, 이는 문제를 야기할 수 있습니다. - 비트맵 풀링은 오류 발생 가능성이 높습니다. 새 비트맵을 할당하는 것이 여전히 사용 중일 수 있는 비트맵을 재사용하려는 시도보다 훨씬 안전합니다.
MemoryCache가 더 유연하게 리팩터링되었습니다.- 런타임 not-null 어설션 생성을 비활성화합니다.
- Java를 사용하는 경우, not-null 주석이 달린 파라미터에 null을 전달해도 더 이상
NullPointerException이 즉시 발생하지 않습니다. Kotlin을 사용하는 경우 본질적으로 변화가 없습니다. - 이 변경으로 라이브러리 크기가 더 작아집니다.
- Java를 사용하는 경우, not-null 주석이 달린 파라미터에 null을 전달해도 더 이상
VideoFrameFileFetcher및VideoFrameUriFetcher가 라이브러리에서 제거되었습니다. 대신 모든 데이터 소스를 지원하는VideoFrameDecoder를 사용하세요.- 진행 중인
BitmapFactory작업의 최대 수를 제한하는bitmapFactoryMaxParallelism지원을 추가합니다. 이 값은 기본적으로 4이며, UI 성능을 향상시킵니다. interceptorDispatcher,fetcherDispatcher,decoderDispatcher및transformationDispatcher지원을 추가합니다.Disposable이 리팩터링되어 기본ImageRequest의 작업을 노출합니다.Transition.transition이 전환 완료 시까지 일시 중단할 필요가 없으므로 일시 중단되지 않는 함수로 변경됩니다.- 공통
ViewTarget로직을 처리하는GenericViewTarget를 추가합니다. - 라이브러리에서
BlurTransformation및GrayscaleTransformation이 제거되었습니다.- 사용하는 경우 코드를 프로젝트에 복사할 수 있습니다.
ImageRequest.error이 null인 경우ImageRequest.fallback가Target에 설정됩니다.Transformation.key가Transformation.cacheKey로 대체됩니다.ImageRequest.Listener는onSuccess및onError에서 각각SuccessResult/ErrorResult를 반환합니다.- 기본 지원 데이터 유형에
ByteBuffer를 추가합니다. - 여러 클래스에서
toString구현을 제거합니다. - OkHttp를 4.9.2로 업데이트합니다.
- Okio를 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)
- 인라인되지 않은(non-inlined)
ComponentRegistry메서드를 공개 API로 만듭니다. (#925) accompanist-drawablepainter에 의존하고 Coil의 사용자 지정DrawablePainter구현을 제거합니다. (#845)- 디슈거링(desugaring) 문제에 대비하기 위해 Java 8 메서드 사용을 제거합니다. (#924)
ImagePainter.ExecuteCallback을 안정적인 API로 승격합니다. (#927)- 컴파일 SDK를 31로 업데이트합니다.
- Kotlin을 1.5.30으로 업데이트합니다.
- Coroutines를 1.5.2로 업데이트합니다.
- Compose를 1.0.3으로 업데이트합니다.
[1.3.2] - 2021년 8월 4일
coil-compose는 이제compose.foundation대신compose.ui에 의존합니다.compose.ui는compose.foundation의 하위 집합이므로 더 작은 의존성입니다.
- Jetpack Compose를 1.0.1으로 업데이트합니다.
- Kotlin을 1.5.21으로 업데이트합니다.
- Coroutines를 1.5.1으로 업데이트합니다.
androidx.exifinterface:exifinterface를 1.3.3으로 업데이트합니다.
[1.3.1] - 2021년 7월 28일
- Jetpack Compose를
1.0.0으로 업데이트합니다. Compose 팀의 안정 버전 릴리스에 큰 축하를 보냅니다! androidx.appcompat:appcompat-resources를 1.3.1으로 업데이트합니다.
[1.3.0] - 2021년 7월 10일
- 신규: Jetpack Compose 지원을 추가합니다. 이는 Accompanist의 Coil 통합을 기반으로 하지만, 여러 변경 사항이 있습니다. 자세한 내용은 문서를 참조하세요.
Transformation에 대한 자동 비트맵 변환을 활성화/비활성화하기 위해allowConversionToBitmap을 추가합니다. (#775)- 임계값 미만일 경우 GIF의 프레임 지연을 재작성하는 것을 활성화하기 위해
ImageDecoderDecoder및GifDecoder에enforceMinimumFrameDelay를 추가합니다. (#783)- 이는 기본적으로 비활성화되어 있지만, 향후 릴리스에서는 기본적으로 활성화될 예정입니다.
ImageLoader의 내부 네트워크 옵저버를 활성화/비활성화하는 지원을 추가합니다. (#741)BitmapFactoryDecoder에 의해 디코딩된 비트맵의 밀도 문제를 수정합니다. (#776)- Licensee가 Coil의 라이선스 URL을 찾지 못하는 문제를 수정합니다. (#774)
androidx.core:core-ktx를 1.6.0으로 업데이트합니다.
[1.2.2] - 2021년 6월 4일
- 공유 상태를 가진 드로어블을 비트맵으로 변환하는 동안 경쟁 조건이 발생하는 문제를 수정합니다. (#771)
ImageLoader.Builder.fallback이fallback드로어블 대신error드로어블을 설정하는 문제를 수정합니다.ResourceUriFetcher가 잘못된 데이터 소스를 반환하는 문제를 수정합니다. (#770)- API 26 및 27에서 사용 가능한 파일 디스크립터가 없는 경우 로그 확인 문제를 수정합니다.
- 플랫폼 벡터 드로어블 지원에 대한 잘못된 버전 확인 문제를 수정합니다. (#751)
- Kotlin (1.5.10)을 업데이트합니다.
- Coroutines (1.5.0)을 업데이트합니다.
androidx.appcompat:appcompat-resources를 1.3.0으로 업데이트합니다.androidx.core:core-ktx를 1.5.0으로 업데이트합니다.
[1.2.1] - 2021년 4월 27일
- 수정:
VideoFrameUriFetcher가 http/https URI를 처리하려는 시도 문제를 수정합니다. (#734)
[1.2.0] - 2021년 4월 12일
- 중요:
SvgDecoder에서 SVG의 뷰 경계를 사용하여 가로세로 비율을 계산합니다. (#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)
- Kotlin (1.4.32)을 업데이트합니다.
- Coroutines (1.4.3)을 업데이트합니다.
- OkHttp (3.12.13)을 업데이트합니다.
androidx.lifecycle:lifecycle-common-java8을 2.3.1으로 업데이트합니다.
[1.1.1] - 2021년 1월 11일
ViewSizeResolver.size가 코루틴을 두 번 이상 재개하여IllegalStateException을 발생시킬 수 있는 경우를 수정합니다.- 메인 스레드에서 호출될 때
HttpFetcher가 영원히 블로킹하는 문제를 수정합니다.ImageRequest.dispatcher(Dispatchers.Main.immediate)를 사용하여 메인 스레드에서 강제로 실행되는 요청은ImageRequest.networkCachePolicy가CachePolicy.DISABLED또는CachePolicy.WRITE_ONLY로 설정되지 않은 한NetworkOnMainThreadException과 함께 실패합니다.
- 비디오에 회전 메타데이터가 있는 경우
VideoFrameFetcher에서 비디오 프레임을 회전시킵니다. - Kotlin (1.4.21)을 업데이트합니다.
- Coroutines (1.4.2)를 업데이트합니다.
- Okio (2.10.0)을 업데이트합니다.
androidx.exifinterface:exifinterface(1.3.2)를 업데이트합니다.
[1.1.0] - 2020년 11월 24일
- 중요:
CENTER및MATRIXImageView스케일 유형을OriginalSize로 해결하도록 변경합니다. (#587)- 이 변경은 요청의 크기가 명시적으로 지정되지 않은 경우 암시적 크기 해결 알고리즘에만 영향을 미칩니다.
- 이 변경은 이미지 요청의 시각적 결과가
ImageView.setImageResource/ImageView.setImageURI와 일관되도록 보장하기 위해 이루어졌습니다. 이전 동작으로 되돌리려면 요청을 생성할 때ViewSizeResolver를 설정하세요.
- 중요: 뷰의 레이아웃 파라미터가
WRAP_CONTENT인 경우ViewSizeResolver에서 디스플레이 크기를 반환합니다. (#562)- 이전에는 뷰가 완전히 레이아웃된 경우에만 디스플레이 크기를 반환했습니다. 이 변경으로 일반적인 동작이 더 일관되고 직관적입니다.
- 알파 사전 곱셈을 제어하는 기능을 추가합니다. (#569)
CrossfadeDrawable에서 정확한 고유 크기를 선호하는 것을 지원합니다. (#585)- 버전을 포함한 전체 GIF 헤더를 확인합니다. (#564)
- 비어 있는 비트맵 풀 구현을 추가합니다. (#561)
EventListener.Factory를 함수형 인터페이스로 만듭니다. (#575)EventListener를 안정화합니다. (#574)ImageRequest.Builder.placeholderMemoryCacheKey에String오버로드를 추가합니다.ViewSizeResolver생성자에@JvmOverloads를 추가합니다.- 수정:
CrossfadeDrawable에서 시작/끝 드로어블을 변경합니다. (#572) - 수정: 두 번째 로드 시 GIF가 재생되지 않는 문제를 수정합니다. (#577)
- Kotlin (1.4.20)을 업데이트하고
kotlin-parcelize플러그인으로 마이그레이션합니다. - 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)
- Kotlin을 1.4.10으로 업데이트합니다.
- Okio를 2.9.0으로 업데이트합니다.
androidx.exifinterface:exifinterface를 1.3.1으로 업데이트합니다.
[1.0.0-rc3] - 2020년 9월 21일
- 불안정성으로 인해
-Xjvm-default=all컴파일러 플래그 사용을 되돌립니다.- 이는 이전 릴리스 후보 버전과의 소스 호환은 되지만 바이너리 호환은 되지 않는 변경입니다.
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일
- 중요: 기본적으로 인터셉터 체인을 메인 스레드에서 실행합니다. (#513)
- 이는
0.11.0이하 버전에서 메모리 캐시가 메인 스레드에서 동기적으로 확인되던 동작을 대부분 복원합니다. ImageRequest.dispatcher에서 메모리 캐시를 확인하던0.12.0과 동일한 동작으로 되돌리려면ImageLoader.Builder.launchInterceptorChainOnMainThread(false)를 설정하세요.- 자세한 내용은
launchInterceptorChainOnMainThread를 참조하세요.
- 이는
- 수정: 분리된 프래그먼트의
ViewTarget에서 요청이 시작될 때 잠재적인 메모리 누수 문제를 수정합니다. (#518) - 수정: 리소스 URI를 로드하기 위해
ImageRequest.context를 사용합니다. (#517) - 수정: 후속 요청이 디스크 캐시에 저장되지 않는 원인이 될 수 있는 경쟁 조건 문제를 수정합니다. (#510)
- 수정: API 18에서
blockCountLong및blockSizeLong을 사용합니다.
ImageLoaderFactory를 함수형 인터페이스로 만듭니다.ImageLoader.Builder.addLastModifiedToFileCacheKey를 추가하여File에서 로드된 이미지의 메모리 캐시 키에 최종 수정 타임스탬프를 추가/제거할 수 있도록 합니다.
- Kotlin을 1.4.0으로 업데이트합니다.
- Coroutines를 1.3.9로 업데이트합니다.
- Okio를 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에 있는 모든 지원 중단된 메서드를 제거합니다.
- Coroutines를 1.3.9로 업데이트합니다.
[0.12.0] - 2020년 8월 18일
- Breaking:
LoadRequest및GetRequest가ImageRequest로 대체되었습니다:ImageLoader.execute(LoadRequest)->ImageLoader.enqueue(ImageRequest)ImageLoader.execute(GetRequest)->ImageLoader.execute(ImageRequest)ImageRequest는equals/hashCode를 구현합니다.
- Breaking: 여러 클래스 이름이 변경되거나 패키지가 변경되었습니다:
coil.request.RequestResult->coil.request.ImageResultcoil.request.RequestDisposable->coil.request.Disposablecoil.bitmappool.BitmapPool->coil.bitmap.BitmapPoolcoil.DefaultRequestOptions->coil.request.DefaultRequestOptions
- Breaking:
SparseIntArraySet이 공개 API에서 제거되었습니다. - Breaking:
TransitionTarget는 더 이상ViewTarget를 구현하지 않습니다. - Breaking:
ImageRequest.Listener.onSuccess의 서명이DataSource대신ImageResult.Metadata를 반환하도록 변경되었습니다. - Breaking:
LoadRequest.aliasKeys지원을 제거합니다. 이 API는 메모리 캐시에 대한 직접 읽기/쓰기 접근으로 더 잘 처리됩니다.
- 중요: 메모리 캐시의 값은 더 이상 동기적으로 해결되지 않습니다 (메인 스레드에서 호출된 경우).
- 이 변경은 백그라운드 디스패처에서
Interceptor를 실행하는 것을 지원하기 위해서도 필요했습니다. - 이 변경은 또한 메인 스레드에서 더 많은 작업을 이동하여 성능을 향상시킵니다.
- 이 변경은 백그라운드 디스패처에서
- 중요:
Mappers는 이제 백그라운드 디스패처에서 실행됩니다. 부작용으로 자동 비트맵 샘플링은 더 이상 자동으로 지원되지 않습니다. 동일한 효과를 얻으려면 이전 요청의MemoryCache.Key를 후속 요청의placeholderMemoryCacheKey로 사용하세요. 예시는 여기를 참조하세요.placeholderMemoryCacheKeyAPI는 서로 다른 데이터(예: 작거나 큰 이미지에 대한 다른 URL)를 가진 두 이미지 요청을 "연결"할 수 있는 더 많은 자유를 제공합니다.
- 중요: Coil의
ImageView확장 함수가coil.api패키지에서coil패키지로 이동했습니다.import coil.api.load->import coil.load로 리팩터링하려면 찾기 및 바꾸기를 사용하세요. 안타깝게도 Kotlin의ReplaceWith기능을 사용하여 임포트를 대체하는 것은 불가능합니다.
- 중요: 드로어블이 동일한 이미지가 아닌 경우 표준 교차 페이드(crossfade)를 사용합니다.
- 중요: API 24 이상에서는 변경 불가능한 비트맵을 선호합니다.
- 중요:
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 이상에서도 여전히 유용할 수 있습니다 (적극적으로
- 신규: 디코딩 중 스레드 인터럽션 지원을 추가합니다.
- 콘텐츠 유형 헤더에서 여러 세그먼트 파싱 문제를 수정합니다.
- 비트맵 참조 카운팅을 재작업하여 더 강력하게 만듭니다.
- API 19 미만 기기에서 WebP 디코딩 문제를 수정합니다.
EventListenerAPI에서FetchResult및DecodeResult를 노출합니다.
- SDK 30으로 컴파일합니다.
- Coroutines를 1.3.8으로 업데이트합니다.
- OkHttp를 3.12.12로 업데이트합니다.
- Okio를 2.7.0으로 업데이트합니다.
- AndroidX 의존성을 업데이트합니다:
androidx.appcompat:appcompat-resources-> 1.2.0androidx.core:core-ktx-> 1.3.1
[0.11.0] - 2020년 5월 14일
- Breaking: 이 버전은 기존의 모든 지원 중단된 함수를 제거합니다.
- 이를 통해 Coil의
ContentProvider를 제거하여 앱 시작 시 어떤 코드도 실행하지 않도록 할 수 있습니다.
- 이를 통해 Coil의
- Breaking:
SparseIntArraySet.size를val로 전환합니다. (#380) - Breaking:
Parameters.count()를 확장 함수로 이동합니다. (#403) - Breaking:
BitmapPool.maxSize를 Int로 만듭니다. (#404)
- 중요:
ImageLoader.shutdown()을 선택적으로 만듭니다 (OkHttpClient와 유사). (#385)
- 기본 메모리 캐시 크기를 20%로 줄입니다. (#390)
- 기존 동작으로 되돌리려면
ImageLoaderBuilder.availableMemoryPercentage(0.25)를 설정하세요.
- 기존 동작으로 되돌리려면
- Coroutines를 1.3.6으로 업데이트합니다.
- OkHttp를 3.12.11으로 업데이트합니다.
[0.10.1] - 2020년 4월 26일
- API 23 이하에서 대용량 PNG 디코딩 시 OOM(메모리 부족) 문제를 수정합니다. (#372).
- 이는 PNG 파일의 EXIF 방향 디코딩을 비활성화합니다. PNG EXIF 방향은 거의 사용되지 않으며, PNG EXIF 데이터를 읽으려면 (비어 있더라도) 전체 파일을 메모리로 버퍼링해야 하므로 성능에 좋지 않습니다.
SparseIntArraySet의 사소한 Java 호환성 개선.
- Okio를 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는 이제 약한 참조 메모리 캐시를 가집니다. 이 캐시는 강한 참조 메모리 캐시에서 제거된 이미지에 대한 약한 참조를 추적합니다.- 이는 이미지에 대한 강한 참조가 여전히 존재하는 경우
ImageLoader의 메모리 캐시에서 이미지가 항상 반환됨을 의미합니다. - 일반적으로 이는 메모리 캐시를 훨씬 더 예측 가능하게 만들고 적중률을 높여야 합니다.
- 이 동작은
ImageLoaderBuilder.trackWeakReferences로 활성화/비활성화할 수 있습니다.
- 이는 이미지에 대한 강한 참조가 여전히 존재하는 경우
비디오 파일에서 특정 프레임을 디코딩하기 위한 새로운 아티팩트
io.coil-kt:coil-video를 추가합니다. 자세한 내용은 여기를 참조하세요.메트릭 추적을 위한 새로운 EventListener API를 추가합니다.
싱글턴 초기화를 단순화하기 위해
Application에서 구현될 수 있는 ImageLoaderFactory를 추가합니다.
전체 릴리스 노트
- 중요: 빌더 구문을 선호하여 DSL 구문을 비권장합니다. (#267)
- 중요:
Coil및ImageLoader확장 함수를 비권장합니다. (#322) - Breaking:
ImageLoader.execute(GetRequest)에서 봉인된(sealed)RequestResult타입을 반환합니다. (#349) - Breaking:
ExperimentalCoil의 이름을ExperimentalCoilApi로 변경합니다.@Experimental에서@RequiresOptIn으로 마이그레이션합니다. (#306) - Breaking:
CoilLogger를Logger인터페이스로 대체합니다. (#316) - Breaking:
destWidth/destHeight이름을dstWidth/dstHeight로 변경합니다. (#275) - Breaking:
MovieDrawable의 생성자 파라미터를 재정렬합니다. (#272) - Breaking:
Request.Listener의 메서드는 이제 데이터만 받는 대신 전체Request객체를 받습니다. - Breaking:
GetRequestBuilder는 이제 생성자에Context를 요구합니다. - Breaking:
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) - 수정: 고색상 심도 이미지 디코딩 문제를 수정합니다. (#358)
- 수정: Android 11 이상에서
ImageDecoderDecoder충돌 우회 문제를 비활성화합니다. (#298) - 수정: API 23 미만에서 EXIF 데이터를 읽지 못하는 문제를 수정합니다. (#331)
- 수정: Android R SDK와의 비호환성 문제를 수정합니다. (#337)
- 수정:
ImageView에 일치하는SizeResolver가 있는 경우에만 부정확한 크기를 활성화합니다. (#344) - 수정: 캐시된 이미지가 요청된 크기에서 최대 1픽셀 오차를 가질 수 있도록 허용합니다. (#360)
- 수정: 뷰가 보이지 않으면 교차 페이드 전환을 건너뜁니다. (#361)
CoilContentProvider를 비권장합니다. (#293)- 여러
ImageLoader메서드에@MainThread주석을 추가합니다. - 라이프사이클이 현재 시작된 경우
LifecycleCoroutineDispatcher생성을 방지합니다. (#356) OriginalSize.toString()에 전체 패키지 이름을 사용합니다.- 소프트웨어 비트맵 디코딩 시 사전 할당합니다. (#354)
- Kotlin을 1.3.72로 업데이트합니다.
- Coroutines를 1.3.5로 업데이트합니다.
- OkHttp를 3.12.10으로 업데이트합니다.
- Okio를 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님께 감사드립니다.
- 이전에는 비트맵이 요청에서 지정된 구성과 같거나 그보다 큰 구성인 한 메모리 캐시에서 반환되었습니다. 예를 들어,
ARGB_8888비트맵을 요청하면RGBA_F16비트맵이 메모리 캐시에서 반환될 수 있었습니다. 이제 캐시된 구성과 요청된 구성이 같아야 합니다. CrossfadeDrawable및CrossfadeTransition에서scale및durationMillis를 공개 API로 만듭니다.
[0.9.3] - 2020년 2월 1일
- 수정:
ScaleDrawable내부의 자식 드로어블이 중앙에 위치하도록 이동합니다. - 수정: GIF 및 SVG가 경계를 완전히 채우지 못하는 경우를 수정합니다.
HttpUrl.get()호출을 백그라운드 스레드로 지연합니다.BitmapFactorynull 비트맵 오류 메시지를 개선합니다.- 하드웨어 비트맵 블랙리스트에 3개의 기기를 추가합니다. (#264)
- AndroidX 의존성을 업데이트합니다:
androidx.lifecycle:lifecycle-common-java8-> 2.2.0
[0.9.2] - 2020년 1월 19일
- 수정: API 19 미만에서 GIF 디코딩 문제를 수정합니다. @mario님께 감사드립니다.
- 수정: 래스터화된 벡터 드로어블이 샘플링된 것으로 표시되지 않는 문제를 수정합니다.
- 수정:
Movie치수가 0 이하인 경우 예외를 발생시키도록 합니다. - 수정: 메모리 캐시 이벤트에 대해
CrossfadeTransition이 다시 시작되지 않는 문제를 수정합니다. - 수정: 허용되지 않는 경우 하드웨어 비트맵을 모든 타겟 메서드에 반환하는 것을 방지합니다.
- 수정:
MovieDrawable이 경계의 중앙에 자체적으로 위치하지 않는 문제를 수정합니다.
CrossfadeDrawable에서 자동 스케일링을 제거합니다.BitmapPool.trimMemory를 공개 API로 만듭니다.AnimatedImageDrawable을ScaleDrawable로 감싸 경계를 채우도록 합니다.RequestBuilder.setParameter에@JvmOverloads를 추가합니다.- SVG의 뷰 박스가 설정되지 않은 경우 SVG의 뷰 박스를 크기로 설정합니다.
- 상태 및 레벨 변경을
CrossfadeDrawable자식에게 전달합니다.
- OkHttp를 3.12.8으로 업데이트합니다.
[0.9.1] - 2019년 12월 30일
- 수정:
LoadRequestBuilder.crossfade(false)호출 시 충돌 문제를 수정합니다.
[0.9.0] - 2019년 12월 30일
- Breaking:
Transformation.transform은 이제Size파라미터를 포함합니다. 이는Target의 크기에 따라 출력Bitmap의 크기를 변경하는 변환을 지원하기 위함입니다. 변환을 사용하는 요청은 이제 이미지 샘플링에서도 제외됩니다. - Breaking:
Transformation은 이제 모든 유형의Drawable에 적용됩니다. 이전에는 입력Drawable이BitmapDrawable이 아닌 경우Transformation이 건너뛰어졌습니다. 이제Drawable은Transformation을 적용하기 전에Bitmap으로 렌더링됩니다. - Breaking:
ImageLoader.load에null데이터를 전달하는 것은 이제 오류로 처리되며Target.onError및Request.Listener.onError를NullRequestDataException과 함께 호출합니다. 이 변경은 데이터가null일 때fallback드로어블을 설정하는 것을 지원하기 위해 이루어졌습니다. 이전에는 요청이 조용히 무시되었습니다. - Breaking:
RequestDisposable.isDisposed는 이제val입니다.
- 신규: 사용자 지정 전환을 지원합니다. 자세한 내용은 여기를 참조하세요. 전환은 API가 인큐베이팅 중이므로 실험적으로 표시됩니다.
- 신규:
LoadRequest가 진행 중인 동안 일시 중단하는 것을 지원하기 위해RequestDisposable.await를 추가합니다. - 신규: 요청 데이터가 null일 때
fallback드로어블을 설정하는 것을 지원합니다. - 신규:
Precision을 추가합니다. 이는 출력Drawable의 크기를 정확하게 만들면서 스케일링을 지원하는 타겟(예:ImageViewTarget)에 대한 스케일링 최적화를 가능하게 합니다. 자세한 내용은 문서를 참조하세요. - 신규: 여러 캐시 키를 일치시키는 것을 지원하기 위해
RequestBuilder.aliasKeys를 추가합니다.
- 수정:
RequestDisposable를 스레드 안전하게 만듭니다. - 수정:
RoundedCornersTransformation이 이제 타겟 크기에 맞춰 자른 다음 모서리를 둥글게 처리합니다. - 수정:
CircleCropTransformation이 이제 중앙에서 자릅니다. - 수정: 하드웨어 비트맵 블랙리스트에 여러 기기를 추가합니다.
- 수정: 드로어블을 비트맵으로 변환할 때 가로세로 비율을 유지합니다.
- 수정:
Scale.FIT사용 시 잠재적인 메모리 캐시 미스 문제를 수정합니다. - 수정:
Parameters반복 순서가 확정적인지 확인합니다. - 수정:
Parameters및ComponentRegistry생성 시 방어적 복사를 수행합니다. - 수정:
RealBitmapPool의maxSize가 0 이상인지 확인합니다. - 수정:
CrossfadeDrawable이 애니메이션 중이 아니거나 완료된 경우 시작 드로어블을 표시합니다. - 수정: 고유 크기가 정의되지 않은 자식을 처리하도록
CrossfadeDrawable을 조정합니다. - 수정:
MovieDrawable이 제대로 스케일링되지 않는 문제를 수정합니다.
- Kotlin을 1.3.61으로 업데이트합니다.
- Kotlin Coroutines를 1.3.3으로 업데이트합니다.
- Okio를 2.4.3으로 업데이트합니다.
- AndroidX 의존성을 업데이트합니다:
androidx.exifinterface:exifinterface-> 1.1.0
[0.8.0] - 2019년 10월 22일
- Breaking:
SvgDrawable이 제거되었습니다. 대신 SVG는 이제SvgDecoder에 의해BitmapDrawable로 사전 렌더링됩니다. 이로 인해 SVG는 메인 스레드에서 렌더링하는 데 드는 비용이 크게 절감됩니다. 또한SvgDecoder는 이제 생성자에Context를 요구합니다. - Breaking:
SparseIntArraySet확장 함수가coil.extension패키지로 이동했습니다.
- 신규: 요청별 네트워크 헤더 설정 지원을 추가합니다. 자세한 내용은 여기를 참조하세요.
- 신규: 이미지 파이프라인을 통해 사용자 지정 데이터를 전달하는 것을 지원하는 새로운
ParametersAPI를 추가합니다. - 신규:
RoundedCornersTransformation에서 개별 코너 반지름을 지원합니다. @khatv911님께 감사드립니다. - 신규: 선제적으로 리소스를 해제하는 것을 지원하기 위해
ImageView.clear()를 추가합니다. - 신규: 다른 패키지에서 리소스를 로드하는 것을 지원합니다.
- 신규:
ViewSizeResolver에subtractPadding속성을 추가하여 측정 시 뷰의 패딩을 빼는 것을 활성화/비활성화할 수 있도록 합니다. - 신규:
HttpUrlFetcherMIME 유형 감지를 개선합니다. - 신규:
MovieDrawable및CrossfadeDrawable에Animatable2Compat지원을 추가합니다. - 신규: GIF의 반복 횟수를 설정하기 위해
RequestBuilder<*>.repeatCount를 추가합니다. - 신규:
BitmapPool생성 기능을 공개 API로 추가합니다. - 신규:
Request.Listener메서드에@MainThread주석을 추가합니다.
- 수정:
CoilContentProvider를 테스트를 위해 보이도록 만듭니다. - 수정: 리소스 캐시 키에 야간 모드를 포함합니다.
- 수정:
ImageDecoder네이티브 충돌을 우회하기 위해 소스를 임시적으로 디스크에 씁니다. - 수정: 연락처 표시 사진 URI를 올바르게 처리합니다.
- 수정:
CrossfadeDrawable의 자식에게 틴트를 전달합니다. - 수정: 소스를 닫지 않는 여러 경우를 수정합니다.
- 수정: 손상되거나 불완전한 하드웨어 비트맵 구현을 가진 기기 블랙리스트를 추가합니다.
- SDK 29에 대해 컴파일합니다.
- Kotlin Coroutines를 1.3.2로 업데이트합니다.
- OkHttp를 3.12.6으로 업데이트합니다.
- Okio를 2.4.1으로 업데이트합니다.
coil-base에 대해appcompat-resources를 선택적compileOnly의존성으로 변경합니다.appcompat-resources는 훨씬 더 작은 아티팩트입니다.
[0.7.0] - 2019년 9월 8일
- Breaking:
ImageLoaderBuilder.okHttpClient(OkHttpClient.Builder.() -> Unit)는 이제ImageLoaderBuilder.okHttpClient(() -> OkHttpClient)입니다. 초기화 프로그램도 이제 백그라운드 스레드에서 지연 호출됩니다. 사용자 지정OkHttpClient를 설정하는 경우 디스크 캐싱을 활성화하려면OkHttpClient.cache를 설정해야 합니다. 사용자 지정OkHttpClient를 설정하지 않으면 Coil은 디스크 캐싱이 활성화된 기본OkHttpClient를 생성합니다. 기본 Coil 캐시는CoilUtils.createDefaultCache(context)를 사용하여 생성할 수 있습니다. 예:
val imageLoader = ImageLoader(context) {
okHttpClient {
OkHttpClient.Builder()
.cache(CoilUtils.createDefaultCache(context))
.build()
}
}- Breaking:
Fetcher.key는 더 이상 기본 구현을 가지지 않습니다. - Breaking: 이전에는 첫 번째 적용 가능한
Mapper만 호출되었습니다. 이제 모든 적용 가능한Mapper가 호출됩니다. API 변경은 없습니다. - Breaking: 사소한 이름 지정 파라미터 이름 변경:
url->uri,factory->initializer.
- 신규: SVG를 자동으로 디코딩하는
SvgDecoder를 포함하는coil-svg아티팩트. AndroidSVG에 의해 구동됩니다. @rharter님께 감사드립니다. - 신규:
load(String)및get(String)은 이제 지원되는 모든 Uri 스킴을 허용합니다. 예: 이제imageView.load("file:///path/to/file.jpg")를 사용할 수 있습니다. - 신규:
ImageLoader를Call.Factory를 사용하도록 리팩터링합니다. 이는ImageLoaderBuilder.okHttpClient { OkHttpClient() }를 사용하여 네트워킹 리소스의 지연 초기화를 가능하게 합니다. @ZacSweers님께 감사드립니다. - 신규: 요청에 대한 디코더를 명시적으로 설정하기 위한
RequestBuilder.decoder를 추가합니다. - 신규:
ImageLoader에 대해 기본적으로 하드웨어 비트맵을 활성화/비활성화하기 위한ImageLoaderBuilder.allowHardware를 추가합니다. - 신규:
ImageDecoderDecoder에서 소프트웨어 렌더링을 지원합니다.
- 수정: 벡터 드로어블 로드에 대한 여러 버그.
- 수정:
WRAP_CONTENT뷰 치수를 지원합니다. - 수정: 8192바이트보다 긴 EXIF 데이터 파싱을 지원합니다.
- 수정: 교차 페이드 시 가로세로 비율이 다른 드로어블을 늘리지 않도록 합니다.
- 수정: 예외로 인해 네트워크 옵저버 등록 실패에 대비합니다.
- 수정:
MovieDrawable의 0으로 나누기 오류를 수정합니다. @R12rus님께 감사드립니다. - 수정: 중첩된 Android 에셋 파일을 지원합니다. @JaCzekanski님께 감사드립니다.
- 수정: Android O 및 O_MR1에서 파일 디스크립터 고갈에 대비합니다.
- 수정: 메모리 캐시 비활성화 시 충돌하지 않도록 합니다. @hansenji님께 감사드립니다.
- 수정:
Target.cancel이 항상 메인 스레드에서 호출되도록 합니다.
- Kotlin을 1.3.50으로 업데이트합니다.
- Kotlin Coroutines를 1.3.0으로 업데이트합니다.
- OkHttp를 3.12.4로 업데이트합니다.
- Okio를 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의존성으로).appcompat-resources는 훨씬 더 작은 아티팩트입니다.
[0.6.1] - 2019년 8월 16일
- 신규:
RequestBuilder에transformations(List<Transformation>)를 추가합니다. - 수정: 파일 URI의 캐시 키에 최종 수정 날짜를 추가합니다.
- 수정: 뷰 치수가 최소 1px로 평가되도록 합니다.
- 수정:
MovieDrawable의 캔버스를 프레임 간에 지웁니다. - 수정: 에셋을 올바르게 엽니다.
