程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2ME批處理教程

J2ME批處理教程

編輯:J2ME
首先我們需要建立一個工程目錄,暫且建在D:\test下吧。然後在test下再建立源程序目錄,資源目錄,工具目錄,這些都可以配置文件中指定。然後就是我們的三個批處理文件了。
注1:批處理文件都以bat為後綴
注2:很多批處理命令我都沒多做解釋,具體你可以在CMD窗口輸入:命令 /?來查看幫助。如果你不喜歡E文的話,也可以MS的官方網上去看,這是中文的鏈接: http://www.microsoft.com/technet/prodtechnol/Windowsserver2003/zh-chs/library/ServerHelp/552ed70a-208d-48c4-8da8-2e27b530eac7.mspx?mfr=true

注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目錄下,也可用其它包,比如Nokia的,根據機型而定
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
=============================================
REM 包已經打成了,那再讓我們建一個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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved