nokia_S40 混淆问题
我使用S_40平台时,用retroguard在JBuilder做代码混淆出现下面的错误,但使用标准的MIDP1.0/MIDP2.0混淆都没出现问题。
D:\JBuilder9\jdk1.4\bin\javaw -classpath "D:\JBuilder9\thirdparty\retroguard-v1.1.14\retroguard.jar;;D:\Nokia\Devices\Nokia_S40_DP20_SDK_1_0\lib\classes.zip" RetroGuard "F:\WorkArea\java\HoldOn60_MIDP1_0\bin\HoldOn60_MIDP1.0.jar" "F:\WorkArea\java\HoldOn60_MIDP1_0\bin\obfuscate-temp\HoldOn60_MIDP1.0.jar" "F:\WorkArea\java\HoldOn60_MIDP1_0\bin\obfuscate-temp\HoldOn60_MIDP1.0.rgs" "F:\WorkArea\java\HoldOn60_MIDP1_0\bin\obfuscate-temp\log-HoldOn60_MIDP1.0.jar"
java.lang.UnsatisfiedLinkError: nativeStaticSetAlignment
at com.nokia.mid.impl.isa.ui.style.UIStyle.nativeStaticSetAlignment(Native Method)
at com.nokia.mid.impl.isa.ui.style.UIStyle.<clinit>(Unknown Source)
at javax.microedition.lcdui.Displayable.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:140)
at a.a.a.f.a(Unknown Source)
at a.a.a.f.a(Unknown Source)
at a.a.a.f.j(Unknown Source)
at a.a.a.j$4.a(Unknown Source)
at a.a.a.j.a(Unknown Source)
at a.a.a.j.a(Unknown Source)
at a.a.a.j.a(Unknown Source)
at a.a.a.j.if(Unknown Source)
at a.a.a.s.do(Unknown Source)
at a.a.a.s.a(Unknown Source)
at RetroGuard.a(Unknown Source)
at RetroGuard.a(Unknown Source)
at RetroGuard.main(Unknown Source)
Exception in thread "main"
问题点数:50、回复次数:11Top
1 楼yesming(tony)回复于 2004-11-04 12:09:45 得分 0
现在我用ant可以混淆,但混淆后通不过预审。不用nokia的API的话,一切正常。
这是build.xml
--------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="outPackage">
<!--项目名称-->
<property name="projectname" value="HoldOn60Sec_MIDP1.0"/>
<!--jar放置的位置-->
<property name="bin" value="${user.dir}/bin"/>
<!--未混淆的jar文件名-->
<property name="jarunobfus" value="${bin}/${projectname}-unobfus.jar"/>
<!--混淆后的jar文件名-->
<property name="jarobfus" value="${bin}/${projectname}-obfused.jar"/>
<!--混淆后的jar文件目录-->
<property name="dir.obfused" value="${user.dir}/obfused/"/>
<!--nokia jdk目录-->
<property name="jdk.home" value="D:\Nokia\Devices\Nokia_S40_DP20_SDK_1_0"/>
<!--预审前的class文件放置地方 -->
<property name="javacompile_dest" value="${user.dir}/preverify-temp"/>
<!--审核后的class文件放置地方-->
<property name="dest" value="${user.dir}/classes"/>
<property name="src" value="${user.dir}/src"/>
<property name="res" value="${user.dir}/res"/>
<path id="project.class.path">
<pathelement location="${dest}"/>
<pathelement location="${jdk.home}/lib/classes.zip"/>
</path>
<!--Patternset to exclude files from the output directory:-->
<patternset id="dest.exclude">
<exclude name="Generated Source/"/>
<exclude name="package cache/"/>
<exclude name="dependency cache/"/>
<exclude name="jsp cache/"/>
</patternset>
<target name="init">
<mkdir dir="${bin}"/>
<mkdir dir="${dest}"/>
<mkdir dir="${javacompile_dest}"/>
<mkdir dir="${dir.obfused}"/>
</target>
<target depends="init" name="javacompile">
<javac bootclasspathref="project.class.path" debug="true" deprecation="true" destdir="${javacompile_dest}" nowarn="false" target="1.2">
<src path="${src}"/>
</javac>
</target>
<target name="resource">
<copy todir="${dest}">
<fileset dir="${res}">
<include name="**/*.jpe"/>
<include name="**/*.jpeg"/>
<include name="**/*.rmf"/>
<include name="**/*.wav"/>
<include name="**/*.mid"/>
<include name="**/*.midi"/>
<include name="**/*.au"/>
<include name="**/*.gif"/>
<include name="**/*.png"/>
<include name="**/*.jpg"/>
<include name="**/*.aiff"/>
<include name="**/*.properties"/>
<include name="**/*.ico"/>
</fileset>
</copy>
</target>
<target description="混淆前打包jar" name="beforeobfuscate" depends="javacompile">
<jar basedir="${javacompile_dest}" jarfile="${jarunobfus}"/>
</target>
<target description="obfuscate混淆" name="obfuscate" depends="beforeobfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="D:\JBuilder9\thirdparty\proguard3.0.7\lib\proguard.jar" />
<proguard>
-libraryjars ${jdk.home}/lib/classes.zip
-injars ${jarunobfus}
-outjars ${jarobfus}
-keepclasseswithmembers public class * extends javax.microedition.midlet.MIDlet
</proguard>
</target>
<target description="混淆后解压到{dir.obfused}" name="unzip" depends="obfuscate">
<unzip src="${jarobfus}" dest="${dir.obfused}"/>
<delete dir="${dir.obfused}/META-INF" includeemptydirs="true"/>
<delete dir="${dir.obfused}/package cache" includeemptydirs="true"/>
</target>
<target description="解压后预审" name="obfusedpreverify" depends="unzip">
<exec dir="." executable="${jdk.home}/bin/preverify.exe" failonerror="true">
<arg value="-classpath"/>
<arg value="${dir.obfused};${jdk.home}/lib/classes.zip"/>
<arg value="-d"/>
<arg value="${dest}"/>
<arg value="${dir.obfused}"/>
</exec>
</target>
<target description="拷贝资源文件,最后包装成jar" name="package" depends="obfusedpreverify,resource">
<jar basedir="${dest}" jarfile="${bin}/${projectname}.jar"/>
</target>
<target description="Preverify classes" name="preverify">
<exec dir="." executable="${jdk.home}/bin/preverify.exe" failonerror="true">
<arg value="-classpath"/>
<arg value="${javacompile_dest};${jdk.home}/lib/classes.zip"/>
<arg value="-d"/>
<arg value="${dest}"/>
<arg value="${javacompile_dest}"/>
</exec>
</target>
<target depends="javacompile,resource,preverify" name="make"/>
<target depends="cleanup,make" name="rebuild"/>
<target depends="cleanup,package" name="outPackage"/>
<target name="cleanup">
<delete failonerror="false" includeemptydirs="true">
<fileset dir="${dest}"/>
</delete>
<delete dir="${javacompile_dest}" includeemptydirs="true"/>
<delete dir="${bin}" includeemptydirs="true"/>
<delete dir="${dir.obfused}" includeemptydirs="true"/>
</target>
</project>
--------------------------------------------------------------------
下面是出错信息:
obfusedpreverify:
[exec] Error loading class F:\WorkArea\java\HoldOn60_MIDP1_0.obfused.
Top
2 楼yesming(tony)回复于 2004-11-04 12:13:07 得分 0
只是make的话也没有问题,我想问题可能在proguard混淆后,nakia审核的程序那步有问题。
哪位达人混淆过nokia40代码后,预审通过的来谈谈哈Top
3 楼aheroofeast(王有才)回复于 2004-11-04 13:37:27 得分 0
麻烦。没用过jbuilderTop
4 楼prok(换换口味)回复于 2004-11-04 13:45:53 得分 50
你用得wtk1.0.4混打包得吧
呵呵.这个也曾是我郁闷之极得问题.后来解决得办法就是把nokia得api加到wtk得emptyapi.zip就可以了.调用了别的api就把他都加到emptyapi.zip里就可以了.我都是瞎试出来得.具体得emptyapi.zip得作用我也不知道.有没高手做答下.Top
5 楼cooled(青山依旧)回复于 2004-11-04 13:56:15 得分 0
emptyapi.zip似乎是预审核时需要用到的包.Top
6 楼cooled(青山依旧)回复于 2004-11-04 13:56:29 得分 0
emptyapi.zip似乎是预审核时需要用到的包.Top
7 楼cooled(青山依旧)回复于 2004-11-04 14:14:22 得分 0
应该在jb的tools->confgure obfuscators中可以配置的.Top
8 楼yesming(tony)回复于 2004-11-04 14:39:01 得分 0
我用ANT,预审时加了Nokia的类库这里。而且在混淆前预审是可以通过的。混淆后预审就有问题了
<target description="解压后预审" name="obfusedpreverify" depends="unzip">
<exec dir="." executable="${jdk.home}/bin/preverify.exe" failonerror="true">
<arg value="-classpath"/>
<arg value="${dir.obfused};${jdk.home}/lib/classes.zip"/>
<arg value="-d"/>
<arg value="${dest}"/>
<arg value="${dir.obfused}"/>
</exec>
</target>
Top
9 楼lonelymoon(孤月居士)回复于 2004-11-04 23:40:27 得分 0
jbuilder9直接用retroguard打包就可以啊Top
10 楼prok(换换口味)回复于 2004-11-05 11:01:34 得分 0
不会啊.我用wtk打的包.只要追加api进去就没问题得啊.我一直这么做的.楼主不妨试试Top
11 楼yesming(tony)回复于 2004-11-05 11:04:35 得分 0
OK了Top




