Jocky提供了Eclipse的插件,從而能夠直接在Eclipse中使用Jocky。先下載一個Jocky for eclipse的插件,然后放到eclipse的plugin文件夾里,然后右鍵單擊項目,會看到Jocky的選項,Jocky與其它混淆編譯器最大的不同之處在于:它是直接從源碼上做文章,也就是說編譯過程本身就是一個混淆過程。
1. Jocky插件的安裝:
將Jocky插件安裝至Eclipse中非常簡單,只需要將eclipse/plugins/org.apusic.jocky_1.0.0目錄 copy 至 Eclipse的 plugins目錄即可;蛘咴贓clipse/links文件夾中,通過link方式指定Jocky的插件目錄。
2. 在Eclipse中使用Jocky:
在Eclipse中使用Jocky也非常簡單,任何一個Java工程,選中工程通過右鍵菜單,都可以出現(xiàn)Jocky的快捷菜單:
<Jocky在Eclipse中的右鍵菜單>
<Jocky在Eclipse中的屬性設(shè)置>事實上,在Eclipse中使用Jocky時,Jocky也是首先針對所選工程生成Ant的Build文件(默認名稱jocky_build.xml),然后再通過Ant完成混淆編譯。
以下是Jocky在Eclipse中自動生成的Ant Build 文件示例:<Jocky在Eclipse中自動生成的Ant腳本示例
1<project basedir="." default="build" name="jocky.example.jocky">
2<property name="jocky.jar" value="f:\EclipseWTP1.0.8\workspace_jdk5_apusicstudio\org.apusic.jocky\jocky.jar"></property>
3<property name="jocky.output.dir" value="jocky"></property>
4<property name="jocky.scramble.level" value="package"></property>
5<property name="target" value="1.4"></property>
6<path id="project.classpath">
7<pathelement location="bin"></pathelement>
8</path>
9<target name="init">
10<jocky jar="${jocky.jar}" level="${jocky.scramble.level}"></jocky>
11<mkdir dir="${jocky.output.dir}"></mkdir>
12<mkdir dir="${jocky.output.dir}/bin"></mkdir>
13</target>
14<target name="clean">
15<delete dir="${jocky.output.dir}/bin"></delete>
16<delete dir="${jocky.output.dir}"></delete>
17</target>
18<target depends="init" name="build">
19<echo message="${ant.project.name}: ${ant.file}"></echo>
20<jocky enable="true"></jocky>
21<javac destdir="${jocky.output.dir}/bin" target="${target}">
22<src path="src"></src>
23<classpath refid="project.classpath"></classpath>
24</javac>
25</target>
26</project>
注1:只支持Eclipse 3.1.1及以上版本。
注2:如果在Eclipse中找不到Jocky插件,請刪除 Eclipse安裝目錄/configuration/org.eclipse.update 文件夾 (Maybe an eclipse bug?)。
2.4 如何使用符號保留指令
1/**
2 * This class should preserve.
3 * @preserve
4 */
5public class Foo {
6 /**
7 * You can specify which field should be preserved.
8 * @preserve
9 */
10 private int x;
11
12 /**
13 * This field is not preserved.
14 */
15 private int y;
16
17 /**
18 * You can also preserve methods.
19 * @preserve
20 */
21 public void hello() {}
22
23 /**
24 * This method is not preserved.
25 */
26 private void collect() {}
27}
<使用preserved指令的示例>
如果沒有@preserve指令,則根據(jù)混淆級別及成員的訪問級別來確定符號是否保留。
對于類的符號保留指令可以附帶一個保留級別參數(shù),來控制類成員的符號保留,包括:
@preserve 僅對類名進行保留,類成員的保留根據(jù)-scramble命令行參數(shù)決定
@preserve public 保留所有public成員
@preserve protected 保留所有public和protected成員
@preserve package 保留所有public, protected, package private成員
@preserve private 保留所有成員
@preserve all 相當(dāng)于@preserve private
事實上,即便不加@preserve指令,Jocky對Java語言特有的一些private級別的方法不進行混淆,譬如,在序列化時有特殊作用的writeObject及readObject方法等。但筆者強烈建議: 針對這些有特殊含義不能夠被混淆的 private級別的方法或者字段,請以@preserve指令予以保護。
注1:建議通過IDE的JavaDoc設(shè)置,來輔助@preserve指令的書寫。