Или немножко ненависти к Андроиду...
Задача: вывести в WebView html-файл из памяти. Проблема - интерфейс для получения html-файла, который надо реализовать, должен возвращать ParcelFileDescriptor - по сути, обернутый в три одеяла unix fd (!). Соответственно, из памяти данные просто так не вернешь. Идея - создать socketpair(), один из них вернуть, в другой писать в отдельном треде. Проблема - ни socketpair(), ни возможности завернуть в три одеяла собственные fd и вернуть их - нет. Решение - открываем /dev/null на запись в одной обертке, /dev/zero на чтение в другой, получаем пару ненужных нам fd, обернутых в одеяла, затем через jni создаем socketpair, вручную достаем из оберток эти fd, закрываем их и подменяем на наши от socketpair. Я часа три занимался созданием этого франкенштейна, и в результате, когда я самостоятельно использую возвращаемый мной объект, всё работает. А WebView - использовать этот интерфейс так и не хочет, рисует текст об ошибке. Лезем в гугл (в стотысячный раз по истечении третьего часа). Находим багрепорт двухлетней давности о том, что функциональность работы с fd-сокетами, хотя и является легальной, была всё равно поломана в версии 1.6, и чинить её не торопятся. Вот такое вот "выкрасить да выбросить"...