将Java代码降级1.5到1.4(奖励积分:J2ME,Blackberry !!!)

Pau*_*nov 7 java bytecode downgrade java-me

我想移植一些现有的j2se库(例如Apache Compression libs)来用于Blackberry开发,但是有一个问题(而不仅仅是一个).

首先,大多数java库广泛使用j2me平台上通常缺少的j2se集合和数据类型 - 但由于Apache Harmony这样的开源j2se api实现,这在理论上是可解决的.更大的问题是,看起来,Blackberry JDK基于java 1.4,所以任何使用泛型和其他1.5功能的代码,如Enums,都不能毫不费力地在Blackberry上编译.

这提出了一个有趣的问题,即是否有任何现有的工具或项目可以进行自动1.5-> 1.4转换,同时支持j2me-bastardized字节码:)

我能找到的一个项目是Retroweaver,但我不太确定该项目有多活跃.

我敢肯定1.5-> 1.4自动转换的问题并不是唯一的 - 所以有人有这方面的经验吗?

Mih*_*age 7

你试过Retrotranslator吗?我读到它比Retroweaver做得更好.


Pau*_*nov 1

所以这就是我到目前为止所做的:Declawer + 一些用于生成枚举类的自定义代码。

Declawer 的一个与众不同之处在于,虽然它非常简单,而且坦率地说,有点像 hack(它依赖于 JavaC 的未记录功能),但与增强或转换的 Java 字节码相比,它的输出是实际的 Java 代码。这对于基于 java 的移动开发来说非常宝贵,因为坦率地说,字节码修改/检测根本不像为 j2se 那样为 j2me 平台开发,并且不能保证事情会按开箱即用的方式工作他们使用 j2se,这些工具已经被相当多的开发人员使用。

Declawer 的功能有限(不喜欢 1.5 枚举或自动装箱),因此我必须添加一个 python 脚本来从简单的描述符自动生成功能与 1.5 枚举等效的类。这一代发生在构建时。

这解决了我到目前为止的担忧,唯一的例外是找到一个良好的 j2me 友好的 IoC 容器用于我的应用程序(一旦你尝试了这些家伙,就很难放弃它们。)

但这是针对不同线程的讨论。