`
muscle-liu
  • 浏览: 230063 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

j2mepolish中obfuscator(混淆器)的应用

    博客分类:
  • j2me
阅读更多
       [size=14]我们知道在j2mepolish带有一个ant构件工具,且有一个build.xml文件。在build.xml里边定义了一个工程的编译(compile)、混淆(obfuscate)、打包(package).....等命令。所以很多人都喜欢用j2mepolish来的ant来管理一个j2me工程的编译打包工作,即使他们没用到polish, 避免了用ant时写build文件的麻烦。

build.xml:
<build
     symbols="ExampleSymbol, AnotherExample"
     imageLoadStrategy="foreground"
     fullscreen="menu"
     usePolishGui="true"
     >
     <!-- midlets definition -->
     <midlet class="de.enough.polish.example.MenuMidlet" name="Example" />
     <!-- project-wide variables - used for preprocessing  -->
     <variables>
       <variable name="update-url" value="http://www.enough.de/update" />
     </variables>
     <!-- obfuscator settings -->
     <obfuscator name="ProGuard"
                    useDefaultPacakge="true" 
                    unless="test"  />
     <!-- debug settings -->
     <debug showLogOnError="true" 
               verbose="true" 
               level="error"
	       if="test" 
	       >
        <filter package="de.enough.polish.example" level="debug" />
        <filter class="de.enough.polish.ui.Gauge" level="info" />
     </debug>
</build>


         现在我主要谈谈polish中的obfuscator(混淆器)的应用。我们知道J2ME的应用开发极大地受到了设备的限制。通常可下载类应用限制在几百K左右,设备本身限制在64k、100k、128k等不等。尽管现在的手机的内存可以达到1G(有些可以用内存卡),但一个应用程序的大小还是尽可能小好,因为这可能影响程序的性能。

下边是网上关于j2me应用程序瘦身的办法:

引用

1。 使用混扰obfuscate(正规减肥)

Java语言采用按名索引链接。包名,类变量名被保留在class的常量表中,混扰后有意义的名称被短的无意义的字串所代替,从此减少程序大小。同时混扰同时去掉了行号等调试信息(如果编译选项中未去掉)。另外,通常的混扰工具还将从未用过的方法、变量删除,从而减少程序空间。

特点:不涉及源程序,易于维护。瘦身率 10%-30%


2。“优化”包结构(常规减肥)

一些混扰工具不改变包的结构,也不能减少包的层次,如“com.pip.kstock.util.Tools”可能被混扰成“b.a.a.b.t”;而“com_pip_kstock_util.Tools”则可能成为“b.t”.这是配合混扰工具的减肥措施。另外,要明确分离被保护的包,因为被保护的包的所有类的包名都被保护。

特点:不改变类结构及源程序。瘦身率:3%-5%

3。优化程序(专业减肥)

此减肥方法是对源程序的调整,诸如“注释掉不用的方法”(若混扰工具不能做到的话);去掉无用的赋值和语句;优化语句;针对空间优化算法等。

如使用arraycopy替代for循环复制;

再如双字符串联结:
String s = “abc” + strVar;
String s = “abc”.concat(strVar);
(有的编译器将语句1编译成构造StringBuffer,这时语句2将省空间)


特点:正规化瘦身,工作量大。瘦身率:依情况而定

4。合并类(非常规减肥)

将若干子类合并到父类中,或将若干个不冲突的类合并成一个类。通过type或classID来判别具体实例属于哪个类,再应用公有的方法使用switch()转接到更名后的方法。

如public paint()可能会调用private paint4XXXVies()。

设计时还可使用重名变量进一步节省空间,但代码可读性大大降低。

特点:破坏面向对象设计、维护困难。瘦身率:高(合并一个类大约可瘦身1-3K)

5。挤压实现(疯狂减肥)

属于变态减肥方法,包括:

用直接访问变量的方式取代getter/setter方法
废除常量定义(一些混扰工具可完成);
减少变量和字符串。
特点:破坏面可读性、维护艰难。瘦身率:低(在临界值时使用)

上述瘦身方法均是针对已经成型产品。而在程序开始设计时,瘦身的考虑也是相当重要的。下面根据实际情况举一些小例子:

1。保留计算结果

在前面提到的瘦身技术中包括getter/setter方法替换方式,而对一些类的属性可考虑固化变量法,即在初始化时将此属性值记录到类的成员变量中。但此属性必须是初始就确定、运行中不会改变或极少改变(改变的地方要重赋值);另外,由于此方法不能实现lazy loading,故要求属性是被“必然访问”的属性。

2。集中分支语句

在CLDC规范中,有一个J2SE虚拟机之外的东西,即preverify,对应到类文件中是StackMap结构。如果你的一个函数代码中没有分支语句,包括没有异常处理,StackMap将缺席并使用缺省的内容。这在节省空间上有好处。

另外,StackMap结构的单元尺寸和代码段长度有关,所以避免写太长的方法。

3。关于变量初值

java的成员变量的初值不象写起来那样简单,他们是在类的初始化函数块中被赋予的。如果你想赋的初值同缺省的值一致,那么请省下5-6个字节吧。(不要因程序风格而犹豫,写上你的注释)

(该篇文章引用:http://clwu.bokee.com/1632798.html


可见混淆器(obfuscator)是优化一个j2me应用程序的主要利器。我们来看回polish中的obfuscator, 在polish中带有三个obfuscator: "ProGuard", "YGuard", "RetroGuard", 其中默认是用"ProGuard"。在上边的build.xml里边我们看到有obfuscator setting 的部分, 在这里我们可以对工程的obfuscation设置。当然,如果你不想用obfuscator, 只要把这个settings 部分注释掉就行了。

下边来看看obfuscator的设置:
<obfuscator unless="test" enable="true" name="ProGuard" >
	<keep class="com.company.dynamic.SomeDynamicClass" />
	<keep class="com.company.dynamic.AnotherDynamicClass" />
	<parameter name="scriptFile" value="../scripts/obfuscate.script" />
</obfuscator>

其主要属性与元素:
属性name: 指定当前obfuscator的名称,其中"ProGuard"是默认的,如果你想用其的的obfuscator,只要在build.xml中指定相应的classPath就可以了。

元素<keep/>: 保留你不想参与混淆的类,留给程序动态加载。这个很好用,当你混淆某个工程后,运行时却发现有部分的类找不到,显示java.lang.ClassNotFoundException, 这时你可以用<keep/>把这个类保留下来,给程序动态加载。(我用polish混淆时碰过这情况,不知用其它混淆时(如JB)有没有??^_^)

元素<parameter/>: 当你想合用第三方的混淆器时,指定第三方混淆的配置。还有的是,ProGuard 3.x 提供了一个字节代码优化器(默认是false),当你用ProGuard混淆器时可以用此元素来优化代码:
<obfuscator unless="test" enable="true" name="ProGuard" >
	<parameter name="optimize" value="true" />
</obfuscator


如果你想几个obfuscator一起用,也可以,只要连着写几个<obfuscator/>就可以了。
[/size]
分享到:
评论

相关推荐

    j2mepolish,J2MEPOLISH,polish开发环境搭详细讲解

    2. **编写业务逻辑**:在源代码中实现应用的功能,可以使用Java语言进行编程。 3. **编译与预览**:通过Ant构建脚本,编译项目并生成jad和jar文件,可以在模拟器或真实设备上预览应用。 4. **调试与优化**:使用...

    j2mePolish安装配置文档

    ### j2mePolish安装与配置详解 #### 环境搭建 为了在Eclipse环境中配置并使用J2mePolish进行Java...以上即为J2mePolish在Eclipse 3.2.1环境下的安装、配置与运行指南,遵循上述步骤可有效提升Java ME应用的开发效率。

    《J2MEPolish初级教程》中文PDF+word,游戏产业是J2ME最大的市场.

    J2MEPolish是一个开源工具,它为J2ME应用程序提供了更丰富的用户界面和更好的性能。通过J2MEPolish,开发者可以使用CSS、HTML和JavaScript来设计UI,使得应用看起来更接近于桌面应用或现代移动应用。此外,它还支持...

    j2mepolish中文文档

    J2ME-Polish是一个德国人开发的开源项目,它提供了对j2me一整套的支持。比如支持自定义UI,支持国际化,通过build.xml生成对各个厂商的手机等。其中最有特色的是采用css定制UI,使得界面呈现和代码分离。

    J2mePolish2.0.1

    找这个版本找了好多天,总算找到了,上传这里方便大家下载。本人测试可正常搭配j2me移植环境。

    J2ME Polish集成到eclipse

    主要写J2mePolish的安装,Eclipse、eclipseME是以前配置的不多写了。 J2mePolish2.0beta3下载成功以后,直接点下载的jar就自动安装了,然后点下一步,下一步,有一个界面是选sdk的,我选的是wtk25。然后又一路下...

    enough-j2mepolish-runtime.jar

    jar包,官方版本,自测可用

    enough-j2mepolish-microemulatorstarter.jar

    jar包,官方版本,自测可用

    enough-j2mepolish-designer.jar

    jar包,官方版本,自测可用

    enough-j2mepolish-client.jar

    jar包,官方版本,自测可用

    [Polish]序言简介

    - **范例程序**:通过一个简单的示例程序来介绍J2MEPolish的基本使用方法,展示其在创建标准MIDP/1.0应用程序中的便捷性。 - **构建文件**:“build.xml”文件是J2MEPolish的核心配置文件,用于控制构建流程。即使...

    使用代码在运行时修改j2mepolish样式

    通过以上步骤,你可以利用代码在 J2ME 应用程序运行时灵活地调整 J2MEPolish 的样式,从而为用户提供更加个性化的体验。这种方法尤其适用于需要根据用户交互或环境变化动态调整界面的应用。请参考提供的 "Modifying-...

    使用J2ME Polish进行游戏编程

    在这篇文章中,是从Robert Virkus的 Pro J2ME Polish 摘录的。你将学会通过设置各种预处理变量从而优化游戏引擎;在MIDP1.0平台游戏引擎受限的条件下开发以及通过使用低级图形操作、声音重放和设备控制的厂家特殊库...

    Pro J2ME Polish Open Source Wireless Java Tools Suite(普通下载).rar

    - 高级用户界面(UI)框架:提供丰富的组件库和布局管理器,使得开发者可以创建美观且响应迅速的用户界面,与原生设备UI更加接近。 - 渲染引擎优化:通过高效的图形处理,提高应用程序的运行速度和视觉效果,减少...

    J2ME GZIP压缩开源包

    上面此句用于解压GZIP,至是否要转换成DataInputStream还是InputStream由你的程序决定,可找到j2mepolish相关文档看看其用法。 压缩比例没有测试过,在网上人家说对HTML压缩率为30%左右,而对于加裁速度,只是用...

    polish.pdf

    - **j2mepolish**: 指的是J2ME Polish工具,已经在描述中详细解释过。 【压缩包子文件的文件名称列表】:只有一个文件`polish.pdf`,这可能是一个详细的教程或者指南,涵盖了如何使用J2ME Polish进行项目开发,包括...

    连连看完整源码-j2me版本

    在移动MM上卖的可以运行的连连看完整源码,网址: http://mm.10086.cn/1009/300000009965.html?p=7018 用户需要安装j2mepolish和wtk2.5和ant,运行ant命令即可编译

    J2ME polish 相关资料

    1. **安装配置**:首先,你需要下载J2ME Polish的安装包,并按照`j2mePolish安装配置文档.doc`中的指导进行设置,这通常包括添加到IDE(如Eclipse)的插件集成,配置开发环境,以及安装必要的编译器和模拟器。...

Global site tag (gtag.js) - Google Analytics