注2:許多批處理命令我都沒多做說明,具體你可以在CMD窗口輸進:命令 /?來查看幫助。
注3:假如你想直接用這個批處理的話,需要progaurd.jar 及kzip,7zip
注4: 假如有標題大家就跟在貼子後哈,我會盡量為你解答:)
==================env.bat===================================
REM 此env.bat為環境配置文件,請根據自身環境情況修正
REM REM表現此行動注釋,既不顯示也不履行
REM echo[打開或封閉命令回顯功效,或顯示消息。] @表現本行命令不被顯示
@echo off
rem **************** environment dir **********
REM 設置JDK的目錄[注:在等號左右不能有空格],引用變量值時為:%變量名%
set JDK=D:\j2sdk1.4.2
REM 設置WTK目錄
set J2ME_WTK=D:\wtk22
REM 設置編譯和混雜時需要的LIB包,一般在WTK的lib目錄下,也可用其它包,比如諾基亞的,根據機型而定
rem set J2ME_API=D:\SerIEs_60_MIDP_SDK_2_1_Beta\lib\kmidp20.zip
set J2ME_API=%J2ME_WTK%\lib\cldcapi10.jar;%TOOL_DIR%\lib\midpapi20.jar
rem ******** work dir *********
REM 設置工作目錄,%CD%表現當前目錄
set PROJ_DIR=%cd%
REM src為源程序目錄
set SCR_DIR=%PROJ_DIR%\src
REM res為資源目錄
set RES_DIR=%PROJ_DIR%\res
REM #release為打包成果目錄
set RELEASE_DIR=%PROJ_DIR%\#release
rem ****** tools dir *********
REM 設置工具目錄
set TOOL_DIR=%PROJ_DIR%\tools
echo on
========================================================
====================config.bat ========================
REM 配置文件,設置項目屬性
@echo off
REM 項目名稱,既你的jad/Jar包顯示的名稱
set PROJ_NAME=TestGame
REM 游戲名稱,顯示在jad的屬性欄中,此兩名稱可以想同
set GAME_NAME=Test Game
REM 設置機型
set PHONE=Triplets
REM 語言
set LANG=%1
REM 這兒用到%1,在批處理的調用中也可以應用參數0~9,0為批處理本身。1~9為參數,用空格隔開。
REM 在批處理中通過%1 ~ %9來引用,假如沒有參數則設置為EN
if "%1" == "" set LANG=EN
REM 設置版本號
set VER1=0
set VER2=0
set VER3=1
set VERSION=%VER1%.%VER2%.%VER3%
set PROJ_FULL_NAME=%PROJ_NAME%_%PHONE%
REM 設置Jad/Jar的包名
set ARCHIVE_NAME=%PROJ_FULL_NAME%_%LANG%_%VERSION%
REM 設置主類名稱,在創立Jad和混雜時需要用到
set MAIN_CLASS=cMIDlet
set MANIFEST_NAME=Test Game
REM Jad中其它選項
set PROJ_DESCRIPTION=It's a test project!!!
set VENDOR=Sun Co.
set CLDC=CLDC-1.0
set MIDP=MIDP-2.0
REM 設置是否應用混雜和是否應用壓縮,這兒我用的kzip
set OBFUSCATE=true
set USE_KZIP=true
echo on
==================================================================
======================build.bat==================
@echo off
REM 調用配置文件
call env.bat
call config.bat %1
REM 在我們每次build時,可以查看下是否准確
Echo %PROJ_FULL_NAME%
Echo lang-%LANG%
Echo %VERSION%
rem ***************************
REM 我們需要建立一個臨時的目錄來保留預處理後(可編譯的)的代碼,假如沒有應用到預處理則可以省往此目錄
REM _make為我們Build過程中的臨時目錄,Build完成後刪除,這樣可保證每次都是build的最新文件
REM 批處理中也可以應用條件判定和括弧,[注:括弧和if/else 必定要在一行上]
REM 判定一個文件或是目錄是否存在可以應用if exist或是if not exist
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%
)
REM 進進到_make目錄
mkdir _make
cd _make
rem ******************************
REM 這兒我們應用Echo命令來創立Jad和Manifest文件。同樣是為了每次的jad和MF都是最新版本的
REM 用>和>>流重定向符,使Echo輸出到文件而非默認的顯示器,>為新建,>>為追加
rem ******************************
ECHO Manifest-Version: 1.0> MANIFEST.MF
ECHO Created-By: 1.4.1_02 (Sun Microsystems Inc.)>> MANIFEST.MF
ECHO MicroEdition-Configuration: %CLDC%>> 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-Profile: %MIDP%>> MANIFEST.MF
rem ******* Jad**************
ECHO MIDlet-Name: %GAME_NAME%> %ARCHIVE_NAME%.jad
ECHO MIDlet-Icon: %ICON%>> %ARCHIVE_NAME%.jad
ECHO MIDlet-Vendor: %VENDOR%>> %ARCHIVE_NAME%.jad
ECHO MIDlet-1: %GAME_NAME%, %ICON%, %MAIN_CLASS%>> %ARCHIVE_NAME%.jad
ECHO MIDlet-Version: %VERSION%>> %ARCHIVE_NAME%.jad
ECHO MIDlet-Jar-URL: %ARCHIVE_NAME%.jar>> %ARCHIVE_NAME%.jad
REM 對jar-size這項目,可以應用工具在jar天生後來修正,假如沒工具的話,只能手動了^_^
ECHO MIDlet-Jar-Size: >> %ARCHIVE_NAME%.jad
rem ******************************
REM 混雜的選項配置,這兒我只列出了最基礎的選項,假如還有其它需求,請查閱:http://proguard.sourceforge.Net/
rem ******************************
REM 混雜時所要需要的API包
echo -libraryjars %J2ME_API% > %PROJ_FULL_NAME%.pro
REM 要被混雜的Jar包
echo -injars _%PROJ_FULL_NAME%.jar>> %PROJ_FULL_NAME%.pro
REM 混雜時輸出文件
echo -outjar %PROJ_FULL_NAME%.jar>> %PROJ_FULL_NAME%.pro
REM 讓我們的主類名字保留,不然程序找不到進口了
echo -keep public class %MAIN_CLASS%>> %PROJ_FULL_NAME%.pro
rem ******************************
ECHO Compiling...
rem ******************************
md classes
REM 編譯源程序到classes目錄
"%JDK%\bin\javac" -bootclasspath "%J2ME_API%" -classpath "%J2ME_API%" -g:none -d classes %SCR_DIR%\*.Java
rem *****************************
ECHO Preverify....
rem *****************************
REM 校驗[可不需要此步,一般來說要需要對包校驗一次既可,也可對編譯文件再多校驗一次:) ]
"%J2ME_WTK%\bin\preverify.exe" -classpath "%J2ME_API%"; -d output classes
REM 假如校驗成功或天生一個目錄,由-d選項指定,假如沒有-d選項,則默認為output
if not exist output (
REM 在批處理中可以應用GOTO語言,有時假如需要較復雜的循環的話,還是比擬有用的
echo *** Error: stop building process by preverify.
pause
goto :end
)
rem *** copy resources *************
REM 把我們資源目錄下的所有東西COPY到output中,進行打包
copy %RES_DIR%\*.* output
rem ******************************
ECHO JAR....
rem ******************************
REM 打包;把tempsrc目錄下所有文件,MANIFEST.MF為manifest文件(由m選項指定)打成一個jar包。具體查閱jar.exe /?
"%JDK%\bin\jar.exe" cvfm _%PROJ_FULL_NAME%.jar MANIFEST.MF -C output .
if not exist _%PROJ_FULL_NAME%.jar (
echo *** Error: stop building process by jar.
pause
goto :end
)
rem ******************************
ECHO Obfuscate.....
rem ******************************
REM 混雜;這兒我們也可把前面的混雜選項依次列在後面,假如怕太長,可以用文件,記得加@
REM 假如不混雜則直接把jar包改名既可
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
)
if not exist %PROJ_FULL_NAME%.jar (
echo *** Error: stop building process by Obfuscate.
pause
goto :end
)
rem *****************************
Echo Preverify...
rem *****************************
REM 再次較驗,輸出到tempJar中
"%J2ME_WTK%\bin\preverify.exe" -classpath "%J2ME_API%" -d tempJar %PROJ_FULL_NAME%.jar
if not exist tempJar\%PROJ_FULL_NAME%.jar (
echo *** Error: stop building process.
goto :end
)
rem ******************************
rem Compress...
rem ******************************
REM 進進tempJar目錄,進行壓縮
REM 假如不壓縮直接改名
cd tempJar
if "%USE_KZIP%"=="true" (
echo **** compressing with Kzip ****
REM 用7za.exe解壓,也可以用jar解壓
"%TOOL_DIR%\7za.exe" x %PROJ_FULL_NAME%.jar -ozip > NUL
del %PROJ_FULL_NAME%.jar >NUL
cd zip
REM 應用kzip壓縮&打包
"%TOOL_DIR%\kzip.exe" /r ..\..\%ARCHIVE_NAME%.jar *.*> NUL
cd ..
rd /s /q zip > NUL
) else (
copy %PROJ_FULL_NAME%.jar ..\%ARCHIVE_NAME%.jar
)
REM 返回到_make目錄
cd ..
REM 既得到我們所需要的Jad和Jar包了,COPY到release目錄往
copy %ARCHIVE_NAME%.ja* %RELEASE_DIR%\%ARCHIVE_NAME%.ja*
cd ..
REM 刪除_make臨時文件夾
rd /q /s _make
:end
cd %PROJ_DIR%
REM 假如出錯,還是需要刪除_make文件夾
if exist _make rd /Q /S _make
Echo on
=============================================
包已經打成了,那再讓我們建一個run來跑來看看後果吧
================================run===================
call env.bat
call config.bat
echo %RELEASE_DIR%\%ARCHIVE_NAME%.jad
%J2ME_WTK%\bin\emulator.exe -Xdevice:DefaultColorPhone -cp %J2ME_API% -Xdescriptor:%RELEASE_DIR%\%ARCHIVE_NAME%.jad