記錄在 RedHat 9 環境下編譯 Sun J2ME CDC Foundation Profile (cdcfp) 與 Personal Profile (PP) 的完整流程、踩坑經驗與環境變數設定,供嵌入式 Java 開發者參考。
J2ME_cdcfp-1_0_1-fcs-src-b12-Linux-i686-14_May_2002)j2me_pp-1_0-bin-Linux-i686) 或原始碼compat-egcs-6.2, compat-glibc-6.2, pdksh-5.2.14 (ksh 必須,bash 下編譯會失敗)JAVA_HOME=/usr/java/j2sdk1.4.2_08
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH
修改後重啟終端機生效。
build/share/defs.mk,修改 CVM_GNU_TOOLS_PATH=/usr/bin (原為微軟工具路徑)。build/Linux-i686 目錄,以 ksh 執行:# make CC=egcs CVM_JAVABIN=/usr/java/j2sdk1.4.2_08/bin CVM_DEBUG=true J2ME_CLASSLIB=foundation
CC=egcs:指定編譯器 (需安裝 compat-egcs)。CVM_DEBUG=true:產生除錯版 CVM。J2ME_CLASSLIB=foundation:建置 Foundation Profile。編譯成功後,bin/ 目錄下產生 cvm 執行檔。
cd bin
./cvm -Djava.class.path=../testclasses.zip HelloWorld
終端機顯示 Hello World 即成功。
j2me_pp-1_0-bin-Linux-i686 (二進制版免編譯)。HelloWorldPersonal.java:import java.awt.*;
import java.awt.event.*;
public class HelloWorldPersonal extends Frame {
public void start() {
Label label = new Label("HelloWorld from J2ME personal");
add("Center", label);
validate();
}
public static void main(String[] argv) {
HelloWorldPersonal app = new HelloWorldPersonal();
app.start();
app.setSize(220, 200);
app.validate();
app.show();
}
}
javac -bootclasspath /usr/java/personal/btclass.zip:/usr/java/personal/lib/personal.jar HelloWorldPersonal.java
cd personal/bin
./cvm -Djava.class.path=/usr/java/personal/ HelloWorldPersonal
彈出視窗顯示訊息即成功。
| 特性 | CLDC (KVM) | CDC (CVM) |
|---|---|---|
| 目標裝置 | 資源受限消費性電子 (手機、PDA) | 較強嵌入式設備 (工控、機頂盒) |
| 記憶體需求 | 128KB 運行, 512KB ROM | 512KB RAM, 2MB ROM |
| CPU | 16/32 位元 | 32 位元 |
| 網路 | 無強制要求 | 至少 UDP, 可擴充 TCP/IP |
| GUI | 無內建, 需 MIDP | 無內建, 需 PP/PBP |
| Java 版本對等 | 約 JDK 1.1 (30-80% 速度) | Java 2 核心子集 |