> Uri like 'assets:/dir/subdir/image.png' looks ugly for me.

It may be ugly, but it's RFC-compliant.

> I still need to remove the leading slash in order to pass the path to AssetsManager.open

That's fine. It's much simpler than the solution you have now as well and it's guaranteed to always be present.

> It makes the API inconsistent: http uri requires 2 slashes (e.g., http://google.com), file uri requires 3 slashes (e.g., 
file:///mnt/sdcard/image.png) and assets uri requires only one slash.

HTTP has an authority which is why it has two slashes. The path in a URL still prefixed by a single slash. The three-slash file variant is just an empty authority. `file:/foo/bar` is perfectly valid.