Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Проблемы с обфускацией в IDEA


Автор: mamon4ik 10.1.2007, 15:10
Пытаюсь собрать обфускаченный мидлет через ant
Код

  <target name="obfuscate">
    <mkdir dir="${obfuscate.dir}"/>
    <proguard overloadaggressively="on"
              defaultpackage=""
              allowaccessmodification="on"
              printseeds="on"
              usemixedcaseclassnames="false">
      <injar file="${in_jar.name}"/>
      <outjar file="${obfuscate.dir}/${project.name}.jar"/>
      <libraryjar path="${midpapi.file};${cldcapi.file}${otherapi.file}"/>
      <keep access="public" extends="javax.microedition.midlet.MIDlet"/>
      <keepclasseswithmembernames>
        <method access="native"/>
      </keepclasseswithmembernames>
    </proguard>
  </target>

все переменные определены и перепроверены не один раз.
Тем не менее сборка оканчивается ошибкой:

Код

Output:

ProGuard, version 3.3
Reading program jar [C:\MyMidlet.jar]
Reading library jar [C:\WTK22\lib\midpapi20.jar]
Reading library jar [C:\WTK22\lib\cldcapi10.jar]
Note: duplicate definition of library class [com.sun.cldc.i18n.j2me.UTF_8_Reader] <- это, наверное, причина warninga - перед строкой - воскл знак в сером кружочке.

Ant build completed with one error one warning in 4s at 14:04:43

Больше ничего указывающего на ошибку(типа красных кружков) нет. Ругается именно на таск обфускации, убираю его - всё собирается нормально.

Верифицирую, разумеется ПОСЛЕ обфускации.

Может кто-нибудь помочь ?

Спасибо.


Кстати, когда создавал тему, внизу кнопки "Отредактировать сообщение" и "Предварительный просмотр", а кнопки "Создать тему" - нет.
Наверное этот режим как-то с редактированием сообщения пересекается.

Автор: W0LF 11.1.2007, 12:47
Он тебе говорит, что класс com.sun.cldc.i18n.j2me.UTF_8_Reader уже есть и его определение дублируется.
Он есть в midpapi20.jar и еще и в cldcapi10.jar

Автор: mamon4ik 15.1.2007, 11:53
Цитата(W0LF @ 11.1.2007,  12:47)
Он тебе говорит, что класс com.sun.cldc.i18n.j2me.UTF_8_Reader уже есть и его определение дублируется.
Он есть в midpapi20.jar и еще и в cldcapi10.jar

Спасибо, WOLF.

Попробовал убрать из libraryjar path сначала midpapi20.jar, затем cldcapi10.jar, но, очевидно, требуются они оба, потому что при попытке сбилдить антом, всё валиться стало гораздо демонстративнее, с кучей error ов.

Как же в таком случае строить таск для обфускации ?

Автор: W0LF 15.1.2007, 14:38
вот файл - build.xml
Код

<?xml version="1.0"?>

<project name="Game" default="build" basedir=".">

    <!-- Define the Wireless Toolkit home directory. Needed by the tasks. -->

    <property name="wtk.home" value="C:\WTK22\" />
    <property name="wtk.midp.version" value="2.0" />
    <property name="wtk.cldc.version" value="1.1" />
    <property name="wtk.java3d.enabled" value="true" />

    <!-- Define some additional properties for this project. Not required. -->

    <property name="midlet.name" value="Game" />
    <property name="midlet.home" value="E:\work\!Online\Game" />

    <!-- Define the tasks. -->

    <taskdef resource="antenna.properties"     
                 classpath="E:/install/Language/java/j2me/Antenna/antenna-bin-0.9.14.jar" /> 

        <target name="run">
        <wtkrun jadfile="${midlet.name}.jad" device="DefaultColorPhone" wait="true" />
    </target>

    <target name="build">

        <!-- Create a JAD file. -->
                <wtkjad jadfile="Game.jad"
                 jarfile="Game.jar"
                 name="Game"
                 vendor="WolF"
                 version="1.0.0"
            profile="MIDP-2.0"
        >

             <midlet name="Game" class="src.Main"/>

         </wtkjad>
        <mkdir dir="classes" />

        <!-- Compile everything, but don't preverify (yet). -->

        <wtkbuild srcdir="${midlet.home}/src" destdir="classes" preverify="false" />

        <!-- Package everything. Most of the necessary information is
             contained in the JAD file. Also preverify the result this
             time. To obfuscate everything, set the corresponding
             parameter to "true" (requires RetroGuard or ProGuard). The
             version parameter increments the MIDlet-Version by one. -->

        <wtkpackage jarfile="${midlet.name}.jar" jadfile="${midlet.name}.jad" profile="MIDP-2.0">

            <!-- Package our newly compiled classes and the
                 resources from the WTK's demo application. -->

            <fileset dir="classes" />
            <fileset dir="${midlet.home}/res" />

        </wtkpackage>
        
        <!--<wtkobfuscate jadfile="${midlet.name}.jad" jarfile="${midlet.name}.jar"/>
         -->
        <wtkpreverify jadfile="${midlet.name}.jad" jarfile="${midlet.name}.jar"/>    
        <copy file="${midlet.home}/${midlet.name}.jad" todir="${midlet.home}/dist/WTK22" />
        <copy file="${midlet.home}/${midlet.name}.jar" todir="${midlet.home}/dist/WTK22" />
        


        

    </target>
    
    <target name="clean">
        <delete failonerror="false" dir="dist" />
        <delete failonerror="false" dir="classes" />

    </target>

</project>

Добавишь этот файл в идею. 
Если нужна Антенна, то http://alexander.lonsky.googlepages.com/antenna-bin-0.9.14.jar

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)