使用 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/>
<jar/>
<jar/>
<jar/>
<jar/>
<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 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 default="MacCameraCaptureTest-obfuscated">
<property value="/Users/Dolphin/Develop/idea/PCCameraCaptureInteractivity/out/production/MacCameraCaptureTest"/>
<property value="/Users/Dolphin/Develop/idea/PCCameraCaptureInteractivity/out/artifacts/MacCameraCaptureTest_jar"/>
<property value="${out.jar.absolute.dir}/MacCameraCaptureTest.jar"/>
<property value="${out.jar.absolute.dir}/MacCameraCaptureTest-obfuscated.jar"/>
<target>
<taskdef classname="com.allatori.ant.ObfuscatorTask" classpath="allatori/allatori.jar"/>
<allatori config="config-allatori.xml"/>
</target>
<target>
<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 系统中。