使用 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 开发一般 Java 应用程序时配置 Allatori 进行代码混淆的更多相关文章

  1. 在 NetBeans 中开发一般 Java 应用程序时配置 Allatori 进行代码混淆

    要在 NetBeans 中开发一般 Java 应用程序时利用 Allatori 进行代码混淆,设置比 IntelliJ IDEA 稍微简单一点,首先在 NetBeans 项目所在硬盘目录内创建一个名为 ...

  2. 使用 IntelliJ IDEA 开发 Android 应用程序时配置 Allatori 进行代码混淆

    IntelliJ IDEA 提供了非常强大的 Android 开发支持,就连 Google 官方推荐的 Android Studio 其实也是 IntelliJ IDEA 的一个 Android 开发 ...

  3. Java:程序不过是几行代码的集合

    程序不过是几行代码的集合.就像下面这样: public class Test { public static void main(String[] args) { System.out.println ...

  4. 在Intellij上开发项目发布到tomcat时,同一个局域网内的其他机子访问不到自己电脑上tomcat中的项目,只能本机访问

    在Intellij上开发项目发布到tomcat时,同一个局域网内的其他机子访问不到自己电脑上tomcat中的项目,只能本机访问 问题描述:在Intellij上开发项目发布到tomcat时,同一个局域网 ...

  5. 【Java】Web 服务编程技巧与窍门: 在 UDDI 注册中心为 Web 服务注册开发 UDDI Java 应用程序

    本技巧建立了一个使用统一描述.发现和集成 (Universal Description, Discovery, and Integration,UDDI) 来注册应用程序级消费的 Web 服务实例.作 ...

  6. 第一章 开发简单Java应用程序

    1. 什么是程序?     程序一词来自生活,通常指完成某些事务的一种既定方式和过程(一组有序指令的集合). 2. Java的三个领域? Java SE:java技术核心(指桌面应用程序)如:QQ.百 ...

  7. Java项目源码为什么要做代码混淆(解释的很好)

    代码混淆,是将计算机程序的代码转换成一种功能上等价,但是难于阅读和理解的形式的行为.代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码.执行代码混淆的程序被称作代码混淆器.目前已经存在许多种 ...

  8. delphiXE开发蓝牙BLE4.0程序时遇到的notification问题

    IDE环境delphiXE8 蓝牙硬件ST17H26 service:0xfee7 chareter:0xfec9 const u16 my_OEMServiceUUID=0xfee7;const u ...

  9. android开发之java JDK环境变量配置的信息代码 附详细教程。

    java环境变量配置: [用户变量]class_path    .;%JAVA_HOME%\lib\tools;%JAVA_HOME%\jre PATH           ;%JAVA_HOME%\ ...

随机推荐

  1. Bzoj 1131[POI2008]STA-Station (树形DP)

    Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...

  2. IE浏览器缓存问题解决方法(非常严重)

    IE浏览器缓存问题解决方法整理 一.IE浏览器缓存的内容分析: IE浏览器会缓存网页中的GET和XHR的内容,并且在IE浏览器中如果请求方式是get方式的话,IE浏览器会进行识别,如果该get请求的u ...

  3. 快速排序和快速选择(quickSort and quickSelect)算法

    排序算法:快速排序(quicksort)递归与非递归算法 TopK问题:快速选择(quickSelect)算法 import java.util.*; import java.lang.*; publ ...

  4. 关于上传文件 非ajax提交 得到后台数据问题

    <form name="configForm" id="configForm" method="post" action=" ...

  5. python3.7 文件操作

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 文件操作 # r 只读,默认打开方式,当文件不存在时会报错 # ...

  6. micrium ucprobe使用笔记

    前段时间在学习ucos-iii的时候,用到了micrium ucprobe,发现在调试的时候,很方便,可以直观的看到任务的运行使用情况,全局变量的值变化等,当然详细的可以参考官方文档,也可以参考网上的 ...

  7. BFS、模拟:UVa1589/POJ4001/hdu4121-Xiangqi

    Xiangqi Xiangqi is one of the most popular two-player board games in China. The game represents a ba ...

  8. JQuery根据字母检索元素并导航到指定位置

    介绍:类似于实现ios通讯录中右侧字母,快速导航到联系人的效果,如图: Html代码如下,分别是字母和港星名字的排序: <input type="text" id=" ...

  9. nmap命令扫描存活主机

    1.ping扫描:扫描192.168.0.0/24网段上有哪些主机是存活的:   [root@laolinux ~]# nmap -sP 192.168.0.0/24 Starting Nmap 4. ...

  10. poj1523赤裸裸的割点

    这题真是没什么好说的...赤裸裸的求割点直接模板上 #include<cstdio> #include<cstring> #include<iostream> #i ...