certes mais comme je suis lent à la comprenote: le temps de trouver l'outil, de le télécharger, de l'installer, de comprendre comment ça devrait fonctionner .... j'ai eu le temps d'écrire 3 scripts shell ( à mon age on ne se refait pas! :mrgreen:)
Version imprimable
Pareil pour moi s'il faut regarder comment faire ces makefiles ;) (quoique, j'avoue que tu m'as donné envie de jeter un oeil).
Peut etre que proguard ne marche pas sur mac. En tous cas, sous windows, je n'ai pas eu de probleme. Quand j'ai eu des warnings, ils se sont tous averes reels. Tu as mis quoi comme librairie ? Seulement rt.jar ?
Bonjour,
je me suis donc décidé à regarder ce que fait yGuard.
J'ai commencé par essayer de supprimer tout ce qui est inutile, mais le souci, c'est que ça supprime un peu trop :
En fait, il ne me reste que les classes les dossiers que j'ai spécifié :-(Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <project name="project" default="yguard" basedir="."> <target name="yguard"> <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="Packages/yguard-2.4/lib/yguard.jar"/> <yguard> <inoutpair in="firetiti.jar" out="firetiti_shrinked.jar"/> <shrink> <keep> <class> <patternset> <include name="patternRecognition.textures.glzm.glszm.*"/> <include name="patternRecognition.textures.glzm.glolzm.*"/> </patternset> </class> </keep> </shrink> </yguard> </target> </project>
Je voulais lui dire de garder tout ce que ces classes utilisent.
Quelqu'un pourrait il m'aider svp ?
Euh... en fait même les classes sont vides : toutes les méthodes ont été supprimées.
je viens de faire des tests et j'arrive aux même résultats. Apparement, soit il garde tout mais vire les annotations / info de debug inutiles. Soit tu lui fait la liste des classes à garder mais il ne guarde que celles là. Il est incapable de faire l'analyse.
Je viens de lancer ça:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 <project name="project" default="yguard" basedir="."> <target depends="jar" name="yguard"> <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="libs/yguard.jar"/> <yguard> <inoutpair in="firetiti.jar" out="firetiti_shrinked.jar"/> <shrink> <keep> <class> <patternset> <include name="mon.paquet.MonMain"/> </patternset> </class> </keep> </shrink> </yguard> </target> <target name="init"> <property name="project_name" value="DemoProject"/> <property name="srcDir" value="src"/> <property name="classDir" value="classes"/> <property name="jar" value="firetiti.jar"/> <property name="renamelog" value="${project_name}_renamelog.xml"/> <property name="shrinklog" value="${project_name}_shrinklog.xml"/> <mkdir dir="${classDir}" /> </target> <!-- compile --> <target name="compile" depends="init"> <javac srcdir="${srcDir}" includes="**/*.java" destdir="${classDir}"> </javac> </target> <!-- create .jar --> <target name="jar" depends="compile"> <jar jarfile="${jar}" basedir="${classDir}" includes="**"> <manifest> <attribute name="Main-Class" value="mon.paquet.MonMain"/> </manifest> </jar> </target> </project>
et tout ce qu'il me guarde, c'est MonMain, sans méthode. Aucune des classes annexe.
Pour qu'il explore, faut lui filer les méthodes point de départ:
et là j'ai le bon jar qui marche avec les classes inutiles supprimées:)Code:
1
2
3
4
5 <shrink> <keep> <method name="void main(java.lang.String[])" class="mon.paquet.MonMain" /> </keep> </shrink>
Code:
1
2
3 [shrink] size before: 1 KB, size after: 1 KB. [shrink] removed 1 classes, 2 methods, 0 fields, 0 resources. [shrink] 3 classes remaining of 4 total.
Merci pour ces précisions, mais malheureusement cela ne fonction pas chez moi :-(
Raison principale : je n'ai aucune méthode Main dans les classes que je souhaites garder.
J'ai essayé de modifier le code pour pointer les méthodes principales qui seront appelées, mais apparemment ça ne gère pas les '*' :
Et ça ne fonctionne pas :cry:Code:
1
2<method name="*FillMatrix(*)" class="patternRecognition.textures.glzm.glszm.*"/>
J'ai réussi à faire à peu près ce que je voulais en utilisant ce code :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <project name="project" default="yguard" basedir="."> <target name="yguard"> <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="../lib/yguard.jar"/> <yguard> <inoutpair in="../../../firetiti.jar" out="tmp.jar"/> <shrink> <keep> <class classes="public" methods="public" fields="public"> <patternset> <!-- liste des classes à préserver/--> </patternset> </class> </keep> </shrink> </yguard> <yguard> <inoutpair in="tmp.jar" out="../../../firetiti_lite.jar"/> <rename> <keep> <class classes="public" methods="public" fields="public"> <patternset> <!-- liste des classes à préserver/--> </patternset> </class> </keep> </rename> </yguard> </target> </project>
Seulement, je dois mettre deux fois exactement la même liste de classes dans les <includes>.
Y aurait il un moyen de mettre tout cela dans une variable que l'on appellerait où il faudrait ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14<shrink> <keep> <class classes="public" methods="public" fields="public"> <patternset id="myfiles"> <!-- liste des classes à préserver/--> </patternset> </class> ... <rename> <keep> <class classes="public" methods="public" fields="public"> <patternset refid="myfiles"/> </class>
Ca marche super bien !
Une fois de plus... MERCI :ccool: :zoubi: