-
13-09-2019 - |
题
我正在使用 Antenna 来构建、打包和混淆 j2me 应用程序。构建和包装工作正常。
该项目使用了第 3 方 jar,除了某些接口之外,该 jar 已经被混淆了。
当尝试混淆时,我遇到了几个错误,例如:
[wtkobfuscate] Warning: i: can't find referenced class fooPackage.fooClass
Class i 和 fooPackage.fooClass 来自我提到的第 3 方 jar。
更新:
该第 3 方库使用 j2me-xmlrpc.jar。如果我不将所有内容打包在一起,那么我将无法混淆第 3 方接口和 j2me-xmlrpc.jar。(我无法以这种方式运行应用程序,不知道为什么)
如果我只打包 j2me-xmlrpc.jar 和我的项目类,我在混淆时会收到此错误
[wtkobfuscate] Warning: there were 2 instances of library classes depending on program classes.
更新2:
我知道这种混淆是可能的,因为在 Netbeans 中我可以使用 Proguard 进行混淆。
由于 Netbeans 内部使用 ANT 进行构建,因此我尝试将生成的 build.xml 复制到我自己的 build.xml 中。
为了进行混淆,Netbeans 使用可在 Netbeans 外部使用的库 org-netbeans-modules-mobility-antext.jar。我将此库导入到我的项目中并使用它没有问题。
但我得到了与使用天线相同的错误。
在 Netbeans 中进行混淆会生成大量警告,但仍然会生成混淆的 jar。
我缺少什么?
解决方案 2
我用Proguard的4.3。降级到ProGuard的4.2解决了这个问题。
其他提示
如果第 3 方库被混淆,则在混淆类时不要包含该库。而是按照以下步骤操作
- 单独打包你的类(不包括第 3 方库)
- 混淆步骤1中获得的jar
- 将步骤 2 中获得的混淆 jar 和某个临时文件夹中的第 3 方库解压
- 打包所有未打包的类
- 预验证并再次打包
尝试使用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>
不隶属于 StackOverflow