生活,在繼續(xù)……
          真正的生活,應(yīng)該是不斷的向前!
          posts - 11,comments - 75,trackbacks - 0

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

          注3:如果你想直接用這個(gè)批處理的話,需要progaurd.jar 及kzip,7zip


          ==================env.bat===================================
          REM 此env.bat為環(huán)境配置文件,請(qǐng)根據(jù)自身環(huán)境情況修改

          REM REM表示此行為注釋,既不顯示也不執(zhí)行
          REM echo[打開或關(guān)閉命令回顯功能,或顯示消息。] @表示本行命令不被顯示
          @echo off

          rem **************** environment dir **********
          REM 設(shè)置JDK的目錄[注:在等號(hào)左右不能有空格],引用變量值時(shí)為:%變量名%
          set JDK=D:\j2sdk1.4.2
          REM 設(shè)置WTK目錄

          set J2ME_WTK=D:\wtk22
          REM 設(shè)置編譯和混淆時(shí)需要的LIB包,一般在WTK的lib目錄下,也可用其它包,比如Nokia的,根據(jù)機(jī)型而定
          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 設(shè)置工作目錄,%CD%表示當(dāng)前目錄
          set PROJ_DIR=%cd%
          REM src為源程序目錄
          set SCR_DIR=%PROJ_DIR%\src
          REM res為資源目錄
          set RES_DIR=%PROJ_DIR%\res
          REM  #release為打包結(jié)果目錄
          set RELEASE_DIR=%PROJ_DIR%\#release

          rem ****** tools dir *********
          REM 設(shè)置工具目錄
          set TOOL_DIR=%PROJ_DIR%\tools

          echo on
          ========================================================
          ====================config.bat ========================
          REM 配置文件,設(shè)置項(xiàng)目屬性
          @echo off
          REM 項(xiàng)目名稱,既你的jad/Jar包顯示的名稱
          set PROJ_NAME=TestGame
          REM 游戲名稱,顯示在jad的屬性欄中,此兩名稱可以想同
          set GAME_NAME=Test Game

          REM 設(shè)置機(jī)型
          set PHONE=Triplets
          REM 語(yǔ)言
          set LANG=%1
          REM 這兒用到%1,在批處理的調(diào)用中也可以使用參數(shù)0~9,0為批處理本身。1~9為參數(shù),用空格隔開。
          REM 在批處理中通過(guò)%1 ~ %9來(lái)引用,如果沒(méi)有參數(shù)則設(shè)置為EN
          if "%1" == "" set LANG=EN
          REM 設(shè)置版本號(hào)
          set VER1=0
          set VER2=0
          set VER3=1
          set VERSION=%VER1%.%VER2%.%VER3%
          set PROJ_FULL_NAME=%PROJ_NAME%_%PHONE%
          REM 設(shè)置Jad/Jar的包名
          set ARCHIVE_NAME=%PROJ_FULL_NAME%_%LANG%_%VERSION%
          REM 設(shè)置主類名稱,在創(chuàng)建Jad和混淆時(shí)需要用到
          set MAIN_CLASS=cMIDlet
          set MANIFEST_NAME=Test Game
          REM Jad中其它選項(xiàng)
          set PROJ_DESCRIPTION=It's a test project!!!
          set VENDOR=Sun Co.
          set CLDC=CLDC-1.0
          set MIDP=MIDP-2.0

          REM 設(shè)置是否使用混淆和是否使用壓縮,這兒我用的kzip
          set OBFUSCATE=true
          set USE_KZIP=true
          echo on
          ==================================================================
          ======================build.bat==================
          @echo off

          REM 調(diào)用配置文件
          call env.bat
          call config.bat %1


          REM 在我們每次build時(shí),可以查看下是否正確
          Echo %PROJ_FULL_NAME%
          Echo lang-%LANG%
          Echo %VERSION%

          rem ***************************
          REM 我們需要建立一個(gè)臨時(shí)的目錄來(lái)保存預(yù)處理后(可編譯的)的代碼,如果沒(méi)有使用到預(yù)處理則可以省去此目錄
          REM _make為我們Build過(guò)程中的臨時(shí)目錄,Build完成后刪除,這樣可保證每次都是build的最新文件
          REM 批處理中也可以使用條件判斷和括弧,[注:括弧和if/else 一定要在一行上]
          REM 判斷一個(gè)文件或是目錄是否存在可以使用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 進(jìn)入到_make目錄
          mkdir _make
          cd _make

          rem ******************************
          REM 這兒我們使用Echo命令來(lái)創(chuàng)建Jad和Manifest文件。同樣是為了每次的jad和MF都是最新版本的
          REM 用>和>>流重定向符,使Echo輸出到文件而非默認(rèn)的顯示器,>為新建,>>為追加
          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 對(duì)jar-size這項(xiàng)目,可以使用工具在jar生成后來(lái)修改,如果沒(méi)工具的話,只能手動(dòng)了^_^
          ECHO MIDlet-Jar-Size: >>                                  %ARCHIVE_NAME%.jad
           
          rem ******************************
          REM 混淆的選項(xiàng)配置,這兒我只列出了最基本的選項(xiàng),如果還有其它需求,請(qǐng)查閱:http://proguard.sourceforge.net/
          rem ******************************
          REM 混淆時(shí)所要需要的API包
          echo -libraryjars %J2ME_API%     > %PROJ_FULL_NAME%.pro
          REM 要被混淆的Jar包
          echo -injars _%PROJ_FULL_NAME%.jar   >> %PROJ_FULL_NAME%.pro
          REM 混淆時(shí)輸出文件
          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 校驗(yàn)[可不需要此步,一般來(lái)說(shuō)要需要對(duì)包校驗(yàn)一次既可,也可對(duì)編譯文件再多校驗(yàn)一次:) ]
          "%J2ME_WTK%\bin\preverify.exe" -classpath "%J2ME_API%"; -d output classes
          REM 如果校驗(yàn)成功或生成一個(gè)目錄,由-d選項(xiàng)指定,如果沒(méi)有-d選項(xiàng),則默認(rèn)為output
          if not exist output (
          REM 在批處理中可以使用GOTO語(yǔ)言,有時(shí)如果需要較復(fù)雜的循環(huán)的話,還是比較有用的
           echo *** Error: stop building process by preverify.
           pause
           goto :end
          )

          rem ***  copy resources *************
          REM 把我們資源目錄下的所有東西COPY到output中,進(jìn)行打包
          copy %RES_DIR%\*.* output

           

          rem ******************************
          ECHO JAR....
          rem ******************************
          REM 打包;把tempsrc目錄下所有文件,MANIFEST.MF為manifest文件(由m選項(xiàng)指定)打成一個(gè)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 混淆;這兒我們也可把前面的混淆選項(xiàng)依次列在后面,如果怕太長(zhǎng),可以用文件,記得加@
          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 再次較驗(yàn),輸出到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 進(jìn)入tempJar目錄,進(jìn)行壓縮
          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臨時(shí)文件夾
          rd /q /s _make

          :end
          cd %PROJ_DIR%
          REM 如果出錯(cuò),還是需要?jiǎng)h除_make文件夾
          if exist _make rd  /Q /S _make

          Echo on
          =============================================
          REM 包已經(jīng)打成了,那再讓我們建一個(gè)run來(lái)跑來(lái)看看效果吧
          ================================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 生活,在繼續(xù)……勿要停! 閱讀(326) 評(píng)論(0)  編輯  收藏 所屬分類: 批處理

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 岱山县| 永丰县| 页游| 绥滨县| 垣曲县| 横峰县| 修文县| 高雄市| 柏乡县| 长白| 西畴县| 丹巴县| 宜都市| 太康县| 尤溪县| 泗洪县| 毕节市| 松滋市| 勐海县| 达孜县| 芦山县| 汤原县| 沽源县| 泸水县| 红安县| 九龙城区| 竹山县| 密云县| 伊金霍洛旗| 阿勒泰市| 远安县| 钟祥市| 许昌市| 三门县| 青浦区| 绥滨县| 彰化县| 定安县| 始兴县| 汤原县| 中卫市|