Я написал преобразование J2ME в Brew, которое используется в Javaground. Вполне возможно написать многократное разрешение, единственный двоичный код. У нас есть база данных об ошибках устройства, так что она может определять идентификатор устройства через платформу и затем генерировать серию флагов, которые отмечают, какие ошибки помечены. Например, большинство (если не все) телефонов Motorola Brew имеют ошибку, при которой входящий звонок не прерывает приложение, пока вы не ответите на звонок, поэтому я использую TAPI для отслеживания входящего звонка и генерирования события hideNotify (так как мы эмулируя Java, хотя сгенерированный код - чистый C ++). Я делаю некоторые проверки во время выполнения для версии Brew и отключаю некоторые API, если это Brew 2, а не Brew 3.
В играх типа 3D проще сделать разрешение независимым, поскольку вы масштабируете программное обеспечение.
Также есть 2 отдельных API для звука, IMEDIA и ISOUNDPLAYER, ISOUNDPLAYER является более старым API и поддерживается на всех устройствах, но не имеет такого количества возможностей (вы можете делать многоканальный звук только с помощью IMEDIA). Я создаю объект IMEDIA, и он будет вынужден создать объект ISOUNDPLAYER, если он не сможет получить объект IMEDIA.
Проблема с полностью универсальной сборкой состоит в том, что существует большая разница в возможностях, поэтому может быть целесообразно иметь несколько сборок, более старые устройства имеют только 1 МБ кучи (и небольшой размер экрана), а затем вы получить много с 6MB + (176x204 и более).
С Brew у вас есть довольно согласованный набор значений клавиш (в отличие от Java), хотя некоторые из новых устройств - это сенсорный экран (и вы должны обрабатывать ввод указателя) и вращающиеся экраны.
Есть также некоторые старые телефоны Nokia, которые используют режим с прямым порядком байтов, что означает, что файлы не совпадают с обычными файлами мода (если вы не хотите написать ДЕЙСТВИТЕЛЬНО крутой заголовок префикса языка ассемблера, который декодирует файл)