用户: 密码: 答案:   我要注册   忘记密码

加入收藏  设为首页

开发文档

CNJM首页

业界新闻

手机软件

终端应用

资源下载

EclipseME

CNJM论坛

                 

频道列表

J2ME开发 176篇
服务器端开发 33篇
JAVA语言 71篇
游戏与图形 101篇
WindowsMobile开发 6篇
Symbian开发 61篇
Brew开发 36篇
其它开发平台 6篇

热点文章

四种JAD生成器之比... 53941次
手机JAVA入门讲座 32751次
手机游戏毕业设计论文 29569次
各厂商SDK和模拟器... 20319次
Java手机机型对应表 19244次
一个关于CMNET和CM... 18452次
2005年毕业论文---... 16713次
手机JAVA MIDP2.0讲座 16405次
JAVA手机性能参数大全 14540次
手机JAVA中级讲座 12652次
J2ME程序开发新手...  11377次
我的第一个Java手...  11185次

文章搜索

搜 索
按 照
频 道
  
新人批处理编译扫盲教程
编辑: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

相关文章
   暂无相关文章
最新评论
网站简介  |  关于版权  |  广告服务  |  网站地图  |  联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:京ICP备041452