超强混淆器ProGuard之终极心决

ProGuard是一个非常酷的混淆器和收缩器(shrinker, 大家有更好听的翻译方法一定告诉我)。它的特点是除了可以混淆保护你的代码,还可以自动检测和删除没有用到的类、方法和数据成员,还可以去掉包的层次关系,最大限度的缩小你的jar包。
使用ProGuard的另外一个显著意义就是,因为它可以自动删除不用的部分,你大可以放心的使用模块级重用,而不是通常j2me程序员所采用的代码级重用,大大提高开发效率。因此郑重的向所有j2me开发者推荐ProGuard。
但是一个问题是ProGuard还不能集成到JB和WTK等开发环境(不过WTK2.0自带),而要自己写命令行来使用,我想这个是制约大家使用ProGuard的最大障碍。
因此我最近研究了一下,写了个自动化程度很高的脚本,提供给大家使用。
这个脚本自动替你做所有的事情:编译、预打包、混淆、预审核、打包、创建jad文件等。而且在中间任何一步出错可以自动停止。我都是先用JB开发,最后发布前用这个脚本处理一下即可。


对每个新的工程,需要修改的部分全部集中在一开头的变量设置部分,7个变量分别是:程序名(将用做jar和jad的名字)、主类名(MIDlet子类)、图标文件名、编译列表(请按依赖关系顺序书写)、java库路径、proguard的路径、作者信息。其中图标如果不需要可以省略或置空(set ICON_NAME= ),而PROGARD_HOME和APP_VENDOR一般也是不需要重复修改的。
要求所有的资源文件都放在src的res目录下,这是我的个人习惯,大家可以按照自己的习惯更改脚本。
===========================================================================
@echo off


rem ############################################################################
rem ## Script for compiling, obfuscating, preverifying & packaging ##
rem ############################################################################


setlocal


rem ############################################################################
rem ## Set up varialbles ##
rem ############################################################################
set APP_NAME=MyGame
set MIDLET_CLASS=MyGameMID
set ICON_NAME=icon.png
set COMPILE_LIST=src/com/joyamigo/gamefast/*.java src/com/joyamigo/util/*.java src/com/joyamigo/gameui/*.java src/*.java
set LIB_PATH=C:/Nokia/Devices/Nokia_Series_60_MIDP_Concept_SDK_Beta_0_2/lib/classes.zip
set PROGUARD_HOME=C:/JBuilder7/proguard1.6.2/
set APP_VENDOR=CNJM



echo Start building %APP_NAME%
echo.


rem pause
rem ############################################################################
rem ## Compiling ##
rem ############################################################################
set STEP=Compiling
echo %STEP%...
if exist tmp1 rd /s/q tmp1
md tmp1
javac -d tmp1 -bootclasspath "%LIB_PATH%" -classpath tmp1 %COMPILE_LIST%
if ERRORLEVEL 1 goto ERROR
xcopy /i/e src/res tmp1/res > nul


rem pause
rem ############################################################################
rem ## Pre-packaging ##
rem ############################################################################
set STEP=Pre-packaging
echo %STEP%...
rem create manifest file
echo Manifest-Version: 1.0> manifest.mf
echo MIDlet-Name: %APP_NAME%>> manifest.mf
echo MIDlet-1: %APP_NAME%, , %MIDLET_CLASS%>> manifest.mf
if not ''%ICON_NAME%''=='''' echo MIDlet-Icon: /res/%ICON_NAME%>> manifest.mf
echo MIDlet-Version: 1.0>> manifest.mf
echo MIDlet-Vendor: %APP_VENDOR%>> manifest.mf
echo MicroEdition-Configuration: CLDC-1.0>> manifest.mf
echo MicroEdition-Profile: MIDP-1.0>> manifest.mf
jar cfm tmp1.jar manifest.mf -C tmp1 .
if ERRORLEVEL 1 goto ERROR
del manifest.mf
rd /s/q tmp1


rem pause
rem ############################################################################
rem ## Obfuscating ##
rem ############################################################################
set STEP=Obfuscating
echo %STEP%...
rem create proguard obfuscating script
echo -libraryjars %LIB_PATH%> myconfig.pro
echo -injars tmp1.jar>> myconfig.pro
echo -outjar tmp1/tmp1.jar>> myconfig.pro
echo -overloadaggressively>> myconfig.pro
echo -dontusemixedcaseclassnames>> myconfig.pro
echo -defaultpackage ''''>> myconfig.pro
echo -printseeds>> myconfig.pro
echo -keep public class * extends javax.microedition.midlet.MIDlet>> myconfig.pro
md tmp1
java -jar "%PROGUARD_HOME%lib/proguard.jar" @myconfig.pro > nul
if ERRORLEVEL 1 goto ERROR
del tmp1.jar
del myconfig.pro


rem pause
rem ############################################################################
rem ## Preverifying ##
rem ############################################################################
set STEP=Preverifying
echo %STEP%...
cd tmp1
jar xf tmp1.jar
del tmp1.jar
preverify -classpath "%LIB_PATH%" -d . .
if ERRORLEVEL 1 goto ERROR


rem pause
rem ############################################################################
rem ## Packaging ##
rem ############################################################################
set STEP=Packaging
echo %STEP%...
if exist ../%APP_NAME%.jar del ../%APP_NAME%.jar
jar cfm ../%APP_NAME%.jar meta-inf/manifest.mf .
if ERRORLEVEL 1 goto ERROR
cd ..
rd /s/q tmp1


rem pause
rem ############################################################################
rem ## Creating descriptor ##
rem ############################################################################
set STEP=Creating descriptor
echo %STEP%...
rem create temporary batch to create jad file
echo echo MIDlet-1: %%~n1, , %%2^> %%~n1.jad> tmp1.bat
if not ''%ICON_NAME%''=='''' echo echo MIDlet-Icon: /res/%ICON_NAME%^>^> %%~n1.jad>> tmp1.bat
echo echo MIDlet-Jar-Size: %%~z1^>^> %%~n1.jad>> tmp1.bat
echo echo MIDlet-Jar-URL: %%1^>^> %%~n1.jad>> tmp1.bat
echo echo MIDlet-Name: %%~n1^>^> %%~n1.jad>> tmp1.bat
echo echo MIDlet-Vendor: %%3^>^> %%~n1.jad>> tmp1.bat
echo echo MIDlet-Version: 1.0^>^> %%~n1.jad>> tmp1.bat
call tmp1.bat %APP_NAME%.jar %MIDLET_CLASS% %APP_VENDOR%
del tmp1.bat


echo.
echo %APP_NAME%.jar and %APP_NAME%.jad created, building completed.
goto EXIT


:ERROR
echo.
echo Error occurred while %STEP%, building stopped.
:EXIT
endlocal

 

转自:http://www.594k.com/java/html/y2007m4/12714/

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值