BlackBerry JRE independent java coding - blackberry

How can i develop BlackBerry JRE independent java code for an application. Here we have so many types of JREs for blackberry so i would like to run my code in all versions without having code modifications. For example, in iphone we use preprocessor statements to avoid versioning problem like that do we have any alternatives?
Thanks
venu

There is a preprocessor for BB as well. See the docs for how to use it.

Related

Any way to use some Scala for iOS coding?

I want to be able to use Scala to code iOS programs. Any tools available for this ?
You can run JavaScript on iOS, so you could compile your Scala to JavaScript using Scala.js. This has obvious huge limitations - I wouldn't want to try to code actual native iOS UI - but might be practical for some cross-platform logic. Combining this with React Native might be interesting.
There's also Scala Native as of a couple months ago; that should probably run on iOS. It's not ready for production use, but keep an eye on it.
Well, now you can use RoboVM - a Java library for native IOS development
See also:
an SBT plugin for RoboVM https://github.com/roboscala/sbt-robovm
A blog post aboute Scala development for IOS http://ajhager.com/
Not today, but it may be close:
http://java.dzone.com/articles/oracle-gets-java-running-ios
http://www.oracle.com/technetwork/developer-tools/adf/overview/adf-mobile-096323.html
But, while Apple directly opposes the use of the JVM on iOS devices, it will make little sense to go that way (it's still early days). You will run into one obstacle after another, and won't have any guarantee that the code you write today, will run on the iOS of tomorrow.
Sit on the sideline with your Android, Ubuntu and popcorn, and let the big guys fight it out.
In the meantime.... you can write a thin front-end in PhoneGap (which works on most modern mobile devices), your services with Spray and have fun with your back-end in Scala.
I recently developed a toolchain based on IKVM and MonoTouch that allows you to develop iOS apps in Scala. I put together a demo of the toolchain here:
https://github.com/samskivert/ios-scala-demo
Currently Codename One doesn't have builtin support for Scala but it supports Kotlin reasonably well. There is a blog post here that covers the process of adapting Codename One to support other JVM languages. By doing that you can instantly get support for other platforms such as iOS, UWP, JavaScript/Web, Android & desktop mac/windows for free.
The core of Codename One which includes the VM's, API's and most of the tools is open source.

Compiling different scetions for different version - Java

Is there any way to compile BlackBerry Java code for different sections using eclipse ?
There is a class named LocationInfo available in BB version OS 6.0 onwards.
I get a compilation error if try to compile for OS 5 (because LocationInfo is
not defined)
But if I compile my code for OS 6, I wont be able to deploy on any 5 based devices.
I want to my code base to be of version 5 and support the methods of Locationinfo (which is available only in 6.0 onwards).
Is a sectional compile possible or is there any work around for this ?
Thanks
Try the BlackBerry preprocessor
Coding for Multiple Blackberry Devices - Using Preprocessor Directives in Eclipse
The OP wanted to know whether there was a way to a class available in os 6.0 , in an os 5.0 device. The blackberry processor does help in creating builds for different versions, but doesnt answer the question. The OP would like to know whether there is the blackberry equivalent to androids "Support Package" or the "Compatibility package" which allows to use APIs that are not available for older platform versions.
Sorry , but there is no similar package on blackberry which you can use to address your issue.
You will have to use blackberry pre processor and then develop features for different devices based on the os they provide. Later OS's will have more apis you can play with, so you can implement better features on those. In earlier OS's you are stuck with using the restricted set of api methods, and hence some features may not be implemented on those.
Hope this helps

What do you need to do to create a single package for blackberry OS5 and OS6 devices?

A newb question and one I haven't been able to see much advice on, but is it possible to create a single package that will install and run on both blackberry OS5 and OS6 devices?
I want to avoid preprocessing or creation of two different COD files.
I am not using anything special that differs between the two OS's (afaik!)
Yes, absolutely. So far, RIM has made all of it's OS revisions backwards-compatible. So anything you write against any given OS version will work on that version and all newer versions.
That's not to say that you won't run into funny quirks when moving to newer OS versions, but your code will execute without recompilation. You just can't take advantage of any of the newer OS's API changes without doing preprocessing.
Basically in this case you just should not use APIs which were added in OS6.

Blackberry dev - Question about jre 1.5

I THINK I know the answer to this, but can't find any plain English to confirm it.
I am currently porting an Android app to blackberry. I've gotten over most problems, but ArrayLists are the one I'm stuck on, since they were only introduced in 1.5 .
Can anyone tell me if it is possible to develop for newer blackberry devices, while having java compliance set to 1.5?
I'm thinking that J2ME is the deciding factor with blackberry. So if that only supports 1.3, then EVERY app made for blackberry must be written in eclipse with a compliance level of 1.3 set, and any newer blackberrys would be the same, and therefore ArrayLists are impossible.
Can someone confirm this for me?
Thanks.
PS Would it be possible to create my own ArrayList class, with the angle brackets < > as well?
You have to use Java 1.4 compliance for BlackBerry because they use J2ME.
Use Vector for your dynamic list. You can't use Generics<>.

Enable generics in blackberry jde 4.5.0

When i compiled my application in blackberry it shows the following error.
generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
how to solve this
Java 1.3 is barbaric and no one should ever have to suffer its indignities. Fortunately, there is a solution!
Generics, enums, changing return signature in overrides, and pretty much everything that makes java usable was introduced in java 1.5. (see http://en.wikipedia.org/wiki/Java_version_history). Fortunately, most of java 1.5 was designed to be backwards compatible and not require JVM / bytecode changes. (or maybe this was unfortunate, as it lead Java's implementation of generics to be much weaker than C#. just try creating a generic class with static methods / fields that use the generic parameter)
This IBM article does a good job of explaining the background:
http://www.ibm.com/developerworks/java/library/j-jtp02277.html
But this JVM similarity allowed for creation of tools such as:
http://retrotranslator.sourceforge.net/
This is the section from my Ant buildfile that calls retrotranslator:
&lt java jar="${transformer.jar.exe}"
fork="true"
classpath="${epic-framework.dir}/tools/retrotranslator-runtime13-1.2.9.jar:${epic-framework.dir}/tools/retrotranslator-runtime-1.2.9.jar"
args="-srcjar ${build.dir}/classes5.jar -target 1.3 -destjar ${build.dir}/classes5to3.jar"
/>
Run the converted jar through preverify.exe and then give it to rapc.exe and you will have a working Blackberry app written with Java 1.5.
Edit: I missed a key detail in my original post. In addition to being Java 1.3, the Blackberry class hierarchy is missing many classes that would normally be a part of a Java SE 1.3 JDK. The one you will hit first is StringBuilder -- javac transforms ("string" + "otherstr" + "blah blah") into StringBuilder.append("string").append("otherstr").append("blah blah"). That class doesn't exist on BB, so you break. However, BB has StringBuffer, so writing an adapter between the two is pretty easy. The one catch is that BB disallows apps from adding classes into java.*. This can be very effectively fixed in the build process: 1) build your app against Java 1.5 w/ java.lang.StringBuilder on the classpath, 2) string transform java.lang.Stringbuilder (and everything else in your compat shim) to live in com.mycorp.java.lang.StringBuilder and build it into a JAR file. 3) Use that JAR file w/ retrotranslator and retrotranslator will update all bytecode references to java.lang.StringBuilder so that they now point to com.mycorp.java.lang.StringBuilder. Now you have a java 1.3 compatible bytecode that can be run on a Blackberry.
If anyone is interested in this stuff, contact me. I could look into open sourcing the compat library I have.
This is a limitation of J2ME, which uses a subset of the J2SE (no collections, reflection, etc.) and a Java language level of 1.3. Any code written for J2SE will most likely need to be manually ported.
It seems the JDK5 is not yet supported.
Same question was asked on the blackberrry forum but about enum support:
Sadly, the BlackBerry api is very behind in terms of Java versioning. There's no Generics, no Maps, no Enums - it's based around JDK 1.3.
I believe there is no way of enabling this feature within your BlackBerry app. If you find one, I'd be very interested to hear about it.

Resources