Прошло много времени с тех пор, как я задал этот вопрос, и я с тех пор как нашел хорошее, работающее решение этой проблемы, но с тех пор я забыл вам сказать.
Мое основное внимание было уделено Java Collections Framework, который является частью пакета java.util
.
Я наконец-то взял исходный код Suns Java 6.0 и скопировал все классы, принадлежащие платформе Collections, в собственный проект. Это был проект Java 6.0, но я использовал jar из J2ME в качестве пути к классам. Большинство из тех классов, которые я скопировал, зависят от других классов J2SE, поэтому существуют неработающие зависимости. Во всяком случае, было довольно легко сократить эти зависимости, оставив все, что связано с сериализацией (что для меня не является приоритетом) и некоторые незначительные корректировки.
Я скомпилировал все это с помощью компилятора Java 6, и ретротранслятор использовался для переноса полученного байт-кода обратно на Java 1.2.
Следующая проблема - имя пакета, потому что вы не можете доставлять классы из java.util
с помощью приложения J2ME и загружать их - загрузчик классов начальной загрузки не будет просматривать файл jar приложений, другие загрузчики не допускаются чтобы загрузить что-то с этим именем пакета, а в J2ME вы не можете определить собственные загрузчики классов. Retrotranslator не только преобразует байт-код, но также помогает изменять ссылки на имена в существующем байт-коде. Мне пришлось переместить и переименовать все классы в моем проекте, например, java.util.TreeMap
стал my.company.backport.java.util.TreeMap_
.
Мне удалось написать настоящее приложение J2ME во втором проекте Java 6.0, который ссылался на обычный java.util.TreeMap
, используя общий синтаксис для создания безопасных типов типов, скомпилировать это приложение в байт-код Java 6.0 и запустить его через ретротранслятор для создания кода Java 1.2, который теперь ссылается на my.company.backport.java.util.TreeMap_
. Обратите внимание, что TreeMap
является лишь примером, он на самом деле работает для всей структуры коллекций и даже для J2SE Jar сторонних производителей, которые ссылаются на эту среду.
Полученное приложение можно упаковать в файл jar и jad, и оно отлично работает как на эмуляторах J2ME, так и на реальных устройствах (протестировано на Sony Ericsson W880i).
Весь процесс кажется довольно сложным, но, поскольку я использовал Ant для автоматизации сборки, и мне все равно требовался ретранслятор, потребовались только одноразовые накладные расходы для настройки обратного порта инфраструктуры сбора.
Как уже говорилось выше, я делал это почти год назад, и писал это в основном из головы, поэтому я надеюсь, что в этом нет ошибок. Если вы заинтересованы в более подробной информации, оставьте мне комментарий. У меня есть несколько страниц немецкой документации об этом процессе, которую я мог бы предоставить, если есть какая-либо потребность.