Question

I want to port some existing j2se libraries (e.g. Apache Compression libs) to use for Blackberry development, but there is a catch (and not just one).

First, most java libs extensively use j2se collections and data types that are typically missing on j2me platforms — but that's theoretically solvable thanks to open-source j2se api implementations like Apache Harmony. The bigger problem is that, it seems, Blackberry JDK is based on java 1.4, so any code that uses generics and other 1.5 features, like Enums, is not effortlessly compilable on Blackberry.

Which raises an interesting question of whether there are any existing tools or projects out there that would do automatic 1.5->1.4 conversion, while supporting j2me-bastardized bytecode :)

One project I was able to find is Retroweaver, but I'm not quite sure how active that project is.

I'm sure the problem of 1.5->1.4 automatic conversion isn't unique -- so does anybody have any experience with it?

Was it helpful?

Solution 4

So here's what I ended up doing so far: Declawer + some custom code for enumeration classes generation.

The one differentiating thing about Declawer is that, although it's very simple and, frankly, a bit of a hack (it relies on an undocumented capability of JavaC), its output is actual Java code as compared to enhanced or converted Java bytecode. That's very precious for mobile java-based development as, frankly, bytecode modification/instrumentation is not at all as developed for j2me platforms as it is for j2se, and there are just no guarantees that things are going to work out of the box the way they do with j2se where these tools have already been used by quite a few developers.

Declawer's functionality is limited (no love for 1.5 enums or autoboxing), so I had to add a python script to automatically generate classes equivalent in functionality to 1.5 enums from simple descriptors. This generation happens at build time.

This addresses my concerns so far, with the only exception of finding a good j2me-friendly IoC container to use for my app (once you try these guys, it's so hard to give them up.)

But that's a discussion for a different thread.

OTHER TIPS

Have you tried Retrotranslator? I read that it does a better job than Retroweaver.

Here's something else I found here on stack overflow:

Compiling with the regular javac and targeting an older JVM will give you proper bytecode for generics at least

Which absolutely makes sense to try.

I've used retroweaver in the past (J2SE, not J2ME) - it worked really well. The cost of using it is a couple extra runtime dependencies.

Update 2013-01-28: After running into problems with RetroWeaver, I've switched to RetroTranslator.

Here's two more tools that I found (linked to from Retrotranslator's page):

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top