
Google j2objc, a Java to iOS Objective-C translation tool and runtime - tilt
http://j2objc.org/
======
swanson
I used this tool 2-3 years ago (back when it was still hosted on Google
Code!). It does what it says on the box (converts code from Java to Obj-C) -
the problem is all about expectations.

In a way, this being an "official" tool from Google makes it more confusing
for non-technical folks. When you read that Google has released a tool for
converting Java to Obj-C, many assume it's now trivial to get an Android app
converted to iOS. This tool _will not_ translate an Android app into iOS code.
It won't really even help that much unless you've made a deliberate effort to
isolate code so that a conversion could happen. Most of the time, the business
logic for mobile apps is fairly simple so you aren't saving much time.

In my experience, the difficulty in shipping cross platform mobile apps is
dealing with platform specific conventions (e.g. what is the iOS equivalent of
a Fragment?) and libraries (RestKit on iOS, Retrofit on Android, etc); not the
conversion of basic Java class into their Obj-C equivalents.

~~~
on_and_off
Well, it does say so on the main page :) . I suspect that this warning is here
so that devs can show it to the eager product managers ...

I am still not that convinced by this approach either though. Sure, that way
you are sure that all your apps handle the business logic in the same way but
since the platforms are so different, the cost of extracting the business
logic can be pretty high for a low return.

------
resca79
While I appreciate the tecnological background of this project, I don't like
this kind of traslators.

It could be useful if you need to execute Java code in Objective-c runtime,
but not if you want develop iPhone/iPad app.

Obj-C is simple, the problems are the iOS frameworks that you need to learn to
delivery an iOS App. If you are Java skilled, anyway you need to learn these
frameworks, and you will spend your time to traslate the
examples(stackoverflow) from obj-c to java

I'm not a xcode fans, but it is a great tool when you use the StoryBoard and
all features to test, performance, memory .. etc.

Another point is that with the introduction of the Swift language this
traslator loses other value

~~~
robmccoll
> Obj-C is simple

Yeah you just need to know C, possibly C++, and smalltalk and be comfortable
using the syntaxes for all three simultaneously. For the record though I'm a
big fan of C and C++, and I don't really care for Java. I can just see why
people who already know Java well would want to use Obj-C as little as
possible.

~~~
resca79
You don't need to learn 3 languages to be skilled in Obj-c

Just for one reason, there are many iOS developers in the world, and at the
same time C++ and C developers are few today.

~~~
andyjohnson0
_"... C++ and C developers are few today."_

In a web/js/Ruby/mobile echochamber that may be true. But in the real world
C/C++ is very far from being a minority skillset. Take a look at [1][2][3]. C,
C++, and Java are the main languages in use today.

[1]
[http://www.tiobe.com/index.php/content/paperinfo/tpci/index....](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)

[2] [http://langpop.com](http://langpop.com)

[3] [http://lifehacker.com/the-top-programming-languages-
ranked-b...](http://lifehacker.com/the-top-programming-languages-ranked-by-
job-demand-po-1601752302)

~~~
resca79
You need look at the growing data. Maybe the number of people that know c or
c++ are more for the ages of the languages itself. Try to look any statistics
about github[1] [2]

[1] [http://redmonk.com/dberkholz/2014/05/02/github-language-
tren...](http://redmonk.com/dberkholz/2014/05/02/github-language-trends-and-
the-fragmenting-landscape/)

[2][http://sogrady-
media.redmonk.com/sogrady/files/2014/02/repos...](http://sogrady-
media.redmonk.com/sogrady/files/2014/02/repos-by-lang-github1.png)

~~~
kator
The bulk of Java/C/C++ source will never see the light of day as they power
systems owned by corporations who see them as an asset.

Looking at public repos for stats is like counting the number of tables on
planet earth by looking at satellite photos. You never see inside the
buildings, just whats outside in parks etc.

------
sehugg
I'm using RoboVM for production apps, which uses LLVM and the Android runtime
to compile Java into native iOS apps. Also binds easily to Objective-C
frameworks (and the libGDX game framework).

[http://www.robovm.com/](http://www.robovm.com/)

~~~
philbarr
Agree RoboVM is awesome. I literally just opened my app up on a Mac, right
click, run on simulator and it worked. Amazing!

~~~
sehugg
I've written up a few things about my experiences with RoboVM, including how
to use native bindings:

[http://blog.puzzlingplans.com/post/100847610651/building-
a-c...](http://blog.puzzlingplans.com/post/100847610651/building-a-cross-
platform-game-with-libgdx-part-3-ios)

------
WoodenChair
I get it - Java people want to work in Java. However, this tool seems only
targeted at the M in the MVC paradigm. You still need to write your views and
controllers in Objective-C. Unless your app has a large number of very complex
model objects, it's probably quicker to just retype your model classes in
Objective-C. Of course if your app does have a lot of very complex model
objects (as Google probably does) and you want to always have them in sync
across platforms without having to retype anything then this makes a ton of
sense. But for the majority of apps, it does not.

------
inDigiNeous
Just wanting to share a similar use case for such a project:

Used to work at a company where they were developing mobile games for 50+
different mobile phones, back when there was still more diversity in the
market, just when iPhone was still rising to take over the markets.

The method they used at that time for developing their games was to write the
project once with Java, then convert with an inhouse build tool to
Objective-C++ when targetting iPhone. They even had builtin carbage collection
and everything in the converter runtime, it seemed crazy that they would go to
such trouble.

But they were releasing about 50+ games a year, a pretty big company, so I
guess it paid back in writing the project once and porting to multiple
platforms.

Took maybe 25 minutes to compile the whole thing, first from Java to
Objective-C++ and then compiling that whole mess of a project in Xcode. It
kinda worked, but the performance it produced on the iPhone was far from
optimal. Debugging was also horrible.

~~~
cromwellian
Sounds like the XMLVM hack which basically transplate Java bytecode into a
stack machine emulator in C++ by using bytecode->XML and then XSLT stylesheets
-> C++. As expected, this is slow. This is not what j2objc does, and j2objc
doesn't try to emulate garbage collection either, instead it generates ARC
compatible code, and you use @Weak annotations in Java to fix cycles.

~~~
anon4
You seriously expect me to break cycles myself?

Edit: Furthermore, you expect me to carefully read the source of every single
third-party library I use and patch it to break any potential cycles? This is
madness!

~~~
cromwellian
Inbox is a huge app and very very few cycles need to be broken. J2ObjC
provides an automated tool for finding them
([https://code.google.com/p/j2objc/wiki/CycleFinderTool](https://code.google.com/p/j2objc/wiki/CycleFinderTool))

It's really no different than programming in ObjC itself where you can run
into cycles.

------
blisterpeanuts
Really nice tool. I haven't tried it on any non-trivial code yet but it worked
well for a couple of small utility functions I use all the time. I know Java
and I'm an ObjC learner, but I have to get some stuff working quickly and this
might help short cut the process. I only worry that it will be a crutch to
keep me from learning ObjC well.

------
thewarrior
Sounds good but suppose I need to make a network request on iOS. How would
that work since there is no common Java library to do it on iOS as well as
Android?

If we're only going to write the very limited business logic in Java I don't
really see the benefit.

~~~
cromwellian
If you only have trivial business logic, then yes, no benefit. But you can
create common libraries that interface with native Cocoa frameworks.

Google's new Inbox by Gmail was delivered on three platforms simultaneously.
It was not written from scratch 3 times.

~~~
thewarrior
Is there any way to use this to write the entire data handling layer ?

~~~
ZitchDog
My guess is you'd write j2objc wrappers around sqlite and
HTTPUrlConnection/NSURLConnection and expose API for business logic elements.

edit: here is an example: [https://groups.google.com/forum/#!topic/j2objc-
discuss/8u2Si...](https://groups.google.com/forum/#!topic/j2objc-
discuss/8u2Si-jvw6w)

------
pikachu_is_cool
Is there a tool out there that does the opposite?

~~~
conradev
Yep: [http://www.apportable.com/](http://www.apportable.com/)

~~~
ivanche
Would be interesting to compare performance/memory footprint of native Android
app, and that same app after going through Java -> j2objc -> apportable ->
Android...

~~~
pavlov
The roundtrip version might be faster in some cases because it's not Java
anymore, but native code. AFAIK, Apportable uses GNUStep libraries and the
Android NDK, so the translated version would be an ARM binary on Android.

Of course you can't do that for a real app because they use the Android APIs,
not just the foundation libraries supported by j2objc.

~~~
paul7beusterien
Actually, Apportable's Foundation is now built on Apple's open sourced CFLite.
It is available at
[https://github.com/apportable/Foundation](https://github.com/apportable/Foundation).
And it is used for a lot of real apps including those at
[http://www.apportable.com/customers](http://www.apportable.com/customers)

------
MarkMc
Does Google's new Inbox app use this tool?

~~~
phanster
Looks like it!

[https://groups.google.com/forum/#!topic/j2objc-
discuss/5lMZN...](https://groups.google.com/forum/#!topic/j2objc-
discuss/5lMZNzl5Si0)

~~~
MarkMc
Thanks - also looks like Google Sheets and Google Drive use it too:

[https://github.com/google/j2objc/wiki/Projects-that-
use-J2Ob...](https://github.com/google/j2objc/wiki/Projects-that-use-J2ObjC)

------
krosaen
The tooling for this and gwt are impressive and no doubt useful to the teams
at google managing cross platform code.

Just unfortunate that the starting point is Java source code (note: not
bytecode, you can't use clojure or other jvm platform langs) - I just have no
interest in coding in java when there are so many other better languages
available all across the spectrum.

~~~
heavenlyhash
RoboVM, an alternative to j2obc already mentioned in a sibling comment, DOES
consume bytecode. You might wanna check that out :)

I'll personally vouch for it's capacity to handle non-java; I've even gone so
far as to feed it weird bytecode crafted from a personal fork of Apache
JavaFlow... and it handled it 100% correctly, first try.

[http://www.robovm.com/](http://www.robovm.com/)

------
ExpiredLink
Does it support all of Java SE?

