生活,在繼續……
          真正的生活,應該是不斷的向前!
          posts - 11,comments - 75,trackbacks - 0

          首先我們需要建立一個工程目錄,暫且建在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


          ==================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

           

          posted on 2006-11-16 22:12 生活,在繼續……勿要停! 閱讀(325) 評論(0)  編輯  收藏 所屬分類: 批處理

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 洪江市| 龙川县| 临潭县| 台州市| 莎车县| 芜湖市| 德格县| 揭西县| 海南省| 镇雄县| 霞浦县| 杭锦旗| 米脂县| 来安县| 泾源县| 武城县| 西青区| 龙泉市| 且末县| 伊春市| 台江县| 东港市| 寿宁县| 德保县| 且末县| 玉屏| 讷河市| 邛崃市| 石屏县| 布拖县| 大姚县| 毕节市| 兴业县| 罗田县| 启东市| 沈阳市| 大方县| 淄博市| 库尔勒市| 蒙自县| 平阳县|