許多 J2ME 初學者過度依賴 JBuilder、Eclipse 等 IDE,卻不了解底層編譯、打包、混淆流程。本教程將手把手教你編寫三個核心批處理文件(env.bat、config.bat、build.bat),實現從源碼到可發布 JAR/JAD 的全自動化構建,並整合 ProGuard 混淆與 KZip/7Zip 深度壓縮。
D:\test\
├── src\ 源代碼目錄
├── res\ 資源文件目錄(圖片、音頻、數據文件)
├── tools\ 工具目錄(proguard.jar, kzip.exe, 7za.exe)
├── #release\ 發布輸出目錄
├── env.bat 環境變量配置
├── config.bat 項目屬性配置
└── build.bat 核心構建腳本
@echo off
rem JDK 安裝路徑(無空格路徑)
set JDK=D:\j2sdk1.4.2
rem WTK 安裝路徑
set J2ME_WTK=D:\wtk22
rem API 庫路徑(支持多庫用分號分隔)
set J2ME_API=%J2ME_WTK%\lib\cldcapi10.jar;%TOOL_DIR%\lib\midpapi20.jar
rem 工作目錄結構
set PROJ_DIR=%cd%
set SCR_DIR=%PROJ_DIR%\src
set RES_DIR=%PROJ_DIR%\res
set RELEASE_DIR=%PROJ_DIR%\#release
set TOOL_DIR=%PROJ_DIR%\tools
echo on
@echo off
set PROJ_NAME=TestGame
set GAME_NAME=Test Game
set PHONE=Triplets
set LANG=%1
if "%1" == "" set LANG=EN
set VER1=0 & set VER2=0 & set VER3=1
set VERSION=%VER1%.%VER2%.%VER3%
set PROJ_FULL_NAME=%PROJ_NAME%_%PHONE%
set ARCHIVE_NAME=%PROJ_FULL_NAME%_%LANG%_%VERSION%
set MAIN_CLASS=cMIDlet
set MANIFEST_NAME=Test Game
set ICON=icon.png
set PROJ_DESCRIPTION=It's a test project!!!
set VENDOR=Sun Co.
set CLDC=CLDC-1.0
set MIDP=MIDP-2.0
set OBFUSCATE=true
set USE_KZIP=true
echo on
call env.bat
call config.bat %1
rem 創建/清理臨時目錄
if not exist tempsrc (mkdir tempsrc) else (del /S/Q tempsrc\*.*)
if exist _make (rd _make /Q /S)
if not exist %RELEASE_DIR% (md %RELEASE_DIR%)
mkdir _make
cd _make
rem 使用重定向符 > (覆蓋) 和 >> (追加) 生成文件
ECHO Manifest-Version: 1.0 > MANIFEST.MF
ECHO MIDlet-Name: %GAME_NAME% >> MANIFEST.MF
ECHO MIDlet-Icon: %ICON% >> MANIFEST.MF
ECHO MIDlet-Vendor: %VENDOR% >> MANIFEST.MF
ECHO MIDlet-1: %GAME_NAME%, %ICON%, %MAIN_CLASS% >> MANIFEST.MF
ECHO MIDlet-Version: %VERSION% >> MANIFEST.MF
ECHO MicroEdition-Configuration: %CLDC% >> MANIFEST.MF
ECHO MicroEdition-Profile: %MIDP% >> MANIFEST.MF
rem JAD 文件生成(Jar-Size 需打包後回填)
ECHO MIDlet-Name: %GAME_NAME% > %ARCHIVE_NAME%.jad
ECHO MIDlet-Jar-URL: %ARCHIVE_NAME%.jar >> %ARCHIVE_NAME%.jad
...
echo -libraryjars %J2ME_API% > %PROJ_FULL_NAME%.pro
echo -injars _%PROJ_FULL_NAME%.jar >> %PROJ_FULL_NAME%.pro
echo -outjar %PROJ_FULL_NAME%.jar >> %PROJ_FULL_NAME%.pro
echo -keep public class %MAIN_CLASS% >> %PROJ_FULL_NAME%.pro
md classes
"%JDK%\bin\javac" -bootclasspath "%J2ME_API%" -classpath "%J2ME_API%" -g:none -d classes %SCR_DIR%\*.java
"%J2ME_WTK%\bin\preverify.exe" -classpath "%J2ME_API%"; -d output classes
if not exist output (echo *** Preverify failed & goto :end)
copy %RES_DIR%\*.* output
"%JDK%\bin\jar.exe" cvfm _%PROJ_FULL_NAME%.jar MANIFEST.MF -C output .
if "%OBFUSCATE%"=="false" (
copy _%PROJ_FULL_NAME%.jar %PROJ_FULL_NAME%.jar > nul
) else (
"%JDK%\bin\java" -jar %TOOL_DIR%\proguard.jar @%PROJ_FULL_NAME%.pro
)
"%J2ME_WTK%\bin\preverify.exe" -classpath "%J2ME_API%" -d tempJar %PROJ_FULL_NAME%.jar
cd tempJar
if "%USE_KZIP%"=="true" (
"%TOOL_DIR%\7za.exe" x %PROJ_FULL_NAME%.jar -ozip > NUL
del %PROJ_FULL_NAME%.jar > NUL
cd zip
"%TOOL_DIR%\kzip.exe" /r ..\..\%ARCHIVE_NAME%.jar *.* > NUL
cd ..
rd /s /q zip > NUL
) else (
copy %PROJ_FULL_NAME%.jar ..\%ARCHIVE_NAME%.jar
)
cd ..
copy %ARCHIVE_NAME%.ja* %RELEASE_DIR%\
rd /q /s _make
rem run.bat
call env.bat
call config.bat
%J2ME_WTK%\bin\emulator.exe -Xdevice:DefaultColorPhone -cp %J2ME_API% -Xdescriptor:%RELEASE_DIR%\%ARCHIVE_NAME%.jad
config.bat %1 支持多語言、多機型、多版本一鍵構建ERRORLEVEL 或文件存在性,失敗即 goto :end_make 目錄構建結束自動清理,保證每次構建純淨這套腳本體系經過多個商業項目驗證,堪稱 J2ME 開發者的「構建利器」。