Meliona

Rating: 
4
Your rating: None Average: 4 (2 votes)

Meliona — J2ME Emulator for Sailfish OS

A native Sailfish OS application that runs classic Java J2ME games
on your phone.If you want to reset the application, navigate to Settings > Storage and tap the resource path and config path options.

source code:https://gitee.com/yun_gitee/harbour-meliona

Requirements

  • Sailfish OS 5.0
  • Java 11
    • aarch:OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.20_8.tar.gz(e.g., Redmi K20)
    • i486:zulu11.88.17-ca-jdk11.0.31-linux_i686.tar.gz(e.g., Mipad2,but this is the 32-bit x86 build — for 64-bit x86 devices you will need the x86_64 package instead)
    • armv7hl:I don't have an armv7hl device and can't run tests on it, so I'm unable to provide examples.

Version

0.3-1

  • 实现游戏声音(Game audio support)
  • 新增虚拟按键,支持全屏模式下实体按键操控(Added virtual keypad for fullscreen mode)
  • 引入中/英/德/法/西/日/俄七语言系统(Added multi-language support (zh/en/de/fr/es/ja/ru))
  • 新增文字增强与画面平滑开关,字号与抗锯齿可调(Added text enhancement and smooth scaling toggles)
  • 新增分辨率管理、假短信连接、游戏异常退出通知(Added resolution manager, fake SMS, crash toast)
  • 调整UI布局,优化竖屏/横屏虚拟键盘体验(UI layout improvements with better portrait/landscape keypad)
  • 程序优化与问题修复(Performance improvements and bug fixes)

0.2-1 — Beta

  • Support gamebox import (add/edit/delete custom phone shells)
  • Support per-game orientation (portrait / landscape-left / landscape-right) 
  • Support display modes (original ratio / fit screen / skin fullscreen)
  • Support touchscreen input for J2ME pointer events (press/drag/release)
  • This update involves database modifications. Please reset the application.

0.1-2 — Beta

  • Add armv7hl & i486 build targets (no corresponding test hardware available temporarily)
  • Reduce application size by removing partial default Game box resources

0.1-1 — Initial release(Beta)

  • Game import with JAR manifest parsing and icon extraction
  • Hitmap-based game box skin system with per-key highlight masks
  • Stdio-based frame streaming from Java to QML
  • Game box (simulator skin) management with resolution filtering
  • Play config persistence (keyboard type, window mode, bound skin)
  • Splash-screen JDK detection and preference-based override
  • About page reading RPM spec metadata at runtime

Known Issues

  • Game box skins import is not supported
Screenshots: 
Application versions: 
AttachmentSizeDate
File harbour-meliona-0.1-1.aarch64.rpm8.83 MB31/05/2026 - 18:41
File harbour-meliona-0.1-2.i486.rpm1.45 MB01/06/2026 - 18:07
File harbour-meliona-0.1-2.aarch64.rpm1.44 MB01/06/2026 - 18:07
File harbour-meliona-0.1-2.armv7hl.rpm1.43 MB01/06/2026 - 18:07
File harbour-meliona-0.2-1.aarch64.rpm1.59 MB06/06/2026 - 21:42
File harbour-meliona-0.2-1.armv7hl.rpm1.58 MB06/06/2026 - 21:42
File harbour-meliona-0.2-1.i486.rpm1.6 MB06/06/2026 - 21:42
File harbour-meliona-0.3-1.aarch64.rpm7.22 MB19/07/2026 - 14:50
File harbour-meliona-0.3-1.armv7hl.rpm7.2 MB19/07/2026 - 14:50
File harbour-meliona-0.3-1.i486.rpm7.24 MB19/07/2026 - 14:50
Changelog: 

(none)

Comments

windes's picture

[defaultuser@XperiaXA2 ~]$ JAVA_HOME=/home/defau ltuser/java harbour-meliona [D] unknown:0 - Using Wayland-EGL [D] unknown:0 - [DatabaseConnection] 数据库路径: "/ho me/defaultuser/.config/com.unapp/harbour-Meliona /db/meliona_info.db" [D] unknown:0 - [ApplicationCore::getAppConfigVa lue] 查询应用设置值,( "APP_SETTING" , "ORIENTATION" , Q Variant(int, 0) ) [D] unknown:0 - [ApplicationCore::getAppConfigVa lue] 查询应用设置值,( "APP_SETTING" , "ORIENTATION" , Q Variant(int, 0) ) [D] unknown:0 - [ApplicationCore::setAppConfigVa lue] 存储应用设置值,( "STORE_SETTING" , "DATA_PATH" , Q Variant(QString, "/home/defaultuser/.local/share /com.unapp/harbour-Meliona") ) [D] unknown:0 - [ApplicationCore::setAppConfigVa lue] 存储应用设置值,( "STORE_SETTING" , "CONFIG_PATH" , QVariant(QString, "/home/defaultuser/.config/co m.unapp/harbour-Meliona") ) [D] unknown:0 - [ApplicationCore::getAppConfigVa lue] 查询应用设置值,( "APP_SETTING" , "JDK_PATH" , QVar iant(QString, "") ) [D] unknown:0 - [ApplicationCore::setAppConfigVa lue] 存储应用设置值,( "APP_SETTING" , "FLASH_HOME" , QV ariant(bool, true) ) [D] unknown:0 - [ApplicationCore::getAppConfigVa lue] 查询应用设置值,( "APP_SETTING" , "FLASH_HOME" , QV ariant(bool, false) ) [D] unknown:0 - [ApplicationCore::getGameList] 查 询游戏列表 [D] unknown:0 - [ApplicationCore::getGameList] 日 志目录 "/home/defaultuser/.local/share/com.unapp/ha rbour-Meliona/harbour-meliona-debug.log" [D] unknown:0 - [ApplicationCore::setAppConfigVa lue] 存储应用设置值,( "APP_SETTING" , "FLASH_HOME" , QV ariant(bool, false) ) [D] unknown:0 - 根据主键查询成功: "GameInfo{du='4a4e0b5a 140a5fb71e6e371059966000', name='Sonic Advance' aultuser/java/bin/java"
[D] unknown:0 - startGame: gamePath = "/home/def
aultuser/.local/share/com.unapp/harbour-Meliona/
4a4e0b5a140a5fb71e6e371059966000/1553_sonic_adva
nce_r.jar"
[D] unknown:0 - startGame: workDir = "/home/def
aultuser/.local/share/com.unapp/harbour-Meliona/
4a4e0b5a140a5fb71e6e371059966000"
[W] unknown:0 - startGame: 进程启动失败: "Permission d
enied"

[D] unknown:0 - SkinManager: generated 31 highli
ghts
[D] unknown:0 - 根据主键查询成功: "GameInfo{du='4a4e0b5a
140a5fb71e6e371059966000', name='Sonic Advance',
iconPath='/home/defaultuser/.local/share/com.un
app/harbour-Meliona/4a4e0b5a140a5fb71e6e37105996
6000/icon.png', gamePath='/home/defaultuser/.loc
al/share/com.unapp/harbour-Meliona/4a4e0b5a140a5
fb71e6e371059966000/1553_sonic_advance_r.jar', g
ameFormat='jar', gameSize=644469, dataDir='/home
/defaultuser/.local/share/com.unapp/harbour-Meli
ona/4a4e0b5a140a5fb71e6e371059966000', vendor='G
ameloft SA', version='1.4.0', createTime='2026-0
7-13 10:34:44', updateTime='2026-07-13 10:34:44'
, screenWidth=0, screenHeight=0, encoding='UTF-8
', remark='CLDC:CLDC-1.0, MIDP:MIDP-2.0'}"
[D] onCompleted:88 - [分辨率] 来源: 游戏盒子, 原始: 240 x 3
20
[D] computeLayout:223 - ========== 布局计算 ========
==
[D] computeLayout:224 - [容器] 宽: 1080 高: 192
0
[D] computeLayout:225 - [机壳] 原生: 1440 x 2560
显示: 1080.0 x 1920.0 偏移:( 0.0 , 0.0 ) 旋转: 0 °
宽高互换: false
[D] computeLayout:229 - [屏幕开孔] 大小: 542.3 x 726.0
起点:( 273.0 , 181.5 ) 终点:( 815.3 , 907.5 )
[D] computeLayout:232 - [游戏画面] 原生: 240 x 320 显示
: 480 x 640 起点:( 304.1 , 224.5 ) 终点:( 784.1 ,
864.5 )
[D] computeLayout:237 - [缩放] 显示模式: 2 自适应比:
2.259 整数倍: 2
[D] computeLayout:240 - ========================
======

Log of starting Meliona with Sonic.jar 240x320. Black screen. Underlined string is also on Sandboxing=Disabled. What permission is denied?..

windes's picture

Still not appear for armv7hl.

yun_L's picture

Could you clarify whether the problem is that the package cannot be installed or that the armv7hl package cannot be found? If the package cannot be found, you can directly visit OpenRepos.net, where I uploaded it. However, I am not sure how storeman identifies different versions.

birdzhang's picture

哈哈,好玩。

另外,只能竖屏吗?像植物大战僵尸是横屏的, 玩起来有点显示不全。可以下载 https://java.zixing.fun/java/jar/pvz.jar 测试一下。

yun_L's picture

是的,目前仅仅支持竖屏。更多分辨率与屏幕模式,将会在新的版本中得到支持

windes's picture

Thanks! Waiting for armv7hl so much!

yun_L's picture

The armv7hl build is ready now, feel free to give it a try.

windes's picture

Cool! Loaded, tryed. How to install java environment on armv7hl, could you explain?

I loaded zulu11.86.21-ca-jdk11.0.30-linux_aarch32hf.tar file. But what to do with it, how to install?

 

Copied all unpacked folders to filesystem, tried to select JDK11 folder - but it is possible to select only file, not folder! Tried select /bin/java file, /Welcome.html - not works. What to do?

 

Launched with command:

JAVA_HOME=/home/defaultuser/java harbour-meliona

Selected from Settings jdk11 file as /java/release

Now jar started and show phone skin (Nokia 6300 or Nintendo pocket). Tried 4 different jars - always black screen inside skin's display. What need else?..

 

 

And would you please make Meliona on english please? Very hard to understand interface.

 

yun_L's picture

Sorry I missed your comment earlier. You will need to install Java 11 for the armv7hl architecture on your device. However, I’m not certain whether such a build actually exists. Without a physical device matching this specification, I’m unable to carry out relevant testing myself.

As for the installation process, you can search online for guides on installing and verifying Java on a Linux system.

Regarding English language support for the app, this feature will be implemented in an upcoming new release.

windes's picture

Look at my log of launching .jar file upper, please. Why black screen? Why permission denied?

yun_L's picture

Has your JDK 11 started working properly? You can run java -version in the terminal to verify it. I suspect the wrong Java build is installed. You need to download Java 11 for the armv7hl architecture, but I only offer builds for aarch64 and i486, not armv7hl. You may look up solutions with the help of AI tools.

In short, download the correct Java 11 distribution, extract it to your device, then manually specify the binary path: java path/bin/java .

windes's picture

I loaded zulu11.86.21-ca-jdk11.0.30-linux_aarch32hf.tar - is that right for armv7hl?

Or this is right:

https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk... ?

 

When i try to manually specify path to java folder from app - it can select only file, NOT folder, so i cant select /defaultuser/java, only /defaultuser/java/bin/java file - but this is not right path.

 

Tried to manually specify path via app and via appSettings.conf file to:

1. /usr/bin/java

2. /usr/bin/java/bin/ 

3. /usr/bin/java/bin/java 

nevermind, log of app in terminal says: "[JDK check] path: wrong path exists=" true file= true exec= true

Unpacked java folders (/bin, /conf, /include, /jmodes, /legal, /lib, /man and release file to /usr/bin/java)

windes's picture

AAA! I need to create symbol link for working java!

ln -svf /home/defaultuser/java/bin/java /usr/bin/java

and then change permission of /home/defaultuser/java/bin/java file to execute.

Then Meliona starts to work on armv7hl! :-)

 

So, something wrong with resolution of jar now. I loaded 240x320 jar game (Plants vs Zombies), import it, launch - but it shows in soooo little window, that i even cant see letters there. Trying to change scale - "On dimension of screen" option - not works, same little scale.

 

Also, loaded 480x800 jar game, no preset of console for it, but can add it. Trying to add - need to choose covers for it and keyboard layout file! Where to got them? Can you set them same as in 240x320 preset?

yun_L's picture

Congratulations on successfully running this software on your device. Here are answers to your two questions:

Question 1
The issue is likely caused by one of two factors:
First, the game’s native resolution is not actually 240×320. I also own a copy of Plants vs. Zombies, whose true resolution is 360×640 instead.
Second, have you reset the app? I made changes to the database during the last update. The reset option is located at the bottom of the About page.

Question 2
Are you referring to physical device skins? There is no built-in way to fetch extra ones, as I only created skins for five or six device models, with just two retained inside the app to minimize installation size.
To add new skins, you will need to create them yourself using Photoshop; this feature was originally designed for user customization. I plan to improve the import function when I have spare time, and release an archive package at my project’s source code repository so users can import additional skins.

windes's picture

Thanks, man! Resseting app really helps! Now game is showing right, in resolution of 240x320, that i specially downloaded for test.

You create skins for 5-6 devices, but i see in app only 2 - Nokia 6300 and Nintendo console.

No need for skins, really, better is make navigation with sensor - now it is not working. With buttons - work.. But kinda strange buttons actions, and they are filling all screen, covering a graphics - that a bad way.

yun_L's picture

Which sensor are you referring to? The touchscreen? If so, touch input is actually supported. The current design logic only allows one type of touch operation to be active at a time. While in-game, tap the upper-right corner to hide the on-screen buttons, which will re-enable direct touchscreen control.

I understand the overlay buttons cover most of the game view, but this is a current limitation. More user-friendly control schemes will be added in future updates. For instance, my unreleased build already has gamepad support. Virtual joysticks and physical keyboard input may also be implemented later. Thanks for your feedback.

windes's picture

Sure i tried that upper-corner icon and tried touch, not works, not even 1 touch.

yun_L's picture

Not all games natively support touch input. I’ve tested Plants vs. Zombies and it works perfectly with touch here. You can try a different game for comparison. Alternatively, install the same game on an Android device to check whether its original build supports touchscreen controls.

roundedrectangle's picture

Hello! Where can I find the sources for your application, and will there be armv7hl and i486 versions of it?

yun_L's picture

Hello! The source code is available at: https://gitee.com/yun_gitee/meliona. I will release builds for armv7hl and i486 in the future.

Matias's picture

Hi, the repo appears to be private. I'm getting a 403 upon visiting.

yun_L's picture

try again

trial's picture

Me too.

yun_L's picture

try again