|
|
|
| 新人批处理编译扫盲教程 |
编辑:rocks 审核:rocks 文章来源:CSDN
关键词:无 发表日期:2007-01-25 14:31:22 浏览次数:3365次 |
|
|
|
|
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>
来自:http://www.cnjm.net/tech/article3428.html [转载于CSDN] 作者:cxc014
JAVA手机网[www.cnjm.net] 写了点批处理方面的东东,希望可以给那些对IDE使用不好、而又想写点什么的新人一点帮助吧。勿然下笔,不对之处,还望大家指正。 首先我们需要建立一个工程目录,暂且建在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: 如果有问题大家就跟在贴子后哈,我会尽量为你解答:)
JAVA手机网[www.cnjm.net] ==================env.bat=================================== REM 此env.bat为环境配置文件,请根据自身环境情况修改
REM REM表示此行为注释,既不显示也不执行 REM echo[打开或关闭命令回显功能,或显示消息。] @表示本行命令不被显示 @echo off
JAVA手机网[www.cnjm.net] 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%表示当前目录
JAVA手机网[www.cnjm.net] 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
JAVA手机网[www.cnjm.net] echo on ======================================================== ====================config.bat ======================== REM 配置文件,设置项目属性 @echo off
JAVA手机网[www.cnjm.net] REM 项目名称,既你的jad/Jar包显示的名称 set PROJ_NAME=TestGame REM 游戏名称,显示在jad的属性栏中,此两名称可以想同 set GAME_NAME=Test Game
JAVA手机网[www.cnjm.net] 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%
JAVA手机网[www.cnjm.net] 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!!!
JAVA手机网[www.cnjm.net] 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
JAVA手机网[www.cnjm.net] 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
JAVA手机网[www.cnjm.net] ) else ( del /S/Q tempsrc\*.* ) if exist _make (
JAVA手机网[www.cnjm.net] rd _make /Q /S ) if not exist %RELEASE_DIR% (
JAVA手机网[www.cnjm.net] md %RELEASE_DIR% ) REM 进入到_make目录
JAVA手机网[www.cnjm.net] 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
JAVA手机网[www.cnjm.net] ECHO MIDlet-1: %GAME_NAME%, %ICON%, %MAIN_CLASS%>> MANIFEST.MF ECHO MIDlet-Version: %VERSION%>> MANIFEST.MF
JAVA手机网[www.cnjm.net] ECHO MicroEdition-Profile: %MIDP%>> MANIFEST.MF
JAVA手机网[www.cnjm.net] rem ******* Jad************** ECHO MIDlet-Name: %GAME_NAME%> %ARCHIVE_NAME%.jad
JAVA手机网[www.cnjm.net] 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
JAVA手机网[www.cnjm.net] rem ****************************** REM 混淆的选项配置,这儿我只列出了最基本的选项,如果还有其它需求,请查阅:http://proguard.sourceforge.net/
JAVA手机网[www.cnjm.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
JAVA手机网[www.cnjm.net] rem ***************************** ECHO Preverify.... rem ***************************** REM 校验[可不需要此步,一般来说要需要对包校验一次既可,也可对编译文件再多校验一次:) ] "%J2ME_WTK%\bin\preverify.exe" -classpath "%J2ME_API%"; -d output classes REM 如果校验成功或生成一个目录,由-d选项指定,如果没有-d选项,则默认为output if not exist output (
JAVA手机网[www.cnjm.net] REM 在批处理中可以使用GOTO语言,有时如果需要较复杂的循环的话,还是比较有用的 echo *** Error: stop building process by preverify. pause goto :end
JAVA手机网[www.cnjm.net] )
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
JAVA手机网[www.cnjm.net] 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
JAVA手机网[www.cnjm.net] )
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 )
JAVA手机网[www.cnjm.net] rem ******************************
JAVA手机网[www.cnjm.net] rem Compress... rem ****************************** REM 进入tempJar目录,进行压缩 REM 如果不压缩直接改名
JAVA手机网[www.cnjm.net] cd tempJar if "%USE_KZIP%"=="true" ( echo **** compressing with Kzip ****
JAVA手机网[www.cnjm.net] REM 用7za.exe解压,也可以用jar解压 "%TOOL_DIR%\7za.exe" x %PROJ_FULL_NAME%.jar -ozip > NUL del %PROJ_FULL_NAME%.jar >NUL cd zip
JAVA手机网[www.cnjm.net] REM 使用kzip压缩&打包 "%TOOL_DIR%\kzip.exe" /r ..\..\%ARCHIVE_NAME%.jar *.*> NUL cd ..
JAVA手机网[www.cnjm.net] rd /s /q zip > NUL ) else ( copy %PROJ_FULL_NAME%.jar ..\%ARCHIVE_NAME%.jar
JAVA手机网[www.cnjm.net] )
JAVA手机网[www.cnjm.net] REM 返回到_make目录 cd .. REM 既得到我们所需要的Jad和Jar包了,COPY到release目录去 copy %ARCHIVE_NAME%.ja* %RELEASE_DIR%\%ARCHIVE_NAME%.ja* cd .. REM 删除_make临时文件夹
JAVA手机网[www.cnjm.net] rd /q /s _make
:end cd %PROJ_DIR% REM 如果出错,还是需要删除_make文件夹 if exist _make rd /Q /S _make
Echo on =============================================
包已经打成了,那再让我们建一个run来跑来看看效果吧 ================================run=================== call env.bat
JAVA手机网[www.cnjm.net] 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
来自:http://www.cnjm.net/tech/article3428.html
|
|
|
|
|
|
相关文章
暂无相关文章
|
|
| 最新评论
|
|
|
|