Cross-platform framework for building truly native mobile apps with Java or Kotlin

Overview

GitHub repo size GitHub top language GitHub last commit GitHub license Hacktoberfest GitHub Stars

Codename One - Cross Platform Native Apps with Java or Kotlin

Codename One is a mobile first cross platform environment for Java and Kotlin developers. It can compile Java bytecode to native OS executables (iOS, Android, UWP etc.). It's a complete mobile platform featuring virtual machines, simulator, design tools (visual theme/builder/css), 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 and even JavaScript (with seamless PWA and Thread support)
  • Is Open Source and Free with an enterprise grade commercial offering
  • Is Easy to use with 100% portable Drag and 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

  Here are some concrete benefits you can get with Codename One:


Codename One's Simulator Runs Instantly

Unlike emulators which you can see in Android etc. Codename One uses a simulator. This means it starts up fast even when debugging. You can enjoy IDE features such as live code reload to modify code in runtime etc.

This means faster debugging cycle and faster development process!


Large Selection of Device Skins

Choose from a large selection of device “skins” to see how your app will look on particular devices. The skin takes into account factors such as resolution and device density to provide a pixel-perfect presentation of your app, as it would appear on the real device. Switching between device skins is nearly instant.

You can edit and contribute skins in their own open source project here.


Interactive Console

Interact with your application’s APIs at runtime using the interactive Groovy Console. Inspect the application state or experiment with changes all while the app is running.

This lets you investigate issues and experiment without even the small overhead of recompiling.


Live Reload

The Simulator let’s you take advantage of the "Reload Changed Classes" feature in IntelliJ (named "Apply Code Changes" in NetBeans) so that changes you make in your Java source code will be applied immediately to your already-running app in the simulator.

Note that this is often superior to the interactive console but there are limitations such as the ability to add methods/change structure of the code. These limits don't apply to the interactive console!


CSS Live Update

When you make changes to your app’s CSS stylesheet, the changes are reflected instantly in the simulator. This includes changing your theme, images, fonts etc. All changes are instantly refreshed on save, no need to reload/refresh or anything of the sort!

This makes the process of styling an application remarkably easy and fast.


Component Inspector

Use the powerful component inspector to browse the UI component hierarchy in your app. This tool makes it easy to find out where that extra padding is coming from or why something just isn’t lining up the way you’d like. You can also change the UIID (selector) of a component in runtime to see how it impacts the UI and see which component in the hierarchy maps to an element in the component tree (DOM equivalent).


Network Monitor

See all of the network connections that your app makes using the Network Monitor. This valuable tool comes in handy when you’re trying to figure out why an HTTP request isn’t working for you. Check the headers and bodies of both the request and the response. You can even throttle the network to simulate a slow network connection.


Record UI Unit Tests

Use the Test Recorder tool to record unit tests for your app. Once you start recording, it will save your interactions into a unit test that can be played back later to verify that behaviour remains correct.

You can then connect the recorded tests to your CI process including automated on device testing.


How Does it Work?

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.

Codename One apps perform like native apps, because they are real native apps.

They are statically compiled into native binaries using the target platform’s official build tools.

On platforms that do not support Java natively, such as iOS, the app’s JVM bytecode is first transpiled into a form that the native build tools will accept. On iOS, the app’s JVM bytecode is transformed into C source code, in a real xcode project. On Android, since Java is supported natively, no such transformation is necessary. The app jar is bundled directly into an Android studio gradle project, which can be built directly using the Android SDK build tools.

The figure below shows the build process for each supported platform:

You can click the image to enlarge or view a PDF version here.

Quick Start

TIP: We are currently transitioning to Maven, and have created a new, simpler method for creating projects. Check out https://start.codenameone.com to get started now.

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 and Netbeans here:

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

NOTE: We are in the process of migrating from Ant to Maven, which simplifies the process for building from source. See Ant Quick Start for the legacy Ant build instructions.

The setup is covered in depth in this article and video.

IMPORTANT: Building Codename One requires JDK 8, currently. You cannot use JDK 11 as some sub-modules must use -source 1.5 and -target 1.5 to maintain backward compatibility with parts of the toolchain.

Quick Start with Maven

git clone https://github.com/codenameone/CodenameOne
cd CodenameOne/maven
mvn install

This will build and install Codename One in your local Maven repository. This process can take a while since it automatically downloads dependencies with a size of ~1GB.

To build the archetype projects from source, you should check out the cn1-maven-archetypes repository and build it also:

git clone https://github.com/shannah/cn1-maven-archetypes
cd cn1-maven-archetypes
mvn install

Now that Codename One is installed in your local Maven repository, you can use that version in a project instead of the release version. A new testing project can be quickly generated with the Codename One initializr.

After downloading and extracting the project, open its pom.xml file and and look for the and properties. Then change these to point to the version that got installed into your local maven repository by mvn install. The locally built version will usually be a SNAPSHOT version (e.g. 7.0.21-SNAPSHOT).

Quick Start with Ant

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.


Contributors

Thanks goes to these wonderful people (emoji key):


beazl-peter

💻

liannacasper

📖

sergeyCodenameOne

💻

ThomasH99

💻

Javier Anton

💻

Diamond

💻

Francesco Galgani

💻

kutoman

💻

ramsestom

💻

Maaartinus

💻

Durank

💻

ddyer0

💻

carlosverdier

💻

Robert Edelmann

💻

Adalbert393

💻

Steve Hannah

💻

digappsepp

💻

Pavneet Singh

💻

vprise

📖

JrmyDev

💻

Terry Wilkinson

💻

Jaanus Hansen

💻

Yaakov Gesher

💻

Michael Munch

💻

saeder

💻

Miguel Muñoz

💻

Ahmed Aboumalwa

💻

Fabio

💻

Piotr

💻

Matthias Bay

💻

Sanny Sanoff

💻

McSym28

💻

Eric Leong

💻

David Day

💻

This project follows the all-contributors specification. Contributions of any kind are welcome! ❤️

Comments
  • [iOS] Memory leak in updating TextArea

    [iOS] Memory leak in updating TextArea

    There is memory leak in iOS when TextArea(maybe Label as well) setText() is called. The following codes can reproduce the issue after pressing the button for hundred times within a short period. The memory goes up after pressing the button and the memory will not be released. Please note that you have to press the button quickly for multiple times.

    protected void onMain_TestLabel2Action(Component c, ActionEvent event) { int iCounter = 0; while (iCounter < 100) { TextArea testTxtArea = findRandomTextArea(c); testTxtArea.setText("Random100_" + new Date().getTime()); testTxtArea.getParent().revalidate(); iCounter++; } }

    opened by jackyy415 101
  • push device id after registering for push is coming as null

    push device id after registering for push is coming as null

    Original issue 789 created by codenameone on 2013-07-20T17:13:49.000Z:

    Please clearly state whether the issue relates to a device/the simulator or the tools. This happens in real device. If related to a device be sure to specify exactly which device with as much details as possible.

    On iPhone 4, latest OS version and also on Android phones.

    What steps will reproduce the problem?

    1. Have a device register for push using following code: Hashtable meta = new Hashtable(1); meta.put(com.codename1.push.Push.GOOGLE_PUSH_KEY, "359276012902"); Display.getInstance().registerPush(meta, false);
    2. The PushCallback registeredForPush(String deviceId) is called by cn1 framework.
    3. The deviceId received in the registeredForPush() for iPhone 4 device is given below:

    b018aa2534e7abf5da59f9c673e255eb107cf3f771022db31d3a215c8e8f4c8b

    1. after this when you try to get the cn1 specific device id, it is coming as null from the following call: com.codename1.push.Push.getDeviceKey();

    What is the expected output? What do you see instead?

    the cn1 specific device id which is a long value should be available so that push to specific device can be made.

    What version of the product are you using? On what operating system?

    Latest cn1 version on build server and latest plugin.

    Please provide any additional information below.

    Type-Defect Priority-Medium 
    opened by codenameone 89
  • Added native android tiling support

    Added native android tiling support

    Border now uses the implementation tiling support Default drawTile now deals with its own limits, no need to clip rect outside

    PS: didn't have a use case for image border with an arrow here, please, double check this before merging. Also, please double check this with iOS just to be sure, couldn't test it here. I've also noticed it fixed the sidemenu covering the shadow.

    PS2: android native tiling is fast :+1:

    opened by FabricioCabeca 59
  • Sample program to crash ios.newVM

    Sample program to crash ios.newVM

    Original issue 1304 created by codenameone on 2015-01-23T22:53:30.000Z:

    The first time you run one of my apps it has to obtain data. this is normally done over the network but can also be done with a file copied to the device. Either way if the dataset is a small one, my apps work. However larger datasets consistently crash the new VM.

    In trying to narrow down the problem and create a test case I have come to the conclusion that it is not a particular operation that is causing the crash but the load.

    The sample program attached will read lines from a file and run them through your CSVParser. It crashes before completion. In order to run this app you will need to set the property ios.fileSharingEnabled to true and you will need to copy the sample data file to the app on your device using iTunes.

    This app runs fine on the old VM, it also runs a lot faster on the old VM, it takes about 18 seconds to complete. On the new VM it takes 38 seconds to crash without completing.

    This initial data load is key to my apps and so I can't really test my apps at all on the new VM because I can't get any data to them.

    I have attached the sample program, the data file you will need to run the program and the crash log I received from my iPod.

    Type-Defect Priority-High 
    opened by codenameone 55
  • RIM build with push support fails

    RIM build with push support fails

    Original issue 829 created by codenameone on 2013-08-08T04:48:34.000Z:

    Please clearly state whether the issue relates to a device/the simulator or the tools. Build server. If related to a device be sure to specify exactly which device with as much details as possible. Blackberry build

    What steps will reproduce the problem?

    1. Set the property of rim.pushBpsURL==https://cp12173.pushapi.eval.blackberry.com
    2. And send RIM build 3.

    What is the expected output? What do you see instead?

    The build should be successful. Instead the build fails with error as in the attached file.

    What version of the product are you using? On what operating system?

    Latest version. On Mac. Please provide any additional information below.

    Type-Defect Priority-Medium 
    opened by codenameone 51
  • J2ME build failed to run on Sony Ericsson (eg.W850i,K610i)

    J2ME build failed to run on Sony Ericsson (eg.W850i,K610i)

    Original issue 784 created by codenameone on 2013-07-16T04:32:41.000Z:

    My J2ME build works on Nokia devices but failed on SE devices as it occured a message "Application error" and unable to launch the app. It used be fine on SE devices but now it doesn't work though on new created sample project.

    What steps will reproduce the problem? 1.compile and send J2me build to server. 2.download the build and install to SE device 3.error message "application error" occurred after launching the app

    What is the expected output? What do you see instead? The app should be run successfully as it does on emulator/Nokia devices. Unfortunately, it fails and shows the error message when attempting to run the app.

    What version of the product are you using? On what operating system?

    Please provide any additional information below.

    Type-Defect Priority-Medium 
    opened by codenameone 50
  • iOS crash at startup

    iOS crash at startup

    Original issue 714 created by codenameone on 2013-05-18T23:56:00.000Z:

    I have just released the second version of my iOS app. Some maintenance and a couple of new features, nothing that major.

    I have one user that ran the first release without a problem. After installing second release it displays the splash screen and crashes. My app never starts. Just the one user.

    She has tried deleting the old app, reinstalling, rebooting the device. Nothing helps.

    She is using an original iPad running iOS 5.1.1. She sent me the crash log included below. Does this show anything relevant.

    I don't know how to debug this.

    Thanks

    Had to attach the log as a file, too long

    Type-Defect Priority-Medium 
    opened by codenameone 48
  • Location can't be work now using built hint codename1.ios.xcode_version=9.2

    Location can't be work now using built hint codename1.ios.xcode_version=9.2

    I have check your last commit changes and I could check that you commented the lines in the file CodenameOne_GLViewController.h

    //#define INCLUDE_CONTACTS_USAGE //#define INCLUDE_CALENDARS_USAGE //#define INCLUDE_CAMERA_USAGE //#define INCLUDE_FACEID_USAGE //#define INCLUDE_LOCATION_USAGE //#define INCLUDE_MICROPHONE_USAGE //#define INCLUDE_MOTION_USAGE //#define INCLUDE_PHOTOLIBRARYADD_USAGE //#define INCLUDE_PHOTOLIBRARY_USAGE //#define INCLUDE_REMINDERS_USAGE //#define INCLUDE_SIRI_USAGE //#define INCLUDE_SPEECHRECOGNITION_USAGE //#define INCLUDE_NFCREADER_USAGE

    Then I check that in the file IOSNative.m you need to instance the Location natively.

    But if you commented how the location it will work properly?

    opened by DurankGts 37
  • [BUG?] Blank white screen after waking up app from background using a link

    [BUG?] Blank white screen after waking up app from background using a link

    I tried to read more times my code and to do some trials, but I didn't find any error in my code.

    As I described here: https://stackoverflow.com/questions/52807700/intercept-an-url-with-a-given-domain-in-the-android-ios-and-javascript-ports-of

    the problem is that my code works fine if the app is killed and then opened from a link, but it doesn't work if the app is opened from the icon, then it is putted in background and then it is opened again from the link: in this case, the app will show a blank white screen.

    Tested on Android 7 (with this phone: https://www.gsmarena.com/huawei_honor_6x-8388.php)

    Build hint: android.xintent_filter=<intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:host="example.com" android:scheme="https" /></intent-filter>

    Code:

    public class MyApplication {
    
        private Form current;
        private Resources theme;
        private String arg;
    
        public void init(Object context) {
            // use two network threads instead of one
            updateNetworkThreadCount(2);
    
            theme = UIManager.initFirstTheme("/theme");
    
            // Enable Toolbar on all Forms by default
            Toolbar.setGlobalToolbar(true);
    
            // Pro only feature
            Log.bindCrashProtection(true);
    
            addNetworkErrorListener(err -> {
                // prevent the event from propagating
                err.consume();
                if (err.getError() != null) {
                    Log.e(err.getError());
                }
                Log.sendLogAsync();
                Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null);
            });
        }
    
        public void start() {
            if (current != null) {
                current.show();
                return;
            }
            Form hi = new Form("Hi World", BoxLayout.y());
    
            final SpanLabel message;
            arg = Display.getInstance().getProperty("AppArg", null);
            if (arg == null) {
                message = new SpanLabel("App launched from icon");
            } else {
                message = new SpanLabel("App launched from the url: " + arg);
            }
            hi.add(message);
            hi.show();
    
            hi.addShowListener(l -> {
                arg = Display.getInstance().getProperty("AppArg", null);
                if (arg == null) {
                    message.setText("App launched from icon");
                } else {
                    message.setText("App launched from the url: " + arg);
                }
                hi.revalidate();
            });
    
        }
    
        public void stop() {
            current = getCurrentForm();
    
            if (current instanceof Dialog) {
                ((Dialog) current).dispose();
                current = getCurrentForm();
    
            }
        }
    
        public void destroy() {
        }
    
    }
    
    opened by jsfan3 34
  • shouldLoadURL event support and executeAndReturnString()

    shouldLoadURL event support and executeAndReturnString()

    Original issue 459 created by codenameone on 2012-12-31T21:45:51.000Z:

    This is related to issue # 453 (http://code.google.com/p/codenameone/issues/detail?id=453). I have implemented two mechanisms necessary to support a robust Javascript interface in a minimal way. These are:

    1. A shouldLoadURL event that is called whenever the browser is about to try to load a URL. It gives the developer the ability to cancel the page load, and/or handle the URL processing itself. With respect to Javascript, this allows us to design our own custom URLs that Javascript calls via window.location to send messages back into Java.
    2. An executeAndReturnString() method on the BrowserComponent class that executes a javascript string and returns the string result of the processing. This method is synchronous so it makes it much more convenient to query the javascript environment and DOM from Java.

    I have added support for Android, iOS, and JavaSE, and have attached the patches for these ports all separately.

    I have also created a Test application to test all of this functionality (and will hopefully grow to include tests for much more CodenameOne functionality). I have added this project to the incubator: http://code.google.com/p/codenameone-incubator/source/browse/#svn%2Ftrunk%2Fshannah%2FCodenameOneTests

    However I need to clean it up to make it easier for others to set it up and use it. This project includes a separate package, ca.weblite.codename1.js that is a full two-way Javascript bridge built on top of this functionality.

    http://code.google.com/p/codenameone-incubator/source/browse/#svn%2Ftrunk%2Fshannah%2FCodenameOneTests%2Fsrc%2Fca%2Fweblite%2Fcodename1%2Fjs

    I will be factoring this out into its own subproject and will post usage examples and more tests later today.

    I have tested these changes on: iPhone 4S Android (Nexus 7) Android (HTC Magic running Android 2.1) JavaSE (the simulator)

    I don't have a Blackberry test environment up and running yet, or I would have also provided a patch for it also.

    Priority-Medium Type-Enhancement 
    opened by codenameone 29
  • [BUG] callback of Capture.capturePhoto(callback) on Android is not invoked the first time

    [BUG] callback of Capture.capturePhoto(callback) on Android is not invoked the first time

    The following bug can be reproduced on Android 7 only after the first capturing of a photo after that the app is just installed. To reproduce the bug again, it's necessary to remove the app and install it again (if you reinstall the app without removing it, or if you kill and restart the app, the bug cannot be reproduced). After the first taken photo, the bug disappears (until you will remove and install the app again).

    This bug cannot be reproduced in the Simulator.

    I report code and logs. However the same issue can be reproduced with the code published here (on Android, the first taken image after the app install is not placed in the Label): https://www.codenameone.com/blog/round-at-codemotion.html

    Code:

            // Avatar default picture
            int avatarSizeMM = 10; // the avatar size in mm
            Style s = new Style();
            s.setFgColor(ColorUtil.LTGRAY);
            Label avatar = new Label(createAvatar(FontImage.createMaterial(FontImage.MATERIAL_PERSON, s, avatarSizeMM)), "Avatar");
    
            // Callback after taking a photo (from photocamera or file chooser)
            ActionListener callback = e -> {
                Log.p("ActionListener callback invoked");
                if (e != null && e.getSource() != null) {
                    String filePath = (String) e.getSource();
                    Image capturedImage = null;
                    Log.p("Capured image filePath: " + filePath);
                    if (filePath != null) {
                        try {
                            FileSystemStorage fs = FileSystemStorage.getInstance();
                            InputStream fis = fs.openInputStream(filePath);
                            capturedImage = Image.createImage(fis);
                        } catch (IOException ex) {
                            Log.p("IOException in loading the image: " + filePath);
                            Log.e(ex);
                        }
                        if (capturedImage != null) {
                            createAvatar(capturedImage, avatarSizeMM, avatar);
                        }
                    } else {
                        Log.p("Error: \"filePath = (String) e.getSource()\" is null");
                    }
                }
                Log.p("The image capture was canceled by the user (e.getSource() is null)");
            };
    
            // Button to take a photo from photocamera
            Button camera = new Button("Fotocamera", FontImage.createMaterial(FontImage.MATERIAL_CAMERA, "Avatar", 5));
            camera.addActionListener((e) -> {
                Log.p("The native photocamera is going to be opened");
                Capture.capturePhoto(callback);
            });
    
    

    After the first taken photo, the callback is not invoked. The log is only: [EDT] 0:0:39,881 - The native photocamera is going to be opened

    After the second taken photo, the log is (note that the last line of log doesn't make sense, I didn't cancelled the image capture) :

    [EDT] 0:0:39,881 - The native photocamera is going to be opened
    [EDT] 0:7:54,190 - The native photocamera is going to be opened
    [EDT] 0:7:59,700 - ActionListener callback invoked
    [EDT] 0:7:59,700 - Capured image filePath: /storage/emulated/0/Pictures/Registrazione/IMG_20180509_204014.jpg
    [EDT] 0:8:0,45 - The image capture was cancelled by the user (e.getSource() is null)
    

    After the third taken photo, the log is:

    [EDT] 0:0:39,881 - The native photocamera is going to be opened
    [EDT] 0:7:54,190 - The native photocamera is going to be opened
    [EDT] 0:7:59,700 - ActionListener callback invoked
    [EDT] 0:7:59,700 - Capured image filePath: /storage/emulated/0/Pictures/Registrazione/IMG_20180509_204014.jpg
    [EDT] 0:8:0,45 - The image capture was canceled by the user (e.getSource() is null)
    [EDT] 0:15:2,647 - The native photocamera is going to be opened
    [EDT] 0:15:13,567 - ActionListener callback invoked
    [EDT] 0:15:13,568 - Capured image filePath: /storage/emulated/0/Pictures/Registrazione/IMG_20180509_204723.jpg
    [EDT] 0:15:13,840 - The image capture was canceled by the user (e.getSource() is null)
    
    Priority-High 
    opened by jsfan3 28
  • Maven Run Config

    Maven Run Config "Xcode iOS Project" fails

    Describe the bug this is the output at the end of the log:

    [INFO] Process return code is 0
    [INFO] Executing: 
    [INFO] javac -source 1.6 -target 1.6 -classpath *_omitted the paths here_*
    [INFO] Executing with timeout -1
    [INFO] Warning: [options] Bootstrap Classpath not specified with -source 6
    [INFO] Error: Source option 6 is no longer supported. Use 7 or higher.
    [INFO] Error: Target option 6 is no longer supported. Use 7 or higher.
    [INFO] Process return code is 2
    

    But I couldn't figure it out where 1.6 is set anywhere in the poms. This (with 1.8)is written in the root pom for example:

      <properties>
        <java.version>1.8</java.version>
        <cn1app.name>app</cn1app.name>
        <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
        <rhino.version>1.7.11</rhino.version>
        <cn1.plugin.version>7.0.95</cn1.plugin.version>
        <maven.compiler.target>1.8</maven.compiler.target>
        <java-tests.version>11</java-tests.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <cn1.version>7.0.95</cn1.version>
        <maven.compiler.source>1.8</maven.compiler.source>
      </properties>
    

    To Reproduce just running "Xcode iOS Project" config via IntelliJ

    Expected behavior Generating a fresh xcode project

    Additional context I'm not sure if this is a bug, because the config is not that fresh (Beginning of 2022), but why is javac called with 1.6 when maven.compiler.target and maven.compiler.source are set to 1.8?

    opened by kutoman 1
  • App crash since manifest support of Android 12

    App crash since manifest support of Android 12

    Describe the bug CN1 seems to use deprecated Android API which isn't supported on Android 12 anymore

    To Reproduce Steps to reproduce the behavior: Just check the specific line of the AndroidLocationManager mentioned in the stacktrace

    Expected behavior No crash

    Smartphone (please complete the following information):

    • Device: Emulator
    • OS: Android 12

    Additional context

    2022-12-25 14:56:16.217 2188-2188/org.igmg.android E/AndroidRuntime: FATAL EXCEPTION: main
        Process: org.igmg.android, PID: 2188
        java.lang.UnsupportedOperationException: GpsStatus APIs not supported, please use GnssStatus APIs instead
            at android.location.LocationManager.addGpsStatusListener(LocationManager.java:2344)
            at com.codename1.location.AndroidLocationManager$2.run(AndroidLocationManager.java:150)
            at android.os.Handler.handleCallback(Handler.java:938)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loopOnce(Looper.java:201)
            at android.os.Looper.loop(Looper.java:288)
            at android.app.ActivityThread.main(ActivityThread.java:7839)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
    
    opened by kutoman 3
  • Codename App turns slowly after some time using it.

    Codename App turns slowly after some time using it.

    The App works quite well after login , but it becomes increasily slow after some activities and finaly crashes.

    This behavior has begun after upggrading iOS to 16.1 version. Running on iOs 15 this issue didn't occur.

    It seems like a memory retrieving issue. Is there any codenameone orientation about this ?

    opened by JTBrandao 2
  • Support

    Support "pointerHover" on real devices

    At the moment public void pointerHover(int x[],int y[]) { // as of 12/2022, this is called on the simulator but not on real devices }

    Is called on the simulator, but not on real devices. This ought to happen if the device has attached a bluetooth mouse, or has one natively as is the case for chromebooks and windows running android apps through windows subsystem for android.

    There logically ought to be corresponding classes of listeners, for these events, complementing the existing pointer dragged listeners.

    opened by ddyer0 0
  • Ability to run iOS Build in a headless environment

    Ability to run iOS Build in a headless environment

    Is your feature request related to a problem? Please describe. I'm trying to set up a CI/CD build for my CodenameOne app. Unfortunately, when I run the Maven build for the iOS project over SSH, I get an exception when processing the CSS files:

    % mvn package -DskipTests -Dcodename1.platform=ios -Dcodename1.buildTarget=ios-source -Dopen=false -U -e
    ... snip ...
    [INFO] --- codenameone-maven-plugin:7.0.90:css (cn1-process-classes) @ flexone-common ---
    [INFO] Exception in thread "main" java.lang.ExceptionInInitializerError
    [INFO]  at com.codename1.designer.ResourceEditorApp._main(ResourceEditorApp.java:274)
    [INFO]  at com.codename1.designer.ResourceEditorApp.main(ResourceEditorApp.java:258)
    [INFO] Caused by: java.awt.HeadlessException
    [INFO]  at java.desktop/sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(HeadlessGraphicsEnvironment.java:58)
    [INFO]  at com.codename1.impl.javase.JavaSEPort.calcRetinaScale(JavaSEPort.java:406)
    [INFO]  at com.codename1.impl.javase.JavaSEPort.<clinit>(JavaSEPort.java:637)
    [INFO]  ... 2 more
    

    Describe the solution you'd like Looking at the ResourceEditorApp, it appears to initialise display immediately, even if this is not going to be used.

    We can see that the CompileCSSMojo passes -Dcli=true as well as -css, so it should be possible for the app to realise it is being used on the command line, and skip the UI initialisation.

    Describe alternatives you've considered Have considered using an equivalent to Xvfb, but this doesn't appear to exist for the Mac without installing a bunch of extra dependencies.

    Additional context N/A

    opened by Rocketeer007 2
Releases(7.0.95)
Owner
Codename One
Write Once Run Anywhere mobile first platform for Java and Kotlin developers
Codename One
Multi-OS Engine: Create iOS Apps in Java (or Kotlin ... etc.)

Multi-OS Engine Overview Multi-OS Engine provides a Java runtime and Java interfaces to iOS platform API to develop native iOS applications with nativ

Multi-OS Engine 561 Dec 22, 2022
An Android library for member secretGFX group, This can be used to growing your apps and get more install via a simple banner view & native view and interstitial dialog.

GFX-AdPromote An Android library for member secretGFX group, This can be used to growing your apps and get more install via a simple banner view & nat

SAID MOTYA 10 Dec 25, 2022
A cross-platform Mod for the popular Minecraft project, where the border always has a radius equal to the player's current experience level.

Level = Border A cross-platform Mod for the popular Minecraft project, where the border always has a radius equal to the player's current experience l

Jakob K 14 Nov 22, 2022
This is a Food Delivery Mobile Application. Build Using React Native

Ax Food Delivery Service This is a Food Delivery Mobile Application build using ?????????? ???????????? ?? Installation Clone this repository git clon

Mindula Dilthushan Manamperi 13 Jul 14, 2022
Sceneform React Native AR Component using ARCore and Google Filament as 3D engine. This the Sceneform Maintained Component for React Native

Discord Server Join us on Discord if you need a hand or just want to talk about Sceneform and AR. Features Remote and local assets Augmented Faces Clo

SceneView Open Community 42 Dec 17, 2022
React native wrapper for Jitsi Meet SDK Library that rely on the native view (Activity / ViewController)

react-native-jitsi-meet-sdk React native wrapper for Jitsi Meet SDK Library. This Library implements the Jitsi SDK with a native activity on the Andro

null 7 May 2, 2022
With react-native-update-in-app library you can easily implement in-app updates in your React Native app using CDN or any other file server

React Native In-App update With react-native-update-in-app library you can easily implement in-app updates in your React Native app using CDN or any o

Nepein Andrey 7 Dec 21, 2022
An awesome native wheel picker component for React Native.

⛏️ react-native-picky An awesome native wheel picker component for react-native. Features Supports multiple columns ✅ Supports looping ✅ Native Androi

null 28 Dec 4, 2022
💡极致性能的企业级Java服务器框架,RPC,游戏服务器框架,web应用服务器框架。(Extreme fast enterprise Java server framework, can be RPC, game server framework, web server framework.)

?? 为性能而生的万能服务器框架 ?? Ⅰ. zfoo简介 ?? 性能炸裂,天生异步,Actor设计思想,无锁化设计,基于Spring的MVC式用法的万能RPC框架 极致序列化,原生集成的目前二进制序列化和反序列化速度最快的 zfoo protocol 作为网络通讯协议 高可拓展性,单台服务器部署,

null 1k Jan 1, 2023
psionic: packages apps realmeParts

RealmeParts RealmeParts is an open-source Android application written in java. It offers several customization settings while making use of various de

psionicprjkt 5 Feb 21, 2022
Cloud Native and Low Code Platform to create FullStack web Admin applications in minutes

Cloud Native and Low Code Platform to create FullStack web Admin applications in minutes ✨ Features & Technologies REST API generator Low Code CRUD &

Gemini Framework 171 Dec 26, 2022
Java library that integrates to SAP Mobile Services Backend APIs

Java integration for SAP Mobile Services is a client library to integrate your application with the backend-facing APIs of SAP Mobile Services. As this project only started, it at the moment only provides the integration to the Notification Backend services, which allows you to send push notifications to your mobile devices. Other integrated APIs may be added to this library in the future.

SAP 7 Dec 15, 2022
Business Application Platform - no-code/low-code platform to build business applications

Orienteer What is Orienteer Orienteer is Business Application Platform: Easy creation of business applications Extendable to fit your needs Dynamic da

Orienteer 189 Dec 6, 2022
Experimental Discord Mobile Rich Presence (Android)

MRPC Experimental Discord Mobile Rich Presence (Android) How does it work? It's pretty simple. Connect to the Discord Gateway as a normal Discord Clie

Duy Tran Khanh 41 Dec 25, 2022
Aplikasi Android "MovieApp" untuk memenuhi salah satu syarat Ujian Akhir Semester mata kuliah Pengembangan Aplikasi Mobile UIN Sunan Gunung Djati Bandung.

MovieApp Kelompok No Way Home, berikut list anggota-nya: Fakhri Faishal Rochdiana (1197050040) Muhamad Taopik (1197050081) Naufal Rizqullah (119705009

Muhamad Taopik 9 Dec 22, 2022
Sportheca Mobile DEV Week - Simulador de Partidas 🎲

Sportheca Mobile DEV Week - Simulador de Partidas ?? Projeto desenvolvido no bootcamp Sportheca da DIO. Desenvolvimento Mobile Nativo Para Android Obj

Lucas Magalhães 8 Aug 5, 2022
DSMovie is a full stack web and mobile application built during Spring React Week, an event organized by DevSuperior

projeto-DSMovie Sobre o projeto DSMovie é uma aplicação full stack web e mobile construída durante a Semana Spring React, evento organizado pela DevSu

Matheus Maia Alvarez 7 Apr 18, 2022
Android application made during an introduction class to mobile application development.

Reflex Revolution Android application made during an introduction class to mobile application development. Contributors Hailey Savoie Carter Moore Fre

Frederic Verret 3 Aug 27, 2022
Light Chinese Bible is a Mobile app created by Android and SQLite.

About Light Chinese Bible Light Chinese Bible is a Mobile app created by Android and SQLite. It allows you to read the bible on your phone or devices

Pankun (Dennis) Lin 1 Feb 10, 2022