<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/building-java-me-apps-with-modern-tooling-1enrwjtn1" -->

---
title: Building Java ME Apps with Modern Tooling | daily.dev
description: You can build and run Java ME (J2ME) apps for old feature phones using only modern tooling, no Sun Java ME SDK required. The approach uses OpenJDK 8's javac...
canonical: https://daily.dev/posts/building-java-me-apps-with-modern-tooling-1enrwjtn1
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Building Java ME Apps with Modern Tooling | daily.dev
og:description: You can build and run Java ME (J2ME) apps for old feature phones using only modern tooling, no Sun Java ME SDK required. The approach uses OpenJDK 8's javac...
og:url: https://daily.dev/posts/building-java-me-apps-with-modern-tooling-1enrwjtn1
og:image: https://api.daily.dev/og/posts/1ENRWjTN1.png
og:image:alt: Building Java ME Apps with Modern Tooling
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Building Java ME Apps with Modern Tooling

**[Awesome Java Newsletter](https://daily.dev/sources/java_libhunt)** · 9 min read · 0 upvotes · 0 comments

## Summary

You can build and run Java ME (J2ME) apps for old feature phones using only modern tooling, no Sun Java ME SDK required. The approach uses OpenJDK 8's javac with stub JARs from MicroEmulator (cldcapi11.jar, midpapi20.jar) for CLDC 1.1 and MIDP 2.0 APIs, compiling with -source 1.3 -target 1.1. ProGuard (version 7.1.1) replaces the old preverify tool to preverify the bytecode before packaging into a JAR. The author transferred the resulting app.jar to a Sony Ericsson S312 feature phone via Bluetooth OBEX after first running it in an emulator, and FreeJ2ME-plus is a recommended desktop emulator.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://voxelmanip.se/2026/10/24/building-java-me-apps-with-modern-tooling>

## Questions this post answers

### How do I compile Java ME MIDlets without the old Sun Java ME SDK?

Use OpenJDK 8's javac with stub JARs from MicroEmulator providing the CLDC 1.1 and MIDP 2.0 APIs. Extract cldcapi11.jar and midpapi20.jar into a lib directory, then compile with 'javac -source 1.3 -target 1.1 -bootclasspath lib/cldcapi11.jar:lib/midpapi20.jar -d build/classes src/HelloMIDlet.java' to produce Java 1.1 compatible bytecode (version 45.3) required for MIDP 2.0.

_Developers reviving old J2ME toolchains can find similar build workarounds curated on daily.dev._

### How do you preverify a Java ME JAR file without the original preverify tool?

ProGuard can perform preverification instead of the original Java ME SDK's preverify tool, and is considered more modern. Run ProGuard with the -microedition flag along with -dontshrink -dontoptimize -dontobfuscate and libraryjars pointing to cldcapi11.jar and midpapi20.jar, producing a verified app.jar that the KVM can run on real devices or emulators.

_Anyone preverifying legacy MIDlets can track ProGuard-based workflows like this through daily.dev._

### What is the best Java ME emulator for testing MIDlet apps on desktop?

FreeJ2ME-plus is described as the best J2ME emulator for desktop platforms currently, offering more features than MicroEmulator for running compiled app.jar MIDlet files. MicroEmulator can also run apps and additionally provides the stub JARs needed at compile time for the CLDC and MIDP APIs.

_Retro mobile developers comparing J2ME emulator options can follow related tooling discussions on daily.dev._

## Similar posts on daily.dev

- [Running Java on iOS](https://daily.dev/posts/running-java-on-ios-edihb9pzw) · InfoQ · 3 upvotes · 0 comments
- [Android on iOS, Web & Desktop Efficiently and for Free](https://daily.dev/posts/android-on-ios-web-desktop-efficiently-and-for-free-5ic7tlh8l) · Foojay.io · 10 upvotes · 0 comments
- [How Gradle Is Javamaxxing](https://daily.dev/posts/how-gradle-is-javamaxxing-knrrqwz9d) · Gradle Blog · 28 upvotes · 1 comments
- [On-Device Debugging And JUnit 5](https://daily.dev/posts/on-device-debugging-and-junit-5-2gr7evpzb) · Foojay.io · 0 upvotes · 0 comments

---

Tags: [#java](https://daily.dev/tags/java)

[View this post on daily.dev](https://daily.dev/posts/building-java-me-apps-with-modern-tooling-1enrwjtn1)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Building Java ME Apps with Modern Tooling","url":"https://daily.dev/posts/building-java-me-apps-with-modern-tooling-1enrwjtn1","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/building-java-me-apps-with-modern-tooling-1enrwjtn1"},"datePublished":"2026-10-30T05:42:11.015Z","dateModified":"2026-10-30T05:42:39.578Z","description":"You can build and run Java ME (J2ME) apps for old feature phones using only modern tooling, no Sun Java ME SDK required. The approach uses OpenJDK 8's javac...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/377ef3973d8d203f71976743b559aa6c?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/377ef3973d8d203f71976743b559aa6c?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Awesome Java Newsletter","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Awesome Java Newsletter","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/7729929f2ca649d7b13f6b04aa94d300","url":"https://daily.dev/sources/java_libhunt"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/building-java-me-apps-with-modern-tooling-1enrwjtn1","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"java","timeRequired":"PT9M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Awesome Java Newsletter","item":"https://daily.dev/sources/java_libhunt"},{"@type":"ListItem","position":3,"name":"Building Java ME Apps with Modern Tooling"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/building-java-me-apps-with-modern-tooling-1enrwjtn1#faq","mainEntity":[{"@type":"Question","name":"How do I compile Java ME MIDlets without the old Sun Java ME SDK?","acceptedAnswer":{"@type":"Answer","text":"Use OpenJDK 8's javac with stub JARs from MicroEmulator providing the CLDC 1.1 and MIDP 2.0 APIs. Extract cldcapi11.jar and midpapi20.jar into a lib directory, then compile with 'javac -source 1.3 -target 1.1 -bootclasspath lib/cldcapi11.jar:lib/midpapi20.jar -d build/classes src/HelloMIDlet.java' to produce Java 1.1 compatible bytecode (version 45.3) required for MIDP 2.0. Developers reviving old J2ME toolchains can find similar build workarounds curated on daily.dev."}},{"@type":"Question","name":"How do you preverify a Java ME JAR file without the original preverify tool?","acceptedAnswer":{"@type":"Answer","text":"ProGuard can perform preverification instead of the original Java ME SDK's preverify tool, and is considered more modern. Run ProGuard with the -microedition flag along with -dontshrink -dontoptimize -dontobfuscate and libraryjars pointing to cldcapi11.jar and midpapi20.jar, producing a verified app.jar that the KVM can run on real devices or emulators. Anyone preverifying legacy MIDlets can track ProGuard-based workflows like this through daily.dev."}},{"@type":"Question","name":"What is the best Java ME emulator for testing MIDlet apps on desktop?","acceptedAnswer":{"@type":"Answer","text":"FreeJ2ME-plus is described as the best J2ME emulator for desktop platforms currently, offering more features than MicroEmulator for running compiled app.jar MIDlet files. MicroEmulator can also run apps and additionally provides the stub JARs needed at compile time for the CLDC and MIDP APIs. Retro mobile developers comparing J2ME emulator options can follow related tooling discussions on daily.dev."}}]}
```

