Project site: http://j2objc.org
J2ObjC blog: http://j2objc.blogspot.com
Questions and discussion: http://groups.google.com/group/j2objc-discuss
J2ObjC is an open-source command-line tool from Google that translates Java source code to Objective-C for the iOS (iPhone/iPad) platform. This tool enables Java source to be part of an iOS application's build, as no editing of the generated files is necessary. The goal is to write an app's non-UI code (such as application logic and data models) in Java, which is then shared by web apps (using GWT), Android apps, and iOS apps.
J2ObjC supports most Java language and runtime features required by client-side application developers, including exceptions, inner and anonymous classes, generic types, threads and reflection. JUnit test translation and execution is also supported.
J2ObjC is currently beta quality. Several Google projects rely on it, but when new projects first start working with it, they usually find new bugs to be fixed. If you run into issues with your project, please report them!
J2ObjC does not provide any sort of platform-independent UI toolkit, nor are there any plans to do so in the future. We believe that iOS UI code needs to be written in Objective-C, Objective-C++ or Swift using Apple's iOS SDK (Android UIs using Android's API, web app UIs using GWT, etc.).
J2ObjC cannot convert Android binary applications. Developers must have source code for their Android app, which they either own or are licensed to use.
- JDK 1.8 or higher
- Mac workstation or laptop
- OS X 10.11 or higher
- Xcode 7 or higher
This library is distributed under the Apache 2.0 license found in the LICENSE file with the following exceptions. The protocol buffers library is distributed under the same BSD license as Google's protocol buffers. See README and LICENSE.
The long term goal is to have the local changes merged upstream and not maintain a separate fork, but for now there are a few differences of consequence.
Xcode didn't really work well with folder structures for packages. There is an option to have filenames reflect the packages and be written out to a single folder. Xcode is much happer with this, and it is the default option used in the gradle plugin.
Mockito for j2objc supports mock but not spy. Eventually spy support should be added directly, but currently the code looks for a generated mock object in lieu of creating a mock. This allows spy to work. It's a hack, but you can get by with it.
There have been a few fixes around minor issues found in unit tests of client libraries. These may be pushed upstream eventually as tests are added.
Okio is in the main stream project, but has either an older version or is missing some classes. To support OKHttp development, the remaining classes have been added.