当前位置:编程学习 > JAVA >>

j2me项目,在使用ant 打包后,jar 中MANIFEST.MF里中文为乱码

各位大神好,最近本人在开发完j2me手机应用项目后,打包使用的是ant,打包后的jar中MANIFEST.MF里中文为乱码,经本人数日苦思研究并查阅资料后无果,甚至苦恼;鄙人愚钝,特在此请教各位大神指点一二,望各位不惜赐教,静候贵帖!
以下是build.xml 内容:

<?xml version="1.0" encoding="UTF-8"?>
<project name="${programName}" default="end" basedir=".">
    <property name="flag.value" value="" />
    <property file="CONF.properties"/>
    <property name="src.dir" value="${basedir}\src"/>
    <property name="res.dir" value="${basedir}\res"/>
    <property name="build.dir" value="${basedir}\build"/>
    <property name="deploy.dir" value="${basedir}\deploy"/>
    <property name="package.dir" value="${basedir}\package"/>
    <property name="package.extract.dir" value="${package.dir}\extract"/>
    <property name="preverified.dir" value="${basedir}\preverified"/>
    <property name="preverified.noObfusedClass.dir" value="${preverified.dir}\noObfused\classes"/>
    <property name="preverified.obfusedClass.dir" value="${preverified.dir}\obfused\classes"/>

    <property name="preverify.bin" value="${wtk.home.dir}\bin\preverify.exe"/>
    <property name="emulator.bin" value="${wtk.home.dir}\bin\emulator.exe"/>

    <property name="jad.file" value="${programName}.jad"/>
    <property name="debuglevel" value="source,vars"/>

    <property name="target" value="1.1"/>
    <property name="source" value="1.3"/>
    
    
    <target name="replaceJava">
     <echo message="替换文件,修改渠道号"/>
        <delete file="E:\metre\workspace\kjava\SIPDemo\src\com\feedov\main\Net.java" />
<copy file="E:\metre\workspace\kjava\SIPDemo\Net.java" todir="E:\metre\workspace\kjava\SIPDemo\src\com\feedov\main" />
<replace file="E:\metre\workspace\kjava\SIPDemo\src\com\feedov\main\Net.java" token="100000" value="${flag.value}" encoding="UTF-8"/>
</target>

    <target name="init" description="初始化环境">
        <echo message="初始化目录"/>
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${deploy.dir}"/>
        <mkdir dir="${package.dir}"/>
        <mkdir dir="${package.extract.dir}"/>
        <mkdir dir="${preverified.dir}"/>
        <mkdir dir="${preverified.noObfusedClass.dir}"/>
        <mkdir dir="${preverified.obfusedClass.dir}"/>
 
    </target>

    <target name="compile" depends="init" description="编译">
        <echo message="编译程序"/>
        <!--
        <javac debug="on" bootclasspath="${midp.lib.path}" classpath="${midp.lib.path};."
            srcdir="${src.dir}" destdir="${build.dir}"/>
        -->
        <javac debug="true" debuglevel="${debuglevel}" srcdir="${src.dir}" 
            destdir="${build.dir}" source="${source}" target="${target}" 
            encoding="UTF-8" >
            <bootclasspath path="${midp.lib.path}"/>
            <classpath>
                <fileset dir="${midp.lib.dir}" includes="*.jar"/>
            </classpath>
        </javac>
    </target>

    <target name="clean">
         <echo message="删除目录"/>
        <delete dir="${build.dir}"/>
        <delete dir="${deploy.dir}"/>
        <delete dir="${package.dir}"/>
        <delete dir="${preverified.dir}"/>
    </target>

    <target name="verifyForNoObfuscate" description="验证j2me的class,将验证后的class输出到${preverified.noObfusedClass.dir}">
        <echo message="验证生成的class,将验证后的class输出到${preverified.noObfusedClass.dir}"/>
        <exec executable="${preverify.bin}" searchpath="false">
            <arg line="-classpath ${midp.lib.path}"/>
            <arg line="-d ${preverified.noObfusedClass.dir}"/>
            <arg line="${build.dir}"/>
        </exec>
    </target>
    
    <target name="genManifest" description="根据模板属性文件的值生成Manifest文件">
        <echo message="根据模板属性文件的值生成Manifest文件"/>
        <!--
            使用${programName}替换掉属性文件GEN.properties中的@PROGRAMNAME@
        -->
        <replace file="GEN.properties" token="@PROGRAMNAME@" value="${programName}" />
        <!--
            使用GEN.properties文件中的属性值替换掉模板文件MANIFEST.tmp中的对应属性值,
            将替换后的数据复制到${src.dir}\MANIFEST.MF
        -->
       <copy file="MANIFEST.MF"
            tofile="${src.dir}\MANIFEST.MF">
           <filterset begintoken="@" endtoken="@" >
                <filtersfile file="GEN.properties" />
            </filterset>
        </copy>
        
    </target>

    <target name="package" description="将class打包,输出到${package.dir}">
        <echo message="将class打包,输出到${package.dir}"/>
        <jar basedir="${preverified.noObfusedClass.dir}"
             jarfile="${package.dir}\${programName}-noObfused.jar"
             manifest="${src.dir}\MANIFEST.MF" encoding="UTF-8"> 
            <fileset dir="${res.dir}" includes="**/*.png"/>
        </jar>
    </target>

    <target name="obfuscate" description="对打包后的jar文件进行混淆,然后解压缩至${package.extract.dir}">
        <echo message="对打包后的jar文件进行混淆,然后解压缩至${package.extract.dir}"/>
        <java fork="true" classname="proguard.ProGuard">
            <classpath path="${proguard.lib.dir}\proguard.jar"/>
            <arg line="-libraryjars ${midp.lib.path}"/>
            <arg line="-injar ${package.dir}\${programName}-noObfused.jar"/>
            <arg line="-outjar ${package.dir}\${programName}-obfused.jar"/>
            <!--保留MIDlet的类声明不被混淆-->
            <arg line="-keep 'public class * extends javax.microedition.midlet.MIDlet'"/>
            <!--打印被保留的类名-->
            <arg line="-printseeds"/>
        </java>
        <unjar src="${package.dir}\${programName}-obfused.jar"
            dest="${package.extract.dir}"
        />
    </target>

    <target name="verifyForObfuscate" description="验证被混淆的class,输出到${preverified.obfusedClass.dir}">
        <echo message="验证被混淆的class,输出到${preverified.obfusedClass.dir}"/>
        <exec executable="${preverify.bin}" searchpath="false">
            <arg line="-classpath ${midp.lib.path}"/>
            <arg line="-d ${preverified.obfusedClass.dir}"/>
            <arg line="${package.extract.dir}"/>
        </exec>
        <copy todir="${preverified.obfusedClass.dir}">
            <fileset dir="${package.extract.dir}" includes="**/*.png"/>
        </copy>
    </target>

    <target name="deploy" description="将经过验证的混淆后的class打包,部署在delpoy目录">
        <echo message="将经过验证的混淆后的class打包,部署在${deploy.dir}目录"/>
        <jar basedir="${preverified.obfusedClass.dir}" encoding="UTF-8" 
            jarfile="${deploy.dir}\${programName}${flag.value}.jar"
            manifest="${src.dir}\MANIFEST.MF"
        >
            <fileset dir="${preverified.obfusedClass.dir}" includes="**/*.class;*.png"/>
        </jar>
    </target>

    <target name="genJad" description="在${deploy.dir}目录生成JAD文件">
        <echo message="在${deploy.dir}目录生成JAD文件"/>
        <length file="${deploy.dir}\${programName}.jar" property="jarsize"/>
        <echo message="获得jar文件长度:${jarsize}"/>
        <replace file="GEN.properties" token="@JARSIZE@" value="${jarsize}" />
        <replace file="GEN.properties" token="@PROGRAMNAME@" value="${programName}" />
        <copy file="JAD.mod" tofile="${deploy.dir}\${programName}${flag.value}.jad">
            <filterset begintoken="@" endtoken="@" >
                <filtersfile file="GEN.properties"/>
            </filterset>
        </copy>
    </target>

    <target name="recoveryGenProperties" description="恢复被修改的GEN.properties">
        <echo message="恢复被修改的GEN.properties"/>
        <replace file="GEN.properties" token="MIDLET_NAME=${programName}" value="MIDLET_NAME=@PROGRAMNAME@" />
        <replace file="GEN.properties" token="MIDLET_JAR_URL=${programName}.jar" value="MIDLET_JAR_URL=@PROGRAMNAME@.jar" />
        <replace file="GEN.properties" token="MIDLET_JAR_SIZE=${jarsize}" value="MIDLET_JAR_SIZE=@JARSIZE@"
        />
    </target>
    <target name="end" depends="replaceJava,compile,verifyForNoObfuscate,genManifest,package,obfuscate,verifyForObfuscate,deploy,genJad,recoveryGenProperties"/>
</project>
补充:Java ,  J2ME
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,