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

时间:2009-06-05 22:05:35

标签: java java-me bytecode downgrade

我想移植一些现有的j2se库(例如Apache Compression库)来用于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自动转换的问题不是唯一的 - 所有人都有使用它的经验吗?

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

我过去曾使用过retroweaver(J2SE,而不是J2ME) - 它运行得非常好。使用它的成本是一些额外的运行时依赖性。

更新2013-01-28 :在遇到RetroWeaver问题后,我已切换到RetroTranslator

答案 2 :(得分:2)

这是我在堆栈溢出时发现的something else

  

使用常规javac进行编译并针对较旧的JVM,至少可以为泛型提供正确的字节码

尝试绝对有意义。

答案 3 :(得分:1)

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

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

声明的功能是有限的(不爱1.5枚枚举或自动装箱),所以我不得不添加一个python脚本来自动生成与简单描述符中1.5枚举的功能等效的类。这一代发生在构建时。

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

但这是对不同主题的讨论。

答案 4 :(得分:0)

这是我找到的另外两个工具(链接到Retrotranslator的页面):