Skip to content
Write once run anywhere native mobile apps using with Java 8 or Kotlin. Supports iOS (iPhone/iPad), Android, Windows (UWP) & others
Java C# Objective-C C HTML C++
Branch: master
Clone or download

Latest commit

shannah Fixed a couple of regressions in getComponentAt(x,y). Added tests cas…
…es to unit test for getComponentAt().

getComponentAt() has been a challenge because it is crucial to the functioning of apps (event delivery) yet its behaviour is not well defined.   These new modifications fix the following cases:
1. getComponentAt(x,y) where x,y falls outside the proper bounds.  Previously this would return null, however this was causing intermittend NPEs due to the menubar overriding its contains(x,y) method to delegagte to the Toolbar, so contains(x,y) might be true even if (x,y) was outside the bounds of the menu bar.  Now getComponent(x,y) will always return the container itself if x,y is outside of its bounds.
2. Focusable containers.  Given a container C that is focusable.  if getComponentAt(x,y) is called on an ancestor of C and (x,y) is inside the bounds of C, then it will return C, unless C there exists another component D such that either D is a descendent of C and is focusable - OR - D is a descendent of an ancestor of C, D is rendered in front of C, and D has an ancestor E that is rendered in front of C and E.respondsToPointerEvents() is true.
Latest commit 8bc0675 Jun 4, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows
.travis
CodenameOne
CodenameOneDesigner
Factory
Ports
Samples
Themes
tests
vm
.gitignore
.travis.yml
CONTRIBUTING.md
Jenkinsfile
LICENSE
README.md
build.xml

README.md

Build Status

Write Once Run Anywhere Native Mobile Apps for Java and 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) through 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
  • Compiles Java (or Kotlin) into native code for iOS, UWP (Universal Windows Platform), Android & even JavaScript (with seamless PWA support)
  • 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)
  • Supports seamless Continuous Integration out of the box

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.

Quick Start

There is a lot to know about Codename One, this 3 minute video gives a very concise high level view. Notice there are similar videos for Eclipse, IntelliJ/IDEA here:

Hello Codename One

Extensible

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.

You can learn more about Codename One and its capabilities at the main site and you can see an extensive list of documentation and tutorials here.

Important Links & Docs

You can get started with the binary and the birds eye view in the download section. Additional important links are:

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.

Using The Codename One Source Code

While Codename One itself works with all major IDE's the code in this repository was designed to work with NetBeans.

Please notice that while we fully support IntelliJ/IDEA (both CE and Ultimate), we don't support Android Studio which diverted too much from the mainline IDE.

Quick Start

Getting and Building Sources

$ git clone https://github.com/codenameone/CodenameOne
$ cd CodenameOne
$ ant

Running Unit Tests

$ ant test-javase

Running Samples

The Samples directory contains a growing set of sample applications. These samples aren't meant to be demos, but rather samples of how to use APIs.

You can launch the sample runner app from the command-line using:

$ ant samples

ParparVM

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 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.

Modified iKVM

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.

You can’t perform that action at this time.