Repository navigation
v0.5.0-preview.1
Pre-release- Adds short looping video.
AssetClient.resolveVideo(ref)returnsResolvedVideo(sourceREMOTE,CACHEorPOSTER,sequence,message,file,width,height,durationMs,frameRate) for a placement's base slot.resolvenever downloads a clip. Only the latest accepted release downloads; retained releases are cache-only. As for Lottie animations, a missing current clip returnsPOSTER, and a current clip that cannot be used first recovers from the newest verified cached clip of an earlier release. Every use, including each cache read, checks the signed length and SHA-256 and a bounded header walk (ftypfirst,moovbefore the firstmdat, nomoof, anavc1sample entry at the signed size). Any failure returnsPOSTER, and the app shows the ordinary image or its bundled fallback. - Validates
videoSchemaVersionandvideo. The version, when present, must be exactly 1 (null or any other value rejects the manifest);videowithout it, on a variant cell, or besideanimationrejects the manifest. The descriptor must bemp4/h264-loop-v1/video/mp4with a lowercase hexsha256, 1–4,194,304bytes, evenwidthandheightof 16–1280 with at most 921,600 pixels in exactly the slot's aspect ratio, integerdurationMs1,000–10,000, a finite numericframeRate1–30, and the exact same-origin path/api/delivery/{orgId}/{appId}/assets/{assetId}/videos/{sha256}.animationSchemaVersionstays ignored. FileAssetStorageimplements the newAssetVideoStorageand keeps clips as<sha256>.mp4incacheDir, within the existing 50 MiB / 100-entry budget and least-recently-used eviction. Custom storage without it getsPOSTER. AddsLimits.VIDEO_BYTES(4 MiB) andAssetVideoSource.AssetTransportgainsget(url, maxBytes, accept), which defaults to the two-argument call, and the client now names the media type for every request:application/json, the candidate's own image type (PNG renditions sendimage/png, notimage/webp), orvideo/mp4.HttpsTransportgainsvideoTimeoutMillis(default 30,000, allowed 20–30,000) forvideo/mp4calls;HttpsTransport(timeoutMillis)still compiles.- The clip download runs outside the client's mutex, so a slow clip does not hold up image resolution. The cache no longer evicts the entry it has just written when modification times tie.
- No player dependency: the README shows Media3 1.11.x in the app. Not verified on an emulator or a device.
- Vendors the shared corpus with 27 video manifests (142 signed manifest cases),
video.jsonand theloop.mp4clip fixtures.
Recompile consuming applications when replacing the AAR. New public types (ResolvedVideo, AssetVideoSource, AssetVideoStorage), the new AssetTransport method and the HttpsTransport constructor change JVM signatures.
- Code generation rejects a group or member named
AppAssets,AssetRef,AssetAccessibilityorAssetRendering, as the Swift generator does for its own generated names.AssetRenderingproduced Kotlin that did not compile when the catalog had a template placement; the other three shadowed the generated root object or the imported SDK types. - Code generation rejects two groups that differ only in case (their class files overwrite each other on case-insensitive file systems, so one object is missing at run time) and two members of one group that compile to the same JVM getter, such as
coastandCoast, which did not compile. - A package segment that is a Kotlin hard keyword, such as
isorfun, is escaped with backticks; the unescapedpackageline did not compile. - Any other catalog generates byte-identical output. SDK sources and the AAR are unchanged.
Validation on October 11, 2026: codegen tests (5), 114 JVM unit tests with the optional hosted test skipped, lint, and the release build passed (./gradlew :sdk:testDebugUnitTest :sdk:lint :sdk:assembleRelease, JDK 17). assetlib-android-0.5.0-preview.1.aar SHA-256 b31e8508e7e039c1920ae80e944edc606283d0272f09d092d039236cc8333039 (macOS build). No emulator or device run, and no Media3 playback, is claimed. See VERIFICATION.md.
AAR SHA-256: b31e8508e7e039c1920ae80e944edc606283d0272f09d092d039236cc8333039 assetlib-android-0.5.0-preview.1.aar