Write Once Run Anywhere Native Mobile Apps for Java & Kotlin Developers
Codename One is a mobile cross platform environment for Java and Kotlin developers. It can compile Java bytecode to native OS executables (iOS, Android, UWP etc.). It is a complete mobile platform featuring virtual machines, simulator, design tools (visual theme/builder), IDE integrations, ports to multiple OS's and much more. It provides full access to the underlying native OS code (e.g. Objective-C, C#, Dalvik/ART) thru a portable abstraction which enables 100% code reuse.
Codename One is the only platform that...
- Has Write Once Run Anywhere support with no special hardware requirements and 100% code reuse
- Is Open Source & Free with an enterprise grade commercial offering
- Is Easy to use with 100% portable Drag & Drop GUI builder
- Has Full access to underlying native OS capabilities using the native OS programming language (e.g. Objective-C) without compromising portability
- Has full control over every pixel on the screen! Just override paint and draw or use a glass pane to draw anywhere...
- Lets you use native widgets (views) and mix them with Codename One components within the same hierarchy (heavyweight/lightweight mixing)
Codename One is a mature open source project with roots dating back to Sun Microsystems (2006) where one of its core underlying components was developed and open sourced. You can learn about its history and how it works in this video.
There is a lot to know about Codename One, if you just want to see a 3 minute video that explains how to use it check this out. Notice there are similar videos for Eclipse, IntelliJ/IDEA here:
Codename One can be extended easily using 3rd party libraries that can include native OS code. There is an extensive list of these libraries (cn1libs) here. The libraries list is generated automatically based on this github project.
Important Links & Docs
You can get started with the binary and the birds eye view in the download section. Additional important links are:
- Developer Guide - HTML & PDF
- How Codename One Works (stackoverflow)
- Codename One Academy
- Community Discussion Forum
- Using the Kotlin Support
Setup & Getting Started With The Code
Setup is covered in depth in this article and video. Notice that this covers debugging the simulator and working with the code that requires the Codename One plugin for NetBeans. You can install that by installing NetBeans and typing "Codename One" in the plugin search section see the getting started tutorial.
While Codename One itself works with all major IDE's the code in this repository was designed to work with NetBeans.
Codename One's iOS VM is quite unique and is open source as well. You can read more about it in its dedicated folder in this repository.
ParparVM is a uniquely conservative VM that translates Java bytecode to C code. Thus providing native performance and access while still providing a safety net. This approach is unique to Codename One and is essential for future compatibility!
Apple has a tendency to change things abruptly e.g. 64bit support, bitcode etc. Since ParparVM just generates a standard Xcode project there were no code changes required for any of these tectonic shifts. It's as if you handcoded the project yourself!
You can even open the resulting project in xcode and debug it or profile it directly on the iOS device. This provides a lot of useful information such as readable callstacks and valuable/actionable performance tracking...
Traditional compilers fall flat in these cases.
Codename One maintains a fork of iKVM which is a JVM for CLR. This modified port allows us to run the Universal Windows Platform implementation of Codename One natively on Windows 10 devices.
Getting Help & FAQ
We provide support over at StackOverflow when you tag using codenameone, you can ask anything there and we try to be pretty responsive. The StackOverflow link also serves as an excellent community driven FAQ since it literally maps user questions to answers.
Codename One has a discussion group where you can post questions. However, due to the nature of that group we try to limit discussions over the source. The discussion forum is intended for simpler usage and more complex source code hacks/native compilation might create noise there.