使用 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. paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(二段式)

    1.Two always block style with combinational outputs(Good Style) 对应的代码如下: 2段式总结: (1)the combinational ...

  2. laravel连接数据库提示mysql_connect() :Connection refused...

    在.env配置文件中填写了正确的数据库连接配置的情况下连接还是出错了,明显提示的不是密码错误,那就看看端口吧, DB_HOST=127.0.0.1 DB_PORT= DB_DATABASE=test ...

  3. 【php】【趣味代码】对象引用的比较

    <?php $a = new stdClass(); $a->name = 'flint'; $b = $a ; $b->sex = 'man'; saveObject($b); f ...

  4. Yii2 基于rbac访问控制

    Yii2 是一款非常强大的PHP底层框架, 牛b的人都喜欢用它, 有时候你们可能会发现, Yii2 底层处理不是很好, 比如: 每次分页, yii底层都会多统计一次数据的总条数!  那只能说你对它还不 ...

  5. python能干什么?

    python能干什么? 网络爬虫 爬虫,指的是从互联网采集数据的程序脚本 . 爬天爬地爬空气 ,无聊的时候爬一爬吃鸡数据.b站评论,能得出很多有意思的结论.知乎有个很有意思的问题——"利用爬 ...

  6. Django之URL

    URL是用户请求路径与views视图处理函数的一个映射 简单的路由配置及实现 这里是pycharm编辑开发为例,新建的django项目,会在url.py下自动生成这样一段代码: from django ...

  7. 牛客练习赛22 C 简单瞎搞题

    //位运算 // & 都是1 才是 1 // | 都是0 才是0 // ^ 不一样才是1 #include <iostream> #include <cstdio> # ...

  8. Linux学习-Tarball 的管理与建议

    使用原始码管理软件所需要的基础软件 从原始码的说明我们晓得要制作一个 binary program 需要很多咚咚的呢!这包括底下这些基础的软件: gcc 或 cc 等 C 语言编译程序 (compil ...

  9. 树状数组 - BZOJ 1103 [POI2007]大都市

    bzoj 1103 [POI2007]大都市 描述 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员 Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景. ...

  10. 浅谈我所见的CSS命名风格

    在两年工作中,总结一下我所见的css命名风格. 1.单一class命名 .header { width: 500px; } .item { text-indent: 20%; } 优点:简单,渲染效率 ...