AndroidNativeCanvas
KiteCanvas backed by android.graphics.Canvas.
This is the right choice on Android when you don't want Compose: pass a Canvas from your custom View's onDraw(Canvas) override straight into the constructor and the renderer paints into it.
Pair with AndroidPdfBitmapRenderer for the "render a PDF page into a Bitmap" use case.
Blend modes require API 29+ (Paint.setBlendMode). The module's minSdk is 29 to match. See kitepdf-native-renderer/module.yaml.
Functions
A non-isolated group at full alpha in Normal paints straight onto its backdrop, so its blend modes see what lies under it (ISO 32000-1, 11.4.5, #125). Any other group paints into a layer. An Android layer always starts transparent, which is exact for a non-isolated group only when no paint inside blends. In a knockout group (11.4.6) each paint replaces what lies under it inside its shape.
The outline of text in the logical font drawGlyphs draws a font without embedded outlines in, at 1000 units per em with y up (#85). Null before API 34, which has no way to walk a path.
The raster step (#209, #308): its box is region under ctm, which maps to this canvas's pixels, cut to the clip. A render paints into a bitmap of the box. Only a canvas over a known target bitmap reads a backdrop, and only outside every layer. Past STEP_MAX_PIXELS the step works at a lower resolution, and then reads no backdrop.