使用 IntelliJ IDEA 開發一般 Java 應用程序時通過 Allatori 進行代碼混淆非常容易配置,下面總結一下本人經驗,介紹一下配置方法。
首先在 IDEA 的 Module 所在硬盤目錄內創建一個名為 allatori 的子目錄,將 Allatori 自己的 jar 文件都復制到這個子目錄下。然後在 IDEA 的 Module 所在目錄內創建兩個 XML 文件,一個是 Allatori 自己的混淆配置文件,命名為 config-allatori.xml;另一個是用於 Ant 構建的配置文件,命名為 build-allatori.xml。首先看 config-allatori.xml 文件的內容,基本可以作為一個模板:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<jars>
<jar in="${artifact}" out="${artifact-obfuscated}"/>
</jars>
<classpath>
<jar name="lib/mysql-connector-java-5.1.30-bin.jar"/>
<jar name="lib/netty-all-4.0.18.Final.jar"/>
<jar name="../lib/jgoodies-common.jar"/>
<jar name="../lib/jgoodies-forms.jar"/>
<jar name="../lib/jna-platform.jar"/>
<jar name="../lib/jna.jar"/>
</classpath>
<keep-names>
<class template="class Launcher">
<field access="private+"/>
<method template="private+ *(**)"/>
</class>
<class template="interface MacCameraDataCallback">
<method template="private+ *(**)"/>
</class>
<class template="interface MacCameraErrorCallback">
<method template="private+ *(**)"/>
</class>
<class template="interface MacCameraCaptureNativeLibrary">
<method template="private+ *(**)"/>
</class>
</keep-names>
<property name="log-file" value="log.xml"/>
</config>
這裡我的 Module 中有標准 Java 類,也有接口。含有 main 方法的啟動類 Launcher 不應被混淆,接口也不應被混淆,因為涉及到 JNA 的本地方法映射調用,所以這裡顯示了如何在 Allatori 混淆配置中進行相應設置的方法。同時注意,由於我這個 Module 除了使用自己專有的第三方庫以外,還使用了 Module 所在項目的項目全局第三方庫,所以在上面的混淆配置的 <classpath> 小節部分可以看到必須指定准確的第三方庫相對或絕對路徑用於編譯混淆。因為開發一般 Java 應用程序,不必像 Android 應用程序那樣把第三方庫一同打進目標應用程序 jar 文件中,第三方庫的 jar 文件編譯後也是單獨存在的,所以混淆配置中不必指定第三方庫的類防止混淆。
下面再來看 build-allatori.xml 文件的內容,也可以作為一個模板:
<?xml version="1.0" encoding="UTF-8"?>
<project name="MacCameraCaptureTest-allatori" default="MacCameraCaptureTest-obfuscated">
<property name="out.classes.absolute.dir" value="/Users/Dolphin/Develop/idea/PCCameraCaptureInteractivity/out/production/MacCameraCaptureTest"/>
<property name="out.jar.absolute.dir" value="/Users/Dolphin/Develop/idea/PCCameraCaptureInteractivity/out/artifacts/MacCameraCaptureTest_jar"/>
<property name="artifact" value="${out.jar.absolute.dir}/MacCameraCaptureTest.jar"/>
<property name="artifact-obfuscated" value="${out.jar.absolute.dir}/MacCameraCaptureTest-obfuscated.jar"/>
<target name="MacCameraCaptureTest-obfuscated">
<taskdef name="allatori" classname="com.allatori.ant.ObfuscatorTask" classpath="allatori/allatori.jar"/>
<allatori config="config-allatori.xml"/>
</target>
<target name="MacCameraCaptureTest-clean">
<delete dir="${out.classes.absolute.dir}"/>
<delete dir="${out.jar.absolute.dir}"/>
</target>
</project>
這裡主要是注意,${out.classes.absolute.dir} 以及 ${out.classes.absolute.dir}-obfuscated 所定義的 IDEA 針對項目 Module 編譯產生的目標類文件以及 jar 文件所在路徑一定要准確。
然後我們就要將 build-allatori.xml 加入到 IDEA 的 Ant Build 系統中,如下圖所示:
點擊 IDEA 右上部分 Ant Build 那個按鈕,在彈出的 Dock 小窗口中點擊“+”按鈕,然後選擇 build-allatori.xml 文件即可將其加入到 IDEA 的 Ant Build 系統中。
接下來,我們進入到 IDEA 的 Project Structure 配置中,創建好 Module 的 Artifacts,在其 Artifacts 的具體屬性配置中,需要指定其 Post-processing 使用 build-allatori.xml 中定義的名為“你的module名字-obfuscated”的 target(我這裡是 MacCameraCaptureTest-obfuscated),如下圖所示:
注意紅色區域裡面,要把 Run Ant target 前面勾選中,然後點擊其右邊的“...”按鈕,會出現選擇窗口,你需要選擇 build-allatori.xml 中定義的名為“你的module名字-obfuscated”的 target(我這裡是 MacCameraCaptureTest-obfuscated)。
之後,點擊 IDEA 菜單“Build”->“Build Artifacts...”菜單項並選擇“Build”命令來進行 Module 的編譯構建即可。你會在 Module 的 Artifact 生成目錄下看到兩個 jar 文件,其中一個名為“你的Module名字-obfuscated.jar”的文件(我這裡是 MacCameraCaptureTest-obfuscated.jar),那就是混淆以後的 jar 文件了;不帶“-obfuscated”後綴的 jar 文件是沒有混淆的版本。
另外注意,如果需要清理 Module 已生成的類文件及 jar(包括混淆版本),可以通過 IDEA 的 Ant Build 執行 build-allatori.xml 中定義的“你的module名字-clean” target,就可以徹底清除它們。
使用IntelliJ IDEA 13搭建Android集成開發環境圖文教程 http://www.linuxidc.com/Linux/2015-09/123416.htm
IntelliJ IDEA 12 創建Web項目圖文詳細教程 http://www.linuxidc.com/Linux/2013-05/84213.htm
用IntelliJ IDEA開發Android程序圖文教程 http://www.linuxidc.com/Linux/2013-03/81471.htm
IntelliJ IDEA 12開發haXe NME應用配置指南 http://www.linuxidc.com/Linux/2013-01/77227.htm
IntelliJ IDEA運行Play Framework的test mode http://www.linuxidc.com/Linux/2013-07/87694.htm
Ubuntu 13.04 安裝IntelliJ IDEA 12 http://www.linuxidc.com/Linux/2013-11/93014.htm
IntelliJ IDEA 12創建Maven管理的Java Web項目(圖解) http://www.linuxidc.com/Linux/2014-04/99687p2.htm
IntelliJ IDEA 常用快捷鍵列表及技巧大全 http://www.linuxidc.com/Linux/2015-04/116398.htm
IntelliJ IDEA 的詳細介紹:請點這裡
IntelliJ IDEA 的下載地址:請點這裡