为 Charles 套上扁平化皮肤
- 中
- en
Charles 是什么 #
一个中间人代理软件,可以用来监听两个网络设备之间的通信(需要客户端主动连接代理)。
软件默认使用 Java 自带的主题,因此用「现代」的眼光看来会比较丑。
外挂第三方皮肤 (Arch Linux) #
首先你需要下载一份 FlatLAF 主题依赖:
sudo mkdir -p /opt/charles_flatlaf
sudo wget -O /opt/charles_flatlaf/flatlaf-2.3.jar \
'https://search.maven.org/remotecontent?filepath=com/formdev/flatlaf/2.3/flatlaf-2.3.jar'
然后写出启动文件(如果和你的环境不一致的话要在这里改):
sudo tee /opt/charles_flatlaf/launch_charles <<'EOF'
#!/bin/sh
# 设定环境
JAVA="java"
CHARLES_LIB="/usr/share/java/charles"
THEME="com.formdev.flatlaf.FlatLightLaf"
exec "$JAVA" $OPTS \
-Xmx1024M \
-Dawt.useSystemAAFontSettings=on \
-Dswing.aatext=true \
-Dswing.defaultlaf="$THEME" \
-Dswing.crossplatformlaf="$THEME" \
-Dcharles.config="${XDG_CONFIG_HOME:-~/.config/charles}/.charles.config" \
-Djava.library.path="$CHARLES_LIB" \
-classpath "/opt/charles_flatlaf/flatlaf-2.3.jar:${CHARLES_LIB}/charles.jar" \
com.xk72.charles.gui.MainWithClassLoader \
"$@"
EOF
再然后便是在优先级更高的 $PATH
路径加上我们的启动器:
sudo chmod a+x /opt/charles_flatlaf/launch_charles
sudo ln -s /opt/charles_flatlaf/launch_charles /usr/local/bin/charles
若是需要卸载,删除下述文件即可:
sudo rm -rf "/opt/charles_flatlaf/"
sudo rm "/usr/local/bin/charles"
※ 这些参数参考了 AUR 上的评论1。
※ Ubuntu 不适用。请等待更新或自行调整脚本…
外挂第三方皮肤 (Windows) #
Windows 的情况有些不一样,因为它的启动程序是 EXE 文件,而且不接受那些 swing 参数的指定。
没辙了,只好去魔改一番。
- 下载并安装完整版的 JDK,例如 Adoptium JDK 11。这是因为 Charles 自带的 JDK 缺东西…
- 记住他的路径,默认应该是
C:\Program Files\Eclipse Adoptium\jdk-11.0.15.10-hotspot\
- 下载最新的 CharlesFlatLAF 或自己编译一份,放入
Charles.jar
所在的目录,即Charles
安装目录下的lib
目录; - 修改配置文件
Charles.ini
:- 首先备份一份该文件,若是改坏了至少还能还原;
- 在
classpath.1
下方添加一行:
classpath.2=lib/charles_flatlaf-1.0-SNAPSHOT-jar-with-dependencies.jar
- 将
main.class
行替换为:
main.class=uk.jixun.charles.theme.Main
- 在
vmarg.4
下方添加一行:
vmarg.5=-javaagent=lib/charles_flatlaf-1.0-SNAPSHOT-jar-with-dependencies.jar
- 将
vm.location
行替换为:
vm.location=<JDK 安装目录>\bin\server\jvm.dll
最后的 Charles.ini
看起来像这样:
working.directory=.
classpath.1=lib/charles.jar
classpath.2=lib/CharlesFlatLAF-1.0-SNAPSHOT-jar-with-dependencies.jar
main.class=uk.jixun.charles.theme.Main
vm.version.min=11
vm.location=C:\Program Files\Eclipse Adoptium\jdk-11.0.15.10-hotspot\bin\server\jvm.dll
vmarg.1=-Dsun.java2d.d3d=false
vmarg.2=-Djava.net.preferIPv4Stack=false
vmarg.3=-Djava.net.preferIPv6Addresses=true
vmarg.4=-Djava.library.path=lib
vmarg.5=-javaagent:lib/CharlesFlatLAF-1.0-SNAPSHOT-jar-with-dependencies.jar
dde.enabled=true
dde.class=com.xk72.charles.win32.Win32DDEManager
dde.server.name=Charles
dde.topic=System
single.instance=dde
log.level=warning
[ErrorMessages]
java.not.found=The bundled Java installation was not found. Please uninstall and reinstall Charles.
java.failed=The bundled Java installation is broken. Please uninstall and reinstall Charles.
然后继续使用原来的快捷方式进行启动即可。
后记 #
有人可能发现了,这个主题和 zaproxy 的默认界面长得一模一样。
其实我就是被 Charles 劝退去查找替代品然后看到 zaproxy 的界面,可惜布局调整不是很灵活。
但我想都是 Java 做的,Charles 不可能说用不了这套界面。于是恶补了下 swing
相关的内容,最后糊了个 javaagent 出来。
后再在 Linux 下做实验的时候发现不需要 agent 也可以达成效果,但在 Win 下却始终改不了… 只好继续魔改了。