Latest posts from Codename One.
Blog

Build Hints That Fail Before the Build Server
A bad configuration line can be worse than a failed build. If the build stays green while ignoring the setting, you usually discover the mistake in a generated native project or on a device. PR #5586 moves 87 common Codename One build hints into Java’s type system. A misspelled hint is now an unknown annotation attribute. A wrong value type or unsupported option stops at compilation instead of traveling to the build server as an inert string. ...

Rootless Jailbreak Detection: Updating the Signals, Not the Claim
ios.detectJailbreak=true did not fire on a device jailbroken with palera1n 2.1.1 in rootless mode. The build hint was wired correctly. The detector was asking questions that described the previous generation of jailbreaks. PR #5584 replaces that signal set. It recognizes rootless bootstraps, checks whether detection APIs disagree, inspects mounts and loaded images, and reruns the gate when the application returns from the background. ...

Watch Follow-Through: Complications, Tiles, and a Companion Wear APK
Last week’s wearable post ended with two conspicuous limits. Declaring a WATCH_* surface did not generate the native extension or service that puts it on a watch face. An Android companion build did not return a Wear APK beside the phone APK. PR #5583 closes both gaps. PR #5594 fixes two watchOS failures that appeared once the complete watch path ran. This is follow-through on the model we shipped last week, not a second wearable announcement. ...

UWB and Nearby Devices: Distance, Direction, Association, and Transport
Bluetooth can tell you that a device is probably nearby. Ultra-wideband can tell you that it is 42 centimeters away and 18 degrees to the right, until the person holding it turns and the direction disappears. That last clause is part of the API contract. Nearby hardware gives partial answers, permissions change by operating-system version, and Apple’s local transport cannot discover Google’s. PR #5589 exposes those boundaries through three packages under com.codename1.nearby. ...

Put App Documents in the System File Browser
An invoice, drawing, report, or project file can live inside an application for years without becoming a document the operating system understands. The user has to open the app before another app can preview or share it. PR #5607 adds com.codename1.documents. It publishes a selected, read-only document tree as a location in the iOS Files app and Android storage picker. The application decides which nodes exist, what they are called, and whether their bytes are local or fetched from a server. ...

One App, More Than One Native Window
Maven repository cutoff: update your POM today. August 28 is the day new Codename One releases stop going to Maven Central. PR #5611 makes the Codename One repository the only destination for new releases. Versions already on Central stay there, but the changes in this post and future updates resolve only from the Codename One repository. New projects already contain this configuration. Existing Maven projects need both blocks below because Maven resolves build plugins and ordinary dependencies from separate repository lists. ...

App Intents: One Java Declaration for Siri, Spotlight, and Shortcuts
@AppIntent can expose a public static Java method to Siri, Spotlight, and Shortcuts. The same declaration can also drive an Android launcher shortcut or an internal application command. PR #5559 adds com.codename1.intents and the build-time annotations behind that integration. The build generates only the native declarations each target supports. For encrypted SQLite and the rest of this week’s work, see the weekly release overview. ...

CodeScanner.scan(): Barcode Scanning Without Rebuilding the Camera Pipeline
The new vision analyzers could read barcodes, faces, poses, text, documents, and segmentation masks. Scanning one QR code still meant opening a camera, configuring a session, listening for frames, converting each frame, feeding a pipeline, moving the result to the event thread, and restoring the previous form. The low-level layer remains necessary for custom camera products. It should not be a prerequisite for reading one code or counting faces. ...

Tapjacking Protection: Rejecting Android Touches Behind an Overlay
We are continuing our security hardening work with protection for the input path. A confirmation screen can be correct and still receive a tap the user did not understand. On Android, another application can draw over the screen and make a transfer button look like part of a different interaction. PR #5553 adds tapjacking and screen-overlay protection to DeviceIntegrity. It can report the condition, drop the full gesture, and ask Android 12 or newer to prevent overlay windows on a sensitive screen. ...

One Java API for HomeKit, Matter, and Google Home
A light can expose brightness through a HomeKit characteristic or a Matter cluster. Application code should ask for brightness, not carry both platform identifiers and two sets of value rules. PR #5554 adds com.codename1.home, a portable model for listing accessories, reading and writing traits, watching changes, running scenes, and commissioning Matter devices. The API also reports cases where the platforms cannot give the same answer. For the other work that shipped this week, see the weekly release overview. ...

JavaScript Find in Page: DOM Text Above the Codename One Canvas
Browser search cannot find pixels. That was the JavaScript port’s text model: Codename One drew each glyph onto a canvas, so a visible label was invisible to find-in-page, text selection, and ordinary browser text machinery. PR #5552 keeps the canvas renderer and promotes eligible visible text into a DOM layer. Codename One still measures and places every run. The browser handles the part it is better at: text rasterization, selection, search, accessibility, input metadata, and device-pixel resolution. ...

Watch Apps: One Codebase, Two Real Applications
A watch app is not a second form in the phone process. It is another application on another device, with its own storage, startup sequence, and periods when the other side is unreachable. PR #5487 now builds an Apple Watch companion from codename1.watchMain. On Wear OS, the same entry point becomes the Android product when codename1.watchStandalone=true; a companion Wear APK beside the phone application is not generated yet. The release also adds one phone-to-watch API that maps to WCSession on Apple platforms and the Wearable Data Layer on Android. ...