2009-06-09 100 views
1

我正在使用天线来构建,打包和混淆j2me应用程序。 建筑和包装工作正常。麻烦制作混淆

该项目使用的第三方jar已经被混淆,除了一些接口。

当试图混淆我有几个这样的错误:

[wtkobfuscate] Warning: i: can't find referenced class fooPackage.fooClass 

I类和fooPackage.fooClass是我提到这个第三方罐子。

UPDATE

这个第三方库使用J2ME的xmlrpc.jar。如果我不打包所有,那么我将无法混淆第三方接口和j2me-xmlrpc.jar。 (我不能运行应用程序这样,不知道为什么)

如果我只打包了J2ME的xmlrpc.jar和我的项目类我得到这个错误,而混淆

[wtkobfuscate] Warning: there were 2 instances of library classes depending on program classes. 

UPDATE 2:

我知道这种混淆是可能的,因为在Netbeans中我可以使用Proguard进行混淆处理。

由于Netbeans内部使用ANT进行构建,我尝试将生成的build.xml复制到我自己的build.xml中。

混淆Netbeans使用可在Netbeans之外使用的库org-netbeans-modules-mobility-antext.jar。我将这个库导入到我的项目中,并毫无问题地使用它。

但我得到了同样的错误,我得到了使用天线。

在Netbeans中进行混淆会产生很多警告,但它仍然会生成混淆的jar。

我失踪了什么?

+0

你使用哪种混淆器? – Toad 2009-07-20 15:03:49

+0

@reinier:Proguard 4。3 – 2009-07-20 15:13:45

+0

我使用jshrink获得了更好的结果。 如果你想我可以寄给你测试。这可能值得一试 – Toad 2009-07-20 15:22:26

回答

1

我使用的是Proguard 4.3。降级到Proguard 4.2解决了这个问题。

1

如果第三方库被混淆,请在混淆类时不要包含该库。而是按照以下步骤单独

  1. 瓶你的类(不要包括第三方库)
  2. 模糊处理步骤1
  3. 不能解压缩在一定温度在步骤2中得到的混淆的JAR和第三方库获得的罐子文件夹
  4. 罐全部unjared类
  5. 预校验,并再次
0

它们打包尝试使用jshrink。我有更好的结果,然后用proguard:

    <java jar="obfuscator\jshrink.exe" fork="true"> 
         <arg value="..\${projectdir}\${projectname}.jar"/> 
         <arg value="-classpath"/> 
         <arg pathref="project.class.path"/> 
         <arg value="-keep"/> 
         <arg value="${midletclass}"/> 
         <arg value="-o"/> 
         <arg value="..\${projectdir}\${projectname}.jar"/> 
        </java>