MicroEJ Docs
  • Search
  • API
  • Supported Hardware
DEVELOPER ZONE
  • Glossary
  • Overview
    • What is MicroEJ?
    • MICROEJ VEE
    • MICROEJ SDK
    • Executable Build Flow
  • Getting Started
    • VEE Ports for Evaluation
      • i.MX RT1170 Evaluation Kit
        • Prerequisites
        • Environment Setup
        • Set up the i.MX RT1170 VEE Port project on your IDE
        • Accept the MICROEJ SDK EULA
        • Run an Application on the Virtual Device
        • Well Done!
        • Run an Application on the i.MX RT1170 Evaluation Kit
        • Modify the Java Application
        • Going Further
      • i.MX 93 FRDM & EVK Boards
        • Prerequisites
        • Environment Setup
        • Set up the Application on your IDE
        • Accept the MICROEJ SDK EULA
        • Run an Application on the Virtual Device
        • Well done!
        • Run an Application on i.MX93
        • Modify the Java Application
        • Going Further
      • STM32F7508-DK Evaluation Kit
        • Prerequisites
        • Environment Setup
        • Set up the Application on your IDE
        • Accept the MICROEJ SDK EULA
        • Run an Application on the Virtual Device
        • Well Done!
        • Run an Application on STM32F7508-DK Evaluation Kit
        • Modify the Java Application
        • Going Further
    • VEE Port Examples
  • SDK 6 User Guide
    • Installation
      • System Requirements
      • Check your JDK version
      • Configure Repositories
      • SDK EULA Acceptation
      • Install the IDE
      • Install the IDE Plugins
    • Licenses
      • SDK EULA
      • Commercial Component License
      • License Manager Overview
      • License Check
      • SDK EULA Acceptation
      • Evaluation Licenses
        • Get your Machine UID
        • Request your Activation Key
        • Install the License Key
        • Check Activation
      • Expiration Warning Message
        • Troubleshooting
      • Production Licenses
        • Request your Activation Key
        • Activate your USB Dongle
        • Check Activation
        • USB Dongle on GNU/Linux
        • USB Dongle with Docker on Linux
        • USB Dongle with WSL
        • Troubleshooting
        • Remote USB Dongle Connection
    • Sentinel License Management
      • Setup the Sentinel Floating License Server
        • Install the Sentinel LDK Run-time Environment (RTE) for License Server
        • Configure the License Server
      • Setup the Developer Workstation
        • Add Remote Floating License Server
        • Running in a container
      • Runtime Installation Instructions and Troubleshooting
        • Check Activation with the Command Line Tool
        • Troubleshooting
    • Scope and Limitations
    • Create a Project
      • Configure a Project
        • Application Project
        • Library Project
        • Mock
        • Java SE Library Project
        • Runtime Environment Project
      • Create a subproject in an existing project
      • Gradle Wrapper
      • SDK and Gradle Compatibility
    • Import a Project
    • Select a VEE Port
      • Using a Module Dependency
      • VEE Port project inside a multi-project
      • Local VEE Port project outside a multi-project
      • Using a Local VEE Port Directory
      • Using a Local VEE Port Archive
      • Architecture Usage Selection
      • Resolve a VEE Port transitively
    • Run on Simulator
      • Verbose Mode
      • Debug on Simulator
      • Generate Code Coverage
      • Generate Heap Dump
      • Run several Applications on Simulator
    • Build an Executable
      • Trigger Executable Build by Default
      • Build a Stripped Executable
      • Trigger Stripped Executable Build by Default
    • Run on Device
      • Deploying the Executable without building it
    • Select a Kernel
      • Using a Module Dependency
      • Kernel project inside a multi-project
      • Local Kernel project outside a multi-project
      • Using a Local Kernel
      • Resolve a Kernel transitively
    • Build a Feature file
      • Trigger Feature Build by Default
      • Build a Feature file from a WPK
    • Build a Virtual Device
      • Embed JDKs in a Virtual Device
      • Add a Pre-Installed Application in a Virtual Device
      • Add a Kernel API in a Virtual Device
      • Add a Runtime Environment in a Virtual Device
      • Add a Tool in a Virtual Device
      • Trigger Virtual Device Build by Default
    • Add a Dependency
      • Configurations
      • Version
        • Version Check
      • Dependencies Repositories
    • Test a Project
      • JUnit Compliance
      • Gradle Integration
      • Test on Simulator
        • Configure the Testsuite
        • Configure the VEE
        • Create a Test Class
        • Execute the Tests
        • Generate Code Coverage
        • Filter the Tests
        • Debug the Tests on Simulator
      • Test on Device
      • Test on Java SE VM
      • Testsuite Reports
        • Publish Testsuite Reports
      • Mixing tests
        • Mixing tests on the Simulator and on a device
        • Mixing tests on the Simulator and on a Java SE VM
      • Configure the Testsuite Engine
      • Inject Application Options
        • Inject Application Options Globally
        • Inject Application Options For a Specific Test
        • Inject Resources For a Specific Test
      • Testsuite Advanced Configuration
        • Configure a VEE by Testsuite
    • Publish a Project
    • Development Tools
      • Stack Trace Reader
        • Principle
        • Functional Description
        • Usage
      • Code Coverage Analyzer
        • Principle
        • Functional Description
        • Dependencies
        • Installation
        • Use
        • Options
      • Memory Map Analyzer
        • Principle
        • Use
        • Troubleshooting
      • Heap Dumper & Heap Analyzer
        • Introduction
        • Heap Dumper
        • Heap Viewer
      • Font Designer
        • Principle
        • Functional Description
        • Create an EJF Font
        • Edit an EJF Font
        • Main Properties
        • Character List
        • Character Editor
        • Preview
        • Removing Unused Characters
        • Use an EJF Font
        • Dependencies
        • Installation
        • Use
      • Local Deployment Socket
        • Principle
        • Functional Description
        • Use
        • Options
      • Serial to Socket Transmitter
        • Principle
        • Use
        • Options
      • Kernel API Generator
        • Principle
        • Use
        • Options
      • Null Analysis
        • Principle
        • Java Code Annotation
        • IDE Configuration
        • Launching Null Analysis
        • Disabling Analysis for Test Folder
        • Sharing Null Analysis IDE Configuration
        • MicroEJ Libraries
    • VEE Port
      • Create a VEE Port
        • VEE Port Project Creation
        • Architecture Selection
        • Pack Import
        • Packs Configuration
        • Front Panel Configuration
        • VEE Port Usage
        • VEE Port Customization
        • BSP Connection
        • VEE Port Publication
        • Link-Time Option
      • Test a VEE Port
        • Import the Testsuite
        • Configure a Testsuite
        • Run the Testsuite
        • Examine the Testsuite Report
        • Rerun Tests
        • Debug Tests on Simulator
        • Update Test Class of the Testsuite on Device
        • Decrypt a Stack Trace in a Test
    • Generate the SBOM
      • Scope of the Generated SBOM
      • Prerequisites
      • Generate an SBOM in SPDX Format
        • Configure the Gradle SPDX Plugin
        • Generate the SBOM
        • Convert a SPDX 2 SBOM to SPDX 3
        • Include Additional Configurations
      • Generate an SBOM in CycloneDX Format
        • Configure the Gradle CycloneDX Plugin
        • Generate the SBOM
      • Integrate SBOM Generation into the Build
        • Generate the SBOM When Building the Executable
        • Publish the SBOM as an Artifact
    • Module Repository
      • Create a Module Repository Project
      • Include Modules
        • Configure a Partial Repository
        • Include a Single Artifact
        • Include Production Architectures
        • Exclude Artifacts
        • Include Multiple Versions of a Module
        • Include the Ivy Descriptor of a Module
        • Disable the Generation of the Maven Descriptor for SDK 5 Modules
      • Module Repository Check
      • Build the Repository
      • Use an Offline Module Repository
    • Manage Versioning
    • Manage Resolution Conflicts
    • Migrate an SDK 5 Project
      • Migrate an Application/Library Project
        • Build Descriptor File
        • Configuration Folder
        • Specific Configuration
        • Build Scripts
      • Migrate a VEE Port Project
        • Project Structure
        • New Development Flow
        • Settings Build File
        • Configuration Subproject
        • Front Panel Project
        • Mock
        • Tool Subproject
        • Testsuites Project
        • BSP
        • Wrap up
    • Module Natures
      • Add-On Library
      • Application
      • Java SE Library
      • Mock
      • Runtime Environment
      • VEE Port
      • Module Repository
      • Tasks
        • adp
        • loadVee
        • runOnSimulator
        • checkModule
        • buildApplicationObjectFile
        • buildExecutable
        • stripExecutable
        • buildWPK
        • buildVirtualDevice
        • loadKernelExecutable
        • buildFeature
        • generateKernelApi
        • runOnDevice
        • buildMockRip
        • execTool
        • generateApplicationWrapper
        • compileWrapperJava
        • shrinkRuntimeEnvironment
        • compileRuntimeEnvironment
        • buildRuntimeEnvironmentJar
        • buildFeatureFromWPK
        • buildVeePort
        • buildVeePortConfiguration
        • extractLibrariesSources
        • javadoc
        • javadocJar
        • buildModuleRepository
        • checkModuleRepository
      • Global Properties
    • Troubleshooting
      • Java Compiler Version Issue
      • Unresolved Dependency When No Repository
      • Unresolved Dependency in Repositories
      • Invalid SSL Certificate
      • Failing Resolution in adp Task
      • Missing Version for Publication
      • Fail to load a VEE Port as dependency
      • Missing Tasks in the Gradle view of Android Studio
      • Code Detected as Unreachable in IntelliJ
      • Resolution Conflict with Testsuite Dependencies
      • Gradle Build Files (*.kts) Errors in IntelliJ IDEA
      • Fail to fetch the prod version of an Architecture
      • Missing Compilation Capability
      • Build Errors from JVM Memory Misconfiguration
      • No Architecture Defined Error
      • Build Errors from JDK / Gradle Incompatibilities in VS Code
      • Gradle Build Performance
      • Gradle Build Performance: Windows-Specific Optimizations
        • Step 1: Exclude key folders from Windows Defender
        • Step 2: Disable NTFS features that slow down builds (optional)
      • Kotlin incompatible version
      • Hidden Exception Stack Trace in IntelliJ IDEA
      • Gradle Sync Failure on WSL with the Android Plugin
    • Tutorials
      • Branding an Eclipse IDE
        • Install Eclipse and the MicroEJ Plugin
        • Create the Project
        • Configure the Product
        • Advanced Options
        • Export the Product
      • Creating and Using a Developer Package
        • Step 1 — Create the Developer Package Project
        • Step 2 — Configure the Application Developer Mode
        • Step 3 — Configure the Module Repository
        • Step 4 — Configure the Kernel Artifacts
        • Step 5 — Define a Custom EULA (Optional)
        • Step 6 — Deliver the Developer Package
      • Creating and Using an Offline Repository
        • Offline Repository for the Gradle Plugins
        • Offline Module Repository
    • How-to Guides
      • How To Define a Specific Java Home for Gradle
      • How To Pass a Property to Project Build Script
      • How To Skip a Gradle Task
        • Skip the task only
      • How To Automatically reload a Gradle project
      • How To Add a Repository
        • How To Add a Module Repository …
        • How To Add a Plugin Repository
      • How To Configure Multiple Gradle Repositories
      • How To Resolve Dependencies in the IDE
        • Dependencies Between Subprojects of a Multi-Project
      • How To Build a Project
      • How To Build and Deploy Object Files without Building the Executable
      • How To Build an Executable With Multiple VEE Ports
      • How To Create a Custom Configuration in the IDE
      • How To Use a FeatureEntryPoint class as my Application EntryPoint
      • How To Define a Custom EULA
      • How To Disable Ivy Descriptor Publication
        • Disable Ivy Descriptor Publication by Default
        • Force Ivy Descriptor Publication When Disabled by Default
      • How To Check Dependencies Updates
        • Configure the Project
        • Generate the Report
      • How To Create Custom ExecTool Task
      • How To Pass JVM Arguments to the VEE Launch Scripts
        • Debugging Options
      • How To Use Proguard
        • Javadoc and Sources Management
      • How To Enable Class Loading Verbose Logs
      • How To Display Java Compilation Warnings
      • How To Create a VEE Port Testsuite
    • Appendices
      • Virtual Device
        • Structure
      • Dependencies Configurations
        • Dependencies Configurations in a VEE Port Project
        • Dependencies Configurations in a Module Repository Project
        • Dependencies Configuration for the SBOM
        • Variants
        • Attributes of a Variant
      • Application Wrapper
      • Cheat Sheet
      • Java Lambdas
      • VEE transitivity
        • VEE Port transitivity
      • Foundation Libraries Mapping
        • Check Resolution Conflicts
        • Check Libraries Existence in the VEE Port
        • Check Libraries Compatibility in the VEE Port
    • Changelog
      • [1.8.0] - 2026-09-03
        • Added
        • Changed
        • Fixed
      • [1.7.0] - 2026-07-02
        • Added
        • Changed
        • Fixed
      • [1.6.0] - 2026-04-08
        • Added
        • Changed
        • Fixed
      • [1.5.0] - 2025-12-18
        • Added
        • Changed
        • Fixed
      • [1.4.0] - 2025-09-18
        • Added
        • Changed
        • Fixed
      • [1.3.1] - 2025-07-11
        • Changed
        • Fixed
      • [1.3.0] - 2025-06-19
        • Added
        • Changed
        • Fixed
      • [1.2.0] - 2025-04-09
        • Added
        • Changed
        • Fixed
      • [1.1.0] - 2025-02-28
        • Added
        • Removed
        • Changed
        • Fixed
      • [1.0.0] - 2024-12-18
        • Added
        • Changed
        • Fixed
      • [0.20.0] - 2024-10-23
        • Added
        • Changed
        • Fixed
      • [0.19.0] - 2024-09-13
        • Added
        • Changed
        • Fixed
      • [0.18.0] - 2024-08-22
        • Added
        • Fixed
      • [0.17.0] - 2024-05-30
        • Added
        • Changed
        • Fixed
      • [0.16.0] - 2024-03-18
        • Added
        • Changed
        • Fixed
      • [0.15.0] - 2024-01-26
        • Added
        • Changed
        • Fixed
        • Removed
      • [0.14.0] - 2024-01-03
        • Added
        • Changed
        • Fixed
      • [0.13.0] - 2023-11-10
        • Added
        • Fixed
      • [0.12.1] - 2023-10-16
        • Fixed
      • [0.12.0] - 2023-10-13
        • Added
        • Changed
        • Fixed
      • [0.11.1] - 2023-09-22
        • Fixed
      • [0.11.0] - 2023-09-22
        • Changed
      • [0.10.0] - 2023-09-13
        • Added
        • Fixed
      • [0.9.0] - 2023-09-01
        • Added
        • Changed
        • Fixed
      • [0.8.0] - 2023-07-13
        • Added
        • Fixed
      • [0.7.0] - 2023-06-26
        • Added
        • Changed
      • [0.6.0] - 2023-05-30
        • Added
        • Changed
        • Fixed
      • [0.5.0] - 2023-03-24
        • Added
        • Changed
      • [0.4.0] - 2023-01-27
        • Added
        • Changed
        • Fixed
      • [0.3.0] - 2022-12-09
        • Added
        • Changed
        • Fixed
      • [0.2.0] - 2022-05-17
        • Changed
      • [0.1.0] - 2022-05-03
        • Added
        • Fixed
    • Migration Notes
      • From 1.6.0 to 1.7.0
        • New SDK EULA
      • From 1.5.0 to 1.6.0
      • From 1.3.1 to 1.4.0
      • From 1.0.0 to 1.1.0
      • From 0.19.0 to 0.20.0
        • Minimum Gradle version
        • New SDK EULA
        • Plugins and Configurations renaming
        • Virtual Device Build
      • From 0.15.0 to 0.16.0
        • Unification of Application EntryPoint
        • Testsuite Execution
      • From 0.14.0 to 0.15.0
        • Unification of VEE dependency declaration
      • From 0.11.1 to 0.12.0
        • Use of File Dependencies to Define a Local VEE Port or a Kernel Executable
      • From 0.10.0 to 0.11.0
        • Gradle mechanism usage for Multiple VEE Ports Support
      • From 0.8.0 to 0.9.0
        • Merge of the veePortDirs and veePortFiles properties
  • Application Developer Guide
    • MicroEJ Runtime
      • Build Flow
      • Java Language
        • Limitations
        • Java Lambdas
      • Core Libraries
        • Embedded Device Configuration (EDC)
        • Beyond Profile (BON)
        • Simple Native Interface (SNI)
        • Kernel & Features (KF)
        • Specifications
      • Scheduler
        • Scheduling Policy
        • Threads and Stacks Allocation
      • Managed Heap & Garbage Collector
        • Death Notification
        • Death Notification Actions
      • Architecture Characteristics
    • SOAR
      • Java Symbols Encoding
      • Class Initialization Code
      • Method Devirtualization
      • Method Inlining
      • Binary Code Verifier
      • Enable SOAR Verbose Logs
    • SOAR Output Files
      • Launch Output Folder
      • Published Module Files
      • The SOAR Map File
      • The SOAR Information File
    • Virtual Device
    • MicroEJ Classpath
      • Application Classpath
      • Classpath Load Model
      • Classpath Elements
        • Application Entry Points
        • Types
        • Resources
        • Immutable Objects
        • System Properties
        • Constants
    • Application Resources
    • Standalone Application
      • Introduction
      • Standalone Application Options
      • Defining an Option with SDK 6
        • Using a Properties File
        • Using System Properties
      • Defining an Option with SDK 5 or lower
        • Using a Launcher
        • Using a Properties File
        • Generating a Properties File
      • Category: Runtime
        • Group: Types
        • Group: Assertions
        • Group: Trace
        • Category: Memory
      • Category: Simulator
        • Group: Options
        • Group: HIL Connection
        • Group: Shielded Plug server configuration
        • Group: Advanced Simulation Options
        • Category: Code Coverage
        • Category: Debug
        • Category: Heap Dumper
        • Category: Logs
        • Category: Mock
        • Category: Kernel
      • Category: Libraries
        • Category: EDC
        • Category: Shielded Plug
        • Category: External Resources Loader
      • Category: Device
        • Category: Core Engine
        • Category: Deploy
      • Category: Feature
        • Group: Build
    • Sandboxed Application
      • Fundamental Concepts
        • Classpath Processing
      • Shared Interfaces
        • Principle
        • Shared Interface Usage
        • Transferable Types
        • Implementing the Proxy Class
      • AppConnect Application Management
        • AppConnect Web App
        • AppConnect REST API
        • AppConnect HTTP CLI
        • AppConnect Serial Shell
    • Character Encoding
      • Default Encoding
      • UTF-8 Encoding
      • Custom Encoding
      • Console Output
        • Set Encoding in MicroEJ SDK Console
    • Limitations
    • GitHub Repositories
      • Repository Import
      • MicroEJ GitHub Badges
    • Module Repositories
      • Central Repository
        • Use
        • Licensing
        • Changelog
        • Java APIs (Javadoc)
      • Developer Repository
        • Use
        • Licensing
        • Changelog
        • Javadoc
        • Community
      • Content Organization
    • Libraries
      • Graphical User Interface
        • MicroUI
        • MicroVG
        • Drawing Strategy
        • Motion
        • MWT (Micro Widget Toolkit)
        • Widgets
        • Navigation
        • Simulation
      • Native Language Support (NLS)
        • Introduction
        • Principle
        • Localization Source Files
        • NLS List Files
        • Usage
        • Error Codes
        • Locale
        • Plural Forms
        • Missing Translations
        • Converter
        • Resource Generation
        • External Resource
        • Limitations
        • Virtual Device PO Loader Tool
      • Data Serialization
        • Overview
        • Good Practices
        • XML
        • JSON
        • CBOR
        • Protobuf
        • FlatBuffers
      • Networking
        • Foundation Libraries
        • Add-On Libraries
        • HOKA Web Server
      • Cryptography
        • Crypto
        • Security (deprecated)
      • Bluetooth
        • Bluetooth API Library
        • Bluetooth Utility Library
      • Audio
        • Introduction
        • Usage
        • APIs
        • Configuration
        • Examples
      • MicroAI
        • Introduction
        • Usage
        • Machine Learning Model Format
        • APIs
        • Configuration
        • Example
      • Date and Time
        • Introduction
        • Overview
        • Usage
        • Examples
        • Time Zone Support
        • Migration Guide
        • Restrictions
      • Event Queue
        • Principle
        • Functional Description
        • Use
      • GNSS
        • Principle
        • Functional Description
        • Use
      • JavaScript
        • Getting Started
        • Sources Management
        • Examples
        • API
        • Communication Between Java code and JavaScript Code
        • Tests
        • Limitations
        • Troubleshooting
        • Internals
      • Storage
        • Introduction
        • Usage
        • APIs
      • Serial
        • Principle
        • Serial Mock
        • Use
    • Development Tools
      • Code Instrumentation for Logging
        • Introduction
        • Overview
        • Log with the Trace Library
        • Log with the Message Library
        • Log with the Logging Library
        • Remove Logging Related Code
      • Event Tracing
        • Description
        • Event Recording
        • Java API Usage
        • VEE Port Implementation
        • Advanced Event Tracing
      • Activity Profiler
        • Installation
        • Recording a Trace
        • Understanding a Trace
        • Using a Trace
        • Advanced Options
        • Changelog
      • VEE Debugger Proxy
        • Principle
        • Installation
        • Debugging Executable for Linux or QNX target
        • Debugging Executable for MCU target
        • VEE Debugger Proxy Options Summary
        • Troubleshooting
      • Dependency Discoverer
        • Introduction
        • Installation
        • Use
      • MicroEJ Linker
        • Overview
        • ELF Overview
        • Linking Process
        • Linker Specific Configuration File Specification
        • Auto-generated Sections
        • Execution
        • Error Messages
        • Map File Interpretor
      • MicroEJ Testsuite Engine
        • Introduction
        • Using the MicroEJ Testsuite Ant Tasks
        • Using the Trace Analyzer
        • Appendix
      • Heap Usage Monitoring
        • Introduction
        • Heap Usage Introspection
        • Automatic Heap Usage Monitoring
        • Heap Usage Analysis
      • GUI Software Robot
        • Overview
        • Record the Scenario
        • Set Up the Scenario Player
        • Run the Scenario
  • VEE Porting Guide
    • Introduction
      • VEE Port Build Process
      • Create a VEE Port for a Custom Device
        • A VEE Port Example is already available for the same MCU/RTOS/C Compiler
        • A VEE Port Example is not available for the same MCU/RTOS/C Compiler
        • Platform Validation
        • Further Assistance Needed
    • MicroEJ Architecture
      • Naming Convention
      • Architectures Changelog
        • Notation
        • [8.6.0] - [2026-03-13]
        • [8.5.0] - 2025-10-09
        • [8.4.0] - 2025-05-28
        • [8.3.0] - 2024-12-24
        • [8.2.0] - 2024-09-19
        • [8.1.1] - 2024-06-17
        • [8.1.0] - 2023-12-22
        • [8.0.0] - 2023-06-27
        • [maintenance/7.20.5] - 2024-05-24
        • [7.20.1] - 2023-04-10
        • [7.20.0] - 2023-04-04
        • [7.19.0] - 2023-02-16
        • [7.18.1] - 2022-10-26
        • [7.18.0] - 2022-09-14
        • [7.17.0] - 2022-06-13
        • [7.16.3] - 2022-04-06
        • [7.16.2] - 2021-11-10
        • [7.16.1] - 2021-07-16
        • [7.16.0] - 2021-06-24
        • [7.15.1] - 2021-02-19
        • [7.15.0] - 2020-12-17
        • [7.14.1] - 2020-11-30
        • [7.14.0] - 2020-09-25
        • [7.13.3] - 2020-09-18
        • [7.13.2] - 2020-08-14
        • [7.13.1] - 2020-07-20
        • [7.13.0] - 2020-07-03
        • [7.12.0] - 2019-10-16
        • [7.11.0] - 2019-06-24
        • [7.10.1] - 2019-04-03
        • [7.10.0] - 2019-03-29
        • [7.9.1] - 2019-01-08
        • [7.9.0] - 2018-09-20
        • [7.8.0] - 2018-08-01
        • [7.7.0] - 2018-07-19
        • [7.6.0] - 2018-06-29
        • [7.5.0] - 2018-06-15
        • [7.4.0] - 2018-06-13
        • [7.3.0] - 2018-03-07
        • [7.2.0] - 2018-03-02
        • [7.1.2] - 2018-02-02
        • [maintenance/6.18.0] - 2017-12-15
        • [7.1.1] - 2017-12-08
        • [7.1.0] - 2017-12-08
        • [7.0.0] - 2017-11-07
        • [6.17.2] - 2017-10-26
        • [6.17.1] - 2017-10-25
        • [6.17.0] - 2017-10-10
        • [6.16.0] - 2017-09-27
        • [6.15.0] - 2017-09-12
        • [6.14.2] - 2017-08-24
        • [6.14.1] - 2017-08-02
        • [6.13.0] - 2017-07-21
        • [6.12.0] - 2017-07-07
        • [6.11.0] - 2017-06-13
        • [6.11.0-beta1] - 2017-06-02
        • [6.10.0] - 2017-06-02
        • [6.9.2] - 2017-06-02
        • [6.9.1] - 2017-05-29
        • [6.9.0] - 2017-03-15
      • Release Notes
        • Foundation Libraries
      • Default Application
    • MicroEJ Packs
      • Overview
      • Naming Convention
        • Architecture Specific Pack
        • Generic Pack
    • BSP Connection
      • Principle
      • Options
      • Build Script File
      • Run Script File
    • VEE Port Qualification
      • Introduction
      • VEE Port Qualification Tools Overview
      • VEE Port Testsuite
      • Testsuite Versioning
        • Core Engine
        • UI Pack
        • VG Pack
        • FS Pack
        • GNSS Pack
        • Bluetooth Pack
        • NET Pack
        • Crypto Library
        • Audio Pack
        • MicroAI Pack
        • Event Queue Pack
        • Serial Pack
    • Core Engine
      • Block Diagram
      • Link Flow
      • Architecture
      • Threading Integration
      • Capabilities
      • Implementation
        • Initialization
        • Scheduling
        • Idle Mode
        • Time
        • Configuring Memory Dynamically
        • Error Codes
        • Example
        • Restart the Core Engine
        • Dump the State of the Core Engine
        • Check Internal Structure Integrity
      • Generic Output
      • Link
      • Dependencies
      • Installation
      • Abstraction Layer
      • Memory Considerations
      • Use
    • Event Tracing
      • Principle
      • Dependencies
      • Existing implementations
      • Installation
      • Use
    • Advanced Event Tracing
      • Principle
      • Platforms using GNU LD linker
      • Platforms using IAR ILINK linker
    • Multi-Sandbox
      • Principle
      • Functional Description
      • Memory Considerations
      • Dependencies
      • Installation
      • Use
      • Feature Installation
        • Introduction
        • Installation Flow
        • Feature Persistency
        • Advanced Options
        • Determining the Amount of Required Memory
        • In-Place Installation
      • RAM Control
    • Tiny-Sandbox
      • Principle
      • Installation
      • Limitations
    • Foundation Libraries
      • Create the Library Project
      • Create a Java Class
      • Define C Header Files
      • Implement Native Code
      • Create the Mock
      • Install the Library in the VEE Port
      • Test in an Application
      • Implement a Validation Testsuite
      • Extend the Link Process
        • Define Configurable Properties in LSC Files
        • Set Default Values for the Configurable Properties
      • Configure Required Types
    • Native Interface Mechanisms
      • Simple Native Interface Specification (SNI)
        • Introduction
        • First Example
        • Java code and C Execution Sequence
        • Managed World to C World
        • Startup
        • Resources
        • Typical use cases
      • Shielded Plug (SP)
        • Principle
        • Functional Description
        • Shielded Plug Compiler
        • Example
        • Dependencies
        • Installation
        • Use
      • MicroEJ Java H
        • Principle
        • Functional Description
        • Dependencies
        • Installation
        • Use
    • External Resources Loader
      • Functional Description
      • Implementations
        • Open a Resource
        • Resource Identifier
        • Resource Offset
        • Resource Inside the CPU Address Space Range
      • External Resources Folder
      • Dependencies
      • Installation
      • Use
        • On Simulator
        • On Device
    • Serial
      • Principle
      • Sequence model
      • Abstraction layer porting guide
        • Initialization
        • Open / Close native resources
        • Configure the serial line parameters
        • IO
        • Note on exceptions
      • Installation
      • Testing
        • Configuration
        • Running on Target
    • Graphical User Interface
      • Principle
      • UI Port
        • UI Port Configuration
        • Simulation
        • BSP Port
        • GPU Port
      • MicroUI
        • Principle
        • Architecture
        • Library ej.api.Drawing
        • Thread
        • Native Calls
        • Antialiasing
        • Installation
        • Use
      • Static Initialization
        • Principle
        • Functional Description
        • XML File
        • XML File Example
        • Dependencies
        • Installation
        • Use
      • Abstraction Layer API
        • Principle
        • Embedded VEE Port
        • Simulator
      • LED
        • Principle
        • Functional Description
        • Abstraction Layer API
        • Typical Implementation
        • Dependencies
        • Installation
        • Use
      • Input
        • Principle
        • Functional Description
        • Driver Listener
        • Static Initialization
        • Standard Event Generators
        • Generic Event Generators
        • Abstraction Layer API
        • Typical Implementation
        • Event Buffer
        • Dependencies
        • Installation
        • Use
      • Display
        • Principle
        • Chapters Organization
        • Display Configuration
        • Display Connection
        • Buffer Policy
        • Pixel Structure
        • CLUT
        • Memory Layout
        • Byte Layout
        • Display Synchronization
        • Abstraction Layer API
        • Typical Implementations
        • Dependencies
        • Installation
        • Use
      • Buffer Refresh Strategy
        • Overview
        • Timeline
        • Strategies
        • Strategy: Single
        • Strategy: Predraw
        • Strategy: Default
        • Strategy: Custom
        • Strategy: Legacy
        • MicroUI C Module
        • Simulation
      • Drawings
        • Abstraction Layer
        • Destination Format
        • Graphics Engine Software Algorithms
        • MicroUI C Module
        • Simulation
        • Custom Drawing
        • Drawing Logs
      • Images
        • Overview
        • Image Format
        • Image Generator
        • Image Loader
        • Image Renderer
        • Buffered Image
      • Fonts
        • Overview
        • Internal Font Format
        • Font Generator
        • Font Loader
        • Custom Font
        • Font Renderer
      • C Modules
        • Principle
        • UI Pack
        • C Module: MicroUI
        • C Module: MicroUI Over DMA2D
        • C Module: MicroUI Over VGLite
        • C Module: MicroUI Over NemaGFX
        • Compatibility
      • Simulation
        • Principle
        • Module Dependencies
        • MicroUI Implementation
        • Display Widget
        • Inputs Extensions
        • Heap Simulation
        • Image Decoders
        • Drawings
        • Image Rendering
        • Buffered Image
        • Classpath
        • Dependencies
        • Installation
        • Use
      • Release Notes
        • MicroEJ Architecture Compatibility Version
        • Foundation Libraries
        • Abstraction Layer Interface
        • Front Panel API
        • Image Generator API
        • C Modules
      • Changelog
        • [14.5.2] - 2026-02-13
        • [14.5.1] - 2025-10-13
        • [14.4.2] - 2025-05-20
        • [14.4.1] - 2025-03-13
        • [14.3.3] - 2025-02-18
        • [14.3.2] - 2025-02-10
        • [14.3.0] - 2025-01-24
        • [14.2.0] - 2024-11-18
        • [13.7.3] - 2024-10-18
        • [14.1.1] - 2024-10-17
        • [14.0.3] - 2024-10-01
        • [14.0.2] - 2024-07-26
        • [14.0.1] - 2024-04-09
        • [14.0.0] - 2024-02-14
        • [13.7.2] - 2023-12-21
        • [13.7.0] - 2023-10-23
        • [13.6.2] - 2023-09-20
        • [13.6.1] - 2023-07-26
        • [13.6.0] - 2023-07-17
        • [13.5.1] - 2023-06-08
        • [13.5.0] - 2023-05-03
        • [13.4.1] - 2023-02-06
        • [13.4.0] - 2022-12-13
        • [13.3.1] - 2022-09-09
        • [13.3.0] - 2022-09-02
        • [13.2.0] - 2022-05-05
        • [13.1.0] - 2021-08-03
        • [13.0.7] - 2021-07-30
        • [13.0.6] - 2021-03-29
        • [13.0.5] - 2021-03-08
        • [13.0.4] - 2021-01-15
        • [13.0.3] - 2020-12-03
        • [13.0.2] - 2020-10-02
        • [13.0.1] - 2020-09-22
        • [13.0.0] - 2020-07-30
        • [12.1.5] - 2020-10-02
        • [12.1.4] - 2020-03-10
        • [12.1.3] - 2020-02-24
        • [12.1.2] - 2019-12-09
        • [12.1.1] - 2019-10-29
        • [(maint) 8.0.0] - 2019-10-18
        • [12.1.0] - 2019-10-16
        • [12.0.2] - 2019-09-23
        • [12.0.1] - 2019-07-25
        • [12.0.0] - 2019-06-24
        • [11.2.0] - 2019-02-01
        • [11.1.2] - 2018-08-10
        • [11.1.1] - 2018-08-02
        • [11.1.0] - 2018-07-27
        • [11.0.1] - 2018-06-05
        • [10.0.2] - 2018-02-15
        • [11.0.0] - 2018-02-02
        • [10.0.1] - 2018-01-03
        • [10.0.0] - 2017-12-22
        • [9.4.1] - 2017-11-24
        • [9.4.0] - 2017-11-23
        • [9.3.1] - 2017-09-28
        • [9.3.0] - 2017-08-24
        • [9.2.1] - 2017-08-14
        • [9.2.0] - 2017-07-21
        • [9.0.2] - 2017-04-21
        • [9.1.2] - 2017-03-16
        • [9.0.1] - 2017-03-13
        • [9.1.1] - 2017-02-14
        • [9.1.0] - 2017-02-13
        • [9.0.0] - 2017-02-02
        • [8.1.0] - 2016-12-24
        • [8.0.0] - 2016-11-17
        • [7.4.7] - 2016-06-14
        • [7.4.2] - 2016-05-25
        • [7.4.1] - 2016-05-10
        • [7.4.0] - 2016-04-29
        • [7.3.0] - 2016-04-25
        • [7.2.1] - 2016-04-18
        • [7.2.0] - 2016-04-05
        • [7.1.0] - 2016-03-02
        • [7.0.0] - 2016-01-20
        • [6.0.1] - 2015-12-17
        • [6.0.0] - 2015-11-12
      • Migration Guide
        • From 14.4.2 to 14.5.2
        • From 14.3.3 to 14.4.2
        • From 14.3.3 to 14.4.1
        • From 14.2.0 to 14.3.3
        • From 14.1.1 to 14.2.0
        • From 14.0.3 to 14.1.1
        • From 14.0.1 to 14.0.3
        • From 13.7.x to 14.0.1
        • From 13.6.x to 13.7.2
        • From 13.5.x to 13.6.2
        • From 13.4.x to 13.5.1
        • From 13.3.x to 13.4.1
        • From 13.2.x to 13.3.1
        • From 13.1.x to 13.2.0
        • From 13.0.x to 13.1.0
        • From 12.x to 13.0.7
        • From 11.x to 12.1.5
        • From 10.x to 11.2.0
        • From 9.x to 10.0.2
        • From 8.x to 9.4.1
        • From 7.x to 8.1.0
    • Vector Graphics
      • Principle
      • MicroVG
        • Principle
        • Architecture
        • Native Calls
        • Installation
        • Use
      • Abstraction Layer API
        • Principle
        • Embedded VEE Port
        • Simulator
      • Matrix
        • Principle
        • Functional Description
        • Abstraction Layer API
        • Use
      • Path
        • Principle
        • Functional Description
        • Abstraction Layer API
        • Use
      • Gradient
        • Principle
        • Functional Description
        • Abstraction Layer API
        • Use
      • Image
        • Principle
        • Compile-time Image
        • Resource Vector Image
        • Buffered Vector Image
        • Runtime Image
        • Rendering Engine
        • Abstraction Layer API
        • Simulation
        • Use
      • Font
        • Principle
        • Functional Description
        • Abstraction Layer API
        • External Memory
        • Use
      • C Modules
        • Principle
        • UI Pack & MicroUI C Modules
        • VG Pack
        • C Module: MicroVG
        • Library: FreeType
        • Library: HarfBuzz
        • C Module: MicroVG Over VGLite
        • C Module: MicroVG Over NemaVG
        • Compatibility
      • Simulation
        • Principle
        • Default Extensions
        • Custom Extension
        • Installation
        • Use
      • Release Notes
        • UI Pack Compatibility Version
        • Foundation Libraries
        • C Modules Compatibility Version
      • Changelog
        • [1.8.1] - 2026-01-27
        • [1.7.2] - 2025-09-15
        • [1.7.1] - 2025-04-09
        • [1.7.0] - 2024-10-09
        • [1.6.0] - 2024-07-19
        • [1.5.1] - 2024-04-11
        • [1.5.0] - 2024-02-15
        • [1.4.2] - 2023-11-13
        • [1.4.1] - 2023-09-21
        • [1.4.0] - 2023-07-21
        • [1.3.0] - 2023-05-10
        • [1.2.1] - 2023-02-06
        • [1.2.0] - 2022-12-30
        • [1.1.1] - 2022-09-05
        • [1.0.1] - 2022-05-16
        • [1.0.0] - 2022-05-13
      • Migration Guide
        • From 1.7.2 to 1.8.1
        • From 1.7.1 to 1.7.2
        • From 1.7.0 to 1.7.1
        • From 1.6.0 to 1.7.0
        • From 1.5.x to 1.6.0
        • From 1.4.x to 1.5.1
        • From 1.3.x to 1.4.2
        • From 1.2.x to 1.3.0
    • Networking
      • Principle
      • Network Core Engine
        • Principle
        • Functional Description
        • Dependencies
        • Installation
        • Initialization
        • Use
      • SSL
        • Principle
        • Functional Description
        • Dependencies
        • Installation
        • Use
      • Network Interfaces Management
        • Overview
        • Dependencies
        • Installation
        • Use
      • Wi-Fi
        • Overview
        • Dependencies
        • Installation
        • Use
    • Bluetooth
      • Principle
      • Functional Description
      • Dependencies
      • Installation
      • Use
    • Audio
      • Principle
      • Functional Description
      • Dependencies
      • Installation
      • Use
    • MicroAI
      • Principle
      • Functional Description
      • Dependencies
      • Installation
      • Use
    • Event Queue
      • Principle
      • Dependencies
      • Installation
    • File System
      • Principle
      • Functional Description
      • Dependencies
      • Installation
        • Properties File Template
      • Use
    • GNSS
      • Principle
      • Functional Description
      • GNSS Mock
      • Dependencies
      • Installation
      • Use
    • Hardware Abstraction Layer
      • Principle
      • Functional Description
      • Identifier
        • Basic Rule
        • Generic Rules
      • Configuration
      • Dependencies
      • Installation
      • Use
    • Device Information
      • Principle
      • Dependencies
      • Installation
      • Use
    • Crypto
      • Principle
      • Supported Crypto Engines
      • Dependencies
      • Installation
      • Use
    • Security
      • Principle
      • Dependencies
      • Installation
      • Use
    • Watchdog Timer
      • Overview
      • Principle
      • Mock Implementation
      • Dependencies
      • Installation
      • Use in an Application
      • Java Code Eexample
      • Use in C inside the BSP
      • Code example in C
    • SystemView
      • Principle
      • References
      • Pre-requisites
      • Integrate SystemView in your VEE Port
        • Apply FreeRTOS patch
        • Add source files to your BSP for SystemView with MicroEJ/FreeRTOS integration
        • Configure FreeRTOS for SystemView
        • Modify startup code of your BSP
        • Add description files to Systemview installation folder
        • Non default CPU recommendations
        • Post Mortem analysis data extraction
      • Usage
        • Trace application events
        • Add custom events to the SystemView analysis
        • Core Engine OS Task
        • OS Tasks and Threads Names
        • OS Tasks and Threads Priorities
      • Troubleshooting
        • SystemView doesn’t see any activity in MicroEJ Tasks
        • OVERFLOW Events in SystemView
        • RTT Control Block Not Found
        • RTT block found by SystemView but no traces displayed
        • Bus hardfault when running SystemView without Core Engine
        • Partial or wrong analysis with warning messages in the logs
        • SystemView for STM32 ST-Link Probe
    • Simulation
      • Principle
      • Functional Description
      • Dependencies
      • Installation
      • Use
      • Mock
        • Principle
        • Functional Description
        • Example
        • Mocks Design Support
        • Dependencies
        • Installation
        • Use
        • JavaFX
        • Mock Framework
        • Event Tracing
      • Shielded Plug Mock
        • General Architecture
        • Configuration
      • Front Panel Mock
        • Principle
        • Functional Description
        • The Front Panel Project
        • Module Dependencies
        • Front Panel File
        • Widget
        • Extension / Customization
        • Installation
        • Use
      • Bluetooth Mock
        • Overview
        • Requirements
        • Controller Firmwares
        • Usage
        • Troubleshooting
    • Appendices
      • SNI Native API
        • sni.h
      • Low Level API
        • Low Level API Pattern
        • LLMJVM: Core Engine
        • LLKERNEL: Multi-Sandbox
        • LLSP: Shielded Plug
        • LLEXT_RES: External Resources Loader
        • LLSERIAL: Serial Communications
        • LLUI_INPUT: Input
        • LLUI_DISPLAY: Display
        • LLUI_LED: LEDs
        • LLVG: VectorGraphics
        • LLVG_MATRIX: Matrix
        • LLVG_PATH: Vector Path
        • LLVG_GRADIENT: Vector Linear Gradient
        • LLVG_FONT: Vector Font
        • LLNET: Network
        • LLNET_SSL: SSL
        • LLECOM_NETWORK: Network Interfaces
        • LLECOM_WIFI: Wi-Fi Management
        • LLBLUETOOTH: Bluetooth
        • LLAUDIO: Audio
        • LLML: MicroAI
        • LLEVENT: Event Queue
        • LLFS: File System
        • LLGNSS: GNSS (Global Navigation Satellite System)
        • LLHAL: Hardware Abstraction Layer
        • LLDEVICE: Device Information
        • LLWATCHDOG_TIMER: Watchdog Timer
        • LLCRYPTO: Crypto engine
        • LLSEC: Security (deprecated)
        • LLTRACE: Trace
        • LLMJVM_MONITOR: Core Engine Monitoring
      • MicroEJ Foundation Libraries
        • EDC
        • SNI
        • KF
        • Event Queue
        • MicroUI
        • FS
        • GNSS
        • Net
        • SSL
      • Tools Options and Error Codes
        • Immutable Files Related Error Messages
        • SNI
        • SP Compiler
        • NLS Immutables Creator
        • MicroUI Static Initializer
        • Front Panel
        • HIL Engine
        • Heap Dumping
      • Architectures MCU / Compiler
        • Principle
        • Supported Core Engine Capabilities by Architecture Matrix
        • ARM Cortex-M0
        • ARM Cortex-M33
        • ARM Cortex-M4
        • ARM Cortex-M7
        • ARMv7A (ARMv7-A without integer division extension: Cortex-A5/Cortex-A8/Cortex-A9)
        • ARMv7VE (ARMv7-A with integer division extension: Cortex-A7/Cortex-A15)
        • ESP32
        • IAR Linker Specific Options
        • GNU LD Specific Options
        • ARM Linker Specific Options
      • Former Platform Migration
        • Create an Architecture Repository
        • Import the Former Platform Sources
        • Install the Platform Configuration Additions
        • Update the Front Panel Configuration
        • Configure the BSP Connection
        • Add the Build and Run Scripts
        • Use the Platform in Module Projects
        • Going further
      • Migrating to Architecture 8.6.0
        • Migrate Kernel API Build
      • Migrating to Architecture 8.1.0
        • Migrate Core Engine Capability Configuration
        • Migrate Your LLKERNEL Implementation
      • Migrating to Architecture 8.0.0
        • Update Platform Configuration Additions
        • Update BSP with new Sections Names
        • Remove LLBSP_IMPL_isInReadOnlyMemory
        • Migrate Built-in Modules
        • Migrate Your LLKERNEL Implementation
        • Migrate Trace C Library Usage
        • Migrate Legacy System Properties Files
        • Update Application Options
      • C Modules Installation
        • Fetching the module source files
        • C module configuration and firmware build
  • Kernel Developer Guide
    • Overview
      • Introduction
      • Terms and Definitions
      • Overall Architecture
      • Input and Output Artifacts
      • Kernel Build Flow
      • Kernel Implementation Libraries
      • Getting started
    • Considerations for Developing a Kernel
      • Prerequisites
      • Glossary
      • Application Installation Flow
        • Communication Channel
        • Application Code Storage and Execution Strategies
        • Application Compatibility
        • Preinstalled Applications
        • Memory Layout
        • Security
      • Kernel Services
        • Ecosystem APIs
        • Runtime Policy
      • Opening Ecosystem to Third-Party Developers
        • IP Considerations
        • Customer SDK
        • Application Moderation
    • Kernel & Features Specification (KF)
      • Introduction
        • Specification Summary
        • Comments
        • Basic Concepts
        • First Example
      • Ownership Rules
        • Type
        • Object
        • Execution Context
        • Kernel Mode
      • Execution Rules
        • Type References
        • Method References
        • Field References
        • Object References
        • Local References
        • Monitor Access
        • Native Method Declaration
        • Reflective Operations
      • Feature Lifecycle
        • Entry point
        • States
        • Installation
        • Start
        • Stop
        • Uninstallation
      • Class Spaces
        • Overview
        • Private Types
        • Kernel API Types
        • Precedence Rules
      • Resource Control Manager
        • CPU Control: Quotas
        • RAM Control: Managed Heap Configuration
        • RAM Control: Feature Criticality
        • Time-out Control: Watchdog
        • Native Resource Control: Security Manager
      • Communication Between Features
        • Method Binding
        • Object Binding
        • Kernel Type Converters
      • Configuration Files
        • Kernel and Features Declaration
        • Kernel API Definition
        • Identification
        • Shared Interface Declaration
        • Kernel Advanced Configuration
        • Context Local Storage Static Field Configuration
    • Kernel Creation
      • Create a new Project
      • Configure a VEE Port
      • Build the Executable and Virtual Device
        • Build the Executable in the Workspace
      • Expose APIs
      • Implement a Security Policy
      • Add Pre-installed Applications
      • Kernel Application Configuration with SDK 5
        • Module Configuration
        • Build Options
        • Build only a Virtual Device with a pre-existing Kernel
    • Kernel APIs
      • Kernel API Definition
      • Writing Kernel APIs
        • Default Kernel APIs Derivation
        • Kernel API Generator
    • Runtime Environment
      • Principle
      • Create a new Runtime Environment Module
        • Kernel APIs as Dependencies
        • Kernel APIs as Project File
        • Add Add-On Processors
      • Use a Runtime Environment in an Application
      • Extend a Runtime Environment
    • Module UID
    • Sandboxed Application Lifecycle
    • Define a Security Policy
      • Register a Security Manager
      • Implement a Security Manager
        • Security Manager with Application Declared Permissions
        • Security Manager with Permission Dispatch
    • Resource Manager
      • Principle
      • Policy File Format
        • Attributes
      • Kernel Implementation
    • Kernel and Features Communication
      • Shared Services
      • Communication between Features
        • Register a Service
        • Get a Service
      • Communication between Kernel and Feature
        • Register a Service
        • Get a Service
      • Implement a Registry
      • Kernel Types Converter
        • Implement a Kernel Type Converter
    • Multi-Sandbox Enabled Libraries
      • Manage Internal Global State
        • Declare a Static Field Local to the Feature
        • Allow a Field Assignment in Kernel Mode
        • Use Existing Multi-Sandbox Enabled Data Structures
      • Implement a Security Manager Permission Check
      • Known Foundation Libraries Behavior
        • MicroUI
        • BON
        • Event Queue
        • FS
        • NET
        • SSL
    • Setup a KF Testsuite
      • Enable the Testsuite
      • Add a KF Test
      • Write the Kernel Main Class
      • Improve Development Experience
      • Add Assertions
      • Run a KF Testsuite
      • KF Testsuite Options (SDK 5 only)
    • Kernel Linking
      • Link Flow
      • Kernel Metadata Generation
      • Feature Portability Control
        • Principle
        • Enable
        • Portability Rules
        • Typical Development Workflow
    • Application Linking
      • SOAR Build Phases
      • Feature Build Off Board
      • Feature Build On Device
        • Full Mode
        • Partial Mode
      • FSO Compatibility
      • Feature Portability
    • FAQ
      • Glossary
      • Security & Sandboxing
        • How is Applications’ code isolated from the rest of the device code?
        • How do we protect against malicious code injection in the App?
        • Can you outline what the Application integrity check does?
        • Are the Apps Signed?
        • I want to open app development to 3rd parties. How can I control API access from Apps?
        • Any recommendation about app deployment?
        • What kind of isolation exists between applications?
      • Inter-App Communication & APIs
        • How can Applications communicate with each other?
        • How can we get and differentiate installed applications?
        • How can I implement specific Kernel Policies depending on the calling Application?
        • Is there a way to extend Kernel APIs? (provide new APIs in new libraries dynamically)
      • Scheduling & Resource Management
        • What is the behavior of the scheduler when several apps are running?
      • App Deployment & Compatibility
        • How is Application compatibility ensured to prevent runtime linking errors?
        • What happens if a .fo is found to be incompatible? Is there an event or programmatic way to detect this?
        • My Kernel exposes the widget library as a Kernel API. My application has a dependency on the widget library. Will the code of the library be embedded into my app?
        • Can I pre-install applications in my device firmware?
        • Can the Kernel access the app’s resources before they are started?
        • How to access application metadata before installing it? (e.g. name, version, description)
        • Can I stop an Application at any time?
        • Can applications be used across different manufacturers?
  • VEE Wear User Guide
    • VEE Wear Framework
      • VEE Wear Kernel
      • VEE Wear Services Library
      • VEE Wear Apps
        • Creating an App
        • Implementing the Entry Point
        • Implementing an Activity
        • Implementing a Watchface
        • Implementing a Renderable
        • Implementing a Complication Data Source
        • Building an App
    • Android Compatibility Kit
      • Overview
        • Workflow
        • Software Architecture
        • Available APIs and Features
      • Installation
        • JDK Version
        • Configure Repositories
      • Project Setup
        • Create or Import an Android project
        • Create or Import a MicroEJ Application
        • Configure the Android Application
        • Start the MicroEJ Application
        • Run on MicroEJ VEE and Android
      • VEE Port
        • VEE Port Configuration
        • MicroEJ Android Packs
        • Custom Android Packs
    • iOS Compatibility Kit
      • Software Architecture
      • Workflow
      • Evaluation
    • Offloading
      • Solution
        • One Code, Two Targets
        • Offloading Framework
      • Evaluation
    • VEE Script
      • Introduction
      • Tags and Functions
      • Examples
      • Expression Types
      • Value Types
      • Language Syntax
      • Language Configuration
      • Evaluation
  • VEE Energy User Guide
  • VEE Audio User Guide
    • VEE Audio Framework
      • VEE Audio Kernel
      • VEE Audio Service Library
        • Audio Focus
        • Application Events
      • Audio Applications
        • Voice Assistant
        • Regular Audio Applications
    • Reference Applications
      • Reference Voice Assistants
      • Audio Applications
      • Composite Deployment
        • Example Session
  • Training Courses
    • For Beginners
      • MICROEJ SDK Basics
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
      • Mastering MICROEJ SDK Development Tools
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
      • C / Managed Code Communication
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
      • Simulate Hardware Behavior using Mocks
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
    • For Application Developers
      • Get Started with Sandboxed Applications
        • Description
        • Intended Audience
        • Prerequisites
        • Training Course
      • MicroEJ Java Programming Practices
        • Description
        • Intended Audience
        • Prerequisites
        • Readable Code
        • Best Practices
        • Related Tools
      • Sandboxed Application Development
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
      • Optimize the Memory Footprint of an Application
        • Description
        • Intended Audience
        • Prerequisites
        • Introduction
        • How to Analyze the Footprint of an Application
        • How to Reduce the Image Size of an Application
        • How to Reduce the Runtime Size of an Application
      • Application Testing
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
    • For VEE Port Developers
      • VEE Port Creation for a Custom Device
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
      • Qualify & Test your VEE Port
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
      • VEE Port Programming Practices
        • Description
        • Intended Audience
        • Prerequisites
        • A Word about Security
        • Recommended Practices
        • Abstraction Layers Development
      • Debug a HardFault
        • Description
        • Intended Audience
        • Prerequisites
        • Introduction
      • Delegate Blocking Operations using Async Worker
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
    • For Kernel Developers
      • Get Started with Kernel
        • Prerequisites
        • Hardware setup
        • Environment Setup
        • Set up the Kernel GREEN on your IDE
        • Run the Kernel GREEN on NXP i.MXRT1170 Evaluation Kit
        • Well Done!
        • Run a Sandboxed Application on your Multi-Sandbox Executable and Virtual Device
        • Going Further
      • Kernel Development
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
    • Graphical User Interface
      • Develop GUI with MicroEJ
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
      • Mastering MICROEJ SDK GUI Development Tools
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
      • MicroEJ GUI Programming Practices
        • Description
        • Prerequisites
        • Application Code Quality
        • UI Design
        • Hardware Considerations
        • UI Libraries Usage
        • Critical UI Components
      • From Design Tool to 16-Bit Display
        • Description
        • Intended Audience
        • Prerequisites
        • Training
        • Related Documentation
      • Grayscale Display Considerations
        • Description
        • Intended Audience
        • Prerequisites
        • Training
      • Debug a GUI Application Freeze
        • Description
        • Intended Audience
        • Prerequisites
        • Introduction
    • Connectivity
      • Networking Basics
        • Description
        • Intended Audience
        • Prerequisites
        • Training Resources
    • For DevOps
      • Setup an Automated Build using Jenkins and Artifactory
        • Description
        • Intended Audience
        • Prerequisites
        • Introduction
        • Overview
        • Prepare your Docker environment
        • Get a Module Repository
        • Setup Artifactory
        • Setup Gitea
        • Configure Gitea
        • Setup Jenkins
        • Build a new Module using Jenkins
        • Appendix
  • SDK 5 User Guide
    • Installation
      • Install Latest SDK Distribution
        • Download SDK Distribution
        • Check JDK Version
        • Install SDK Distribution
      • Update SDK Version
      • Install Other SDK Distributions
        • Install Portable SDK Distribution
        • Install SDK Distribution 21.11
      • System Requirements
        • Get JDK
      • Troubleshooting
        • Incompatible Default Java Version
        • Windows Specifics
        • Linux Specifics
        • MacOS Specifics
    • Licenses
      • SDK EULA
      • License Manager Overview
      • License Check
      • Evaluation Licenses
        • Get your Machine UID
        • Request your Activation Key
        • Install the License Key
        • Troubleshooting
      • Production Licenses
        • Request your Activation Key
        • Activate your USB Dongle
        • Check Activation
        • USB Dongle on GNU/Linux
        • USB Dongle with Docker on Linux
        • USB Dongle with WSL
        • Troubleshooting
        • Dongle not detected in the licenses screen
        • Remote USB Dongle Connection
    • Standalone Application
      • Platform Import
        • Source Platform Import
        • Binary Platform Import
      • Build and Run an Application
        • Create a MicroEJ Standalone Application
        • Run on the Simulator
        • Run on the Device
      • MicroEJ Launch
        • Main Tab
        • Execution Tab
        • Configuration Tab
        • JRE Tab
        • Source Tab
        • Common Tab
    • Sandboxed Application
      • Create a First Application
        • Entry Point
        • Configuration
        • SSL Certificate
        • Module Descriptor
      • Run on the Simulator
        • From the SDK
        • From the Command Line Interface
      • Run on the Device
        • Local Deployment
        • Remote Deployment
    • Module Repository
      • Create a Repository Project
      • Configure Resolver for Input Modules
      • Configure Consistency Check
      • Advanced Options
      • Include Modules
        • Include a Single Module
        • Include a Module Repository
      • Generate Javadoc
      • Build the Repository
      • Use the Offline Repository
    • Select a VEE Port
    • Module Natures
      • Add-On Library
      • Add-On Processor
      • Foundation Library API
      • Foundation Library Implementation
      • Kernel Application
      • Meta Build
      • Mock
      • Module Repository
      • Runtime Environment
      • Sandboxed Application
      • Standalone Application
      • Studio Rebranding
      • Natures Plugins
        • Java Compilation
        • Platform Loader
        • Javadoc
        • Testsuite
        • Java SE Unit Tests
        • Artifact Checker
      • Global Build Options
    • Debug an Application
      • Debug on Simulator
      • Debug on Device
      • Get Library Sources
        • Add-On Library Sources
        • Foundation Library Sources
    • Development Tools
      • Testsuite with JUnit
        • Principle
        • JUnit Compliance
        • Setup a Platform for Tests
        • Setup a Project with a JUnit Test Case
        • Build and Run a JUnit Testsuite
        • Testsuite Reports
        • Configure the Execution on your Device
        • Advanced Configurations
      • Stack Trace Reader
        • Principle
        • Functional Description
        • Dependencies
        • Installation
        • Use (Standalone Application)
        • Use (Sandboxed Application)
        • Stack Trace Reader Options
      • Code Coverage Analyzer
        • Principle
        • Functional Description
        • Dependencies
        • Installation
        • Use
      • Heap Dumper & Heap Analyzer
        • Introduction
        • Heap Dumper
        • Heap Viewer
        • Progressive Heap Usage
        • Compare Heap Dumps
      • Serial to Socket Transmitter
        • Principle
        • Installation
        • Use
      • Memory Map Analyzer
        • Principle
        • Functional Description
        • Dependencies
        • Installation
        • Use
      • Null Analysis
        • Principle
        • Java Code Annotation
        • Module Project Configuration
        • MicroEJ Libraries
        • Advanced Use
        • Troubleshooting
    • IDE
      • Startup
      • Resolve Dependencies in Workspace
      • Resolve Foundation Libraries in Workspace
      • Resolve Front Panel in Workspace
    • SDK Version
    • MicroEJ Module Manager
      • Introduction
      • Specification
      • Module Project Skeleton
      • Module Description File
        • Enable MMM Semantic
        • Module Dependencies
        • Build Options
        • Automatic Update Before Resolution
      • SDK Configuration
        • Preferences Page
        • Settings File
        • Options
        • Resolution Logs
      • Module Build
      • Build Kit
      • Command Line Interface
        • Usage
        • Shared configuration
        • Commands
      • Build System Options
      • Meta Build
        • Meta Build creation
        • Meta Build configuration
      • Troubleshooting
        • Unresolved Dependency
        • Invalid Certificate
        • Target “simulator:run” does not exist
        • Could not load SWT library
        • systemmicroui.xml:47: Terminated with errors
      • Former SDK Versions (lower than 5.2.0)
        • New MicroEJ Module Project
        • Preferences Pages
        • Build Kit
      • Former SDK Versions (from 5.2.0 to 5.3.x)
        • Build Kit
    • Testsuite with JUnit
      • Principle
      • JUnit Compliance
      • Setup a Platform for Tests
        • Execution in SDK
        • Execution during module build
      • Setup a Project with a JUnit Test Case
      • Build and Run a JUnit Testsuite
      • Testsuite Reports
      • Configure the Execution on your Device
      • Advanced Configurations
        • Autogenerated Test Classes
        • JUnit Test Case to MicroEJ Test Case
        • Testsuite Options (SDK 5 only)
        • Test Specific Options
    • VEE Port
      • Create a VEE Port
        • VEE Port Project Creation
        • Architecture Selection
        • Pack Import
        • VEE Port Build
        • Platform Module Configuration
        • VEE Port Customization
        • VEE Port Publication
        • BSP Connection
        • Platform API Documentation
        • Link-Time Option
      • Test a VEE Port
        • VEE Port Qualification
        • Create a VEE Port Testsuite
    • How-to Guides
      • How To Add IAR to MICROEJ SDK Docker Image
        • Prerequisites
        • Create the Dockerfile
    • Release Notes
    • SDK Distribution Changelog
      • [24.01] - 2024-01-31
      • [23.07] - 2023-07-03
      • [23.02] - 2022-02-28
      • [22.06] - 2022-06-29
      • [21.11] - 2021-11-15
      • [21.03] - 2021-03-25
      • [20.12] - 2020-12-11
      • [20.10] - 2020-10-30
      • [20.07] - 2020-07-28
      • [19.05] - 2019-05-17
      • [19.02] - 2019-02-22
    • SDK Changelog
      • [5.9.0] - 2024-07-23
        • General
        • MicroEJ Module Manager
      • [5.8.2] - 2024-01-31
        • General
        • MicroEJ Module Manager
      • [5.8.1] - 2023-09-19
        • General
        • MicroEJ Module Manager
      • [5.8.0] - 2023-07-03
        • General
        • MicroEJ Module Manager
      • [5.7.0] - 2023-02-27
        • General
        • MicroEJ Module Manager
      • [5.6.2] - 2022-08-31
        • General
        • MicroEJ Module Manager
      • [5.6.1] - 2022-07-08
        • General
      • [5.6.0] - 2022-06-29
        • General
        • MicroEJ Module Manager
      • [5.5.3] - 2022-05-03
        • MicroEJ Module Manager
      • [5.5.2] - 2021-12-22
        • General
        • MicroEJ Module Manager
      • [5.5.1] - 2021-12-02
        • General
      • [5.5.0] - 2021-11-15
        • General
        • MicroEJ Module Manager
      • [5.4.1] - 2021-04-16
        • MicroEJ Module Manager
      • [5.4.0] - 2021-03-25
        • Known Issues
        • General
        • MicroEJ Module Manager
      • [5.3.1] - 2020-12-11
        • General
        • MicroEJ Module Manager
      • [5.3.0] - 2020-10-30
        • Known Issues
        • General
        • MicroEJ Module Manager
      • [5.2.0] - 2020-07-28
        • General
        • MicroEJ Module Manager
        • Misc
      • [5.1.2] - 2020-03-09
        • MicroEJ Module Manager
      • [5.1.1] - 2019-09-26
        • General
      • [5.1.0] - 2019-05-17
        • General
        • MicroEJ Module Manager
      • [5.0.1] - 2019-02-14
        • General
        • MicroEJ Module Manager
    • Build Types per SDK
    • Migration Notes
      • From 5.2.x to 5.3.x or more
        • Workspace migration warning
      • From 5.1.x to 5.2.x
        • Enable New Wizards Shortcuts in MicroEJ Perspective
        • Re-enable the Ivy Preferences Pages (Advanced Use)
      • From 4.1.x to 5.x
        • Wadapps Application Update
        • MicroEJ Module Manager Update
        • Meta build Project Update
  • Get Support
    • What to Include in a Request
  • Vulnerability Disclosure Policy
    • Reporting a Vulnerability
      • Encrypting Your Report
    • Scope
    • What to Expect
    • Severity Classification
    • Coordinated Disclosure
      • Advance Notification for Integrators
    • Security Advisories
    • How Fixes Reach a Device
      • Supported Versions
    • Regulatory Reporting
    • MicroEJ and CVE Program
  • About MicroEJ
MicroEJ Documentation
  • HOME  /
  • Application Developer Guide  /
  • Libraries  /
  • Graphical User Interface  /
  • Navigation

Navigation

The Navigation Framework library structures a multi-page application. It turns a set of screens into structured navigation between pages identified by a key, maintains the navigation history, and can animate every page change with a transition.

The library builds on MWT: a page produces an MWT Widget, and the navigator mounts it on the application’s Desktop. It answers the concerns an application would otherwise implement by hand: which page is active, what happens on a back navigation, when a page must build or release its content, and how one page gives way to the next.

Usage

Add the Navigation Framework dependency to the Application project build file:

implementation("ej.library.ui:navigation-framework:1.0.1")
<dependency org="ej.library.ui" name="navigation-framework" rev="1.0.1"/>

Then start MicroUI, initialize the navigator with the desktop it drives and the factory that builds the pages, and navigate to the first page:

public static void main(String[] args) {
   MicroUI.start();

   Desktop desktop = new Desktop();
   desktop.setStylesheet(buildStylesheet());

   Navigator.initialize(desktop, new ExamplePageFactory());
   Navigator.getInstance().navigateTo(Pages.HOME);
}

The navigator shows the desktop on the first navigation. The application does not call Desktop.requestShow() itself.

Concepts

Navigator

The Navigator is the controller and the entry point of the library. It is a singleton: the application never constructs one, it configures the instance once with Navigator.initialize(Desktop, PageFactory) and obtains it with Navigator.getInstance(). Every method invoked before initialization throws IllegalStateException. Initializing again restarts the navigator from a clean state (empty history, no listener, default transition).

The navigator drives the Desktop given at initialization and mounts each page’s content on it. The application keeps ownership of that desktop: it sets the stylesheet, the render policy and the input handling on it.

Pages and Keys

A page is a factory for its content, not the content itself: the navigator calls getContent() each time the page is about to be shown, so a fresh widget is produced on every navigation to it. The content can be any MWT Widget, such as one of those provided by the Widget library:

public class HomePage extends Page {

   @Override
   protected Widget getContent() {
      Button button = new Button("Settings");
      button.setOnClickListener(new OnClickListener() {

         @Override
         public void onClick() {
            Navigator.getInstance().navigateTo(Pages.SETTINGS);
         }
      });
      return button;
   }
}

A page is identified in the public API by a non-negative int key. The application declares its keys as constants:

public class Pages {

   public static final int HOME = 0;
   public static final int SETTINGS = 1;
   public static final int DETAILS = 2;
}

Identity is per history entry, not per key. The same key may appear more than once in the history, and each forward navigation builds a new page.

Page Factory

The application implements one PageFactory, which maps a key to a page:

public class ExamplePageFactory implements PageFactory {

   @Override
   public Page create(int key, @Nullable Object argument) throws IllegalArgumentException {
      switch (key) {
         case Pages.HOME:
            return new HomePage();
         case Pages.SETTINGS:
            return new SettingsPage();
         default:
            throw new IllegalArgumentException("Unknown key.");
      }
   }
}

The factory returns a fresh page on each call and never caches one. It is called only by the operations that build a page, navigateTo() and replaceWith(). A back navigation re-shows the page instance the history holds, so it does not consult the factory.

The navigator is not passed to the factory. A factory, or a page it builds, reaches it with Navigator.getInstance().

Navigation Operations

Four operations change the active page. Each one has an overload taking an explicit Transition.

Operation

Effect

Page origin

navigateTo(int)

Pushes a new entry on top of the history.

Built by the factory

navigateBack()

Pops the active entry; the entry beneath becomes active.

History

navigateBackTo(int)

Pops back to the nearest entry below the active one with that key, removing every entry above it.

History

replaceWith(int)

Replaces the active page in place, leaving the history depth unchanged.

Built by the factory

Passing Data to a Page

A page receives its data through its own constructor: the framework owns no parameter slot. The two operations that build a page carry an optional argument to the factory, which injects it:

// At the call site: hand the selection to the page being built.
Navigator.getInstance().navigateTo(Pages.DETAILS, selection);
// In the factory: check what was received and inject it.
case Pages.DETAILS:
   if (!(argument instanceof Selection)) {
      throw new IllegalArgumentException("The details page requires a selection.");
   }
   return new DetailsPage((Selection) argument);

The navigator keeps no reference to the argument. It is forwarded to PageFactory.create() and nowhere else, so whatever the page needs from it, the page keeps itself. Back navigations take no argument: they re-show the page the history holds.

Page Lifecycle

A page is notified when it becomes, or ceases to be, the active page:

  • onEntered(): the page has become the active page.

  • onExited(): the page has ceased to be the active page.

Both are invoked immediately after the navigation operation, before the transition animation starts, and only on navigation operations. Use them to start and stop what must live only while the page is displayed, such as a timer or a sensor subscription.

Navigation Listeners

A NavigationListener observes page changes from outside the pages, for example to update a breadcrumb, record an analytics trace, or refresh a shared header:

Navigator.getInstance().addNavigationListener(new NavigationListener() {

   @Override
   public void onNavigation(@Nullable Page exitedPage, Page enteredPage) {
      // exitedPage is null on the first navigation.
   }
});

The callback fires once per navigation, in lockstep with the page lifecycle callbacks. The listeners notified for a navigation are those registered when its notification pass starts.

History Queries

The navigator exposes the current state of the history:

  • getActivePage() and getActiveKey(): the page on top of the history, and its key.

  • getHistory() and getHistoryKeys(): a copy of the history, oldest first, the active page last.

Transitions

Every page change is animated by a Transition. The library ships three:

  • Transition.IMMEDIATE: the incoming content replaces the outgoing one in a single frame. This is the navigator’s initial default.

  • FadeTransition: cross-dissolves the incoming content over the outgoing one.

  • SlideTransition: slides both contents, in the SlideTransition.RIGHT_TO_LEFT or SlideTransition.LEFT_TO_RIGHT direction.

Both animated transitions are configurable objects, not constants. Their duration defaults to Transition.DEFAULT_DURATION_MILLIS (300 ms) and can be set at construction.

A transition applies either to every navigation, as the default, or to a single one:

Navigator navigator = Navigator.getInstance();

// Applies to every navigation made through an overload without a transition.
navigator.setTransition(new FadeTransition());

// Applies to this navigation only.
navigator.navigateTo(Pages.DETAILS, new SlideTransition(SlideTransition.RIGHT_TO_LEFT, 500));

A navigation requested while a transition is running snaps that transition to its end before proceeding, so a fast sequence of navigations never leaves a page half-animated.

Custom Transition

An application defines its own effect by implementing Transition. The TransitionContext the navigator supplies exposes the two contents, the content area size, and the rendering primitives: positionContents() to move the contents, blendIncoming() to fade the incoming one in, and animate() to register the Animation driving the effect. Animation is the MWT interface described in the Animations section.

public class SlideUpTransition implements Transition {

   private static final int DURATION = 400;

   @Override
   public void run(TransitionContext context, TransitionListener listener) {
      int height = context.getContentHeight();
      context.positionContents(0, 0, 0, height);
      context.animate(new Animation() {

         private long startTime = -1;

         @Override
         public boolean tick(long platformTimeMillis) {
            if (this.startTime < 0) {
               this.startTime = platformTimeMillis;
            }
            long elapsed = platformTimeMillis - this.startTime;
            if (elapsed >= DURATION) {
               context.positionContents(0, -height, 0, 0);
               listener.onTransitionEnd();
               return false;
            }
            int offset = (int) ((elapsed * height) / DURATION);
            context.positionContents(0, -offset, 0, height - offset);
            return true;
         }
      });
   }
}

The implementation must call TransitionListener.onTransitionEnd() exactly once, when the animation is complete. This is what lets the navigator detach the outgoing content. Registering the animation with context.animate() is what lets the navigator snap the transition to its end when a new navigation interrupts it.

Examples

The Navigation Framework example application demonstrates the whole library: a splash screen replaced by the home page, one page per shipped transition, a custom transition, and a form passing its result to the next page as a navigation argument.

Previous Next

© Copyright 2008-2026, MicroEJ Corp. Content in this space is free for read and redistribute. Except if otherwise stated, modification is subject to MicroEJ Corp prior approval. MicroEJ is a trademark of MicroEJ Corp. All other trademarks and copyrights are the property of their respective owners.