跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

为 Charles 套上扁平化皮肤

Charles 是什么

一个中间人代理软件,可以用来监听两个网络设备之间的通信(需要客户端主动连接代理)。

软件默认使用 Java 自带的主题,因此用「现代」的眼光看来会比较丑。

Charles 默认界面

外挂第三方皮肤 (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 不适用。请等待更新或自行调整脚本…

Charles 打上扁平皮肤后在 EndeavourOS 下的截图

外挂第三方皮肤 (Windows)

Windows 的情况有些不一样,因为它的启动程序是 EXE 文件,而且不接受那些 swing 参数的指定。

没辙了,只好去魔改一番。

  1. 下载并安装完整版的 JDK,例如 Adoptium JDK 11。这是因为 Charles 自带的 JDK 缺东西…
  2. 记住他的路径,默认应该是
    C:\Program Files\Eclipse Adoptium\jdk-11.0.15.10-hotspot\
  3. 下载最新的 CharlesFlatLAF自己编译一份,放入 Charles.jar 所在的目录,即 Charles 安装目录下的 lib 目录;
  4. 修改配置文件 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.

然后继续使用原来的快捷方式进行启动即可。

Windows 下打上平坦皮肤补丁后的截图

后记

有人可能发现了,这个主题和 zaproxy 的默认界面长得一模一样。

其实我就是被 Charles 劝退去查找替代品然后看到 zaproxy 的界面,可惜布局调整不是很灵活。

但我想都是 Java 做的,Charles 不可能说用不了这套界面。于是恶补了下 swing 相关的内容,最后糊了个 javaagent 出来。

后再在 Linux 下做实验的时候发现不需要 agent 也可以达成效果,但在 Win 下却始终改不了… 只好继续魔改了。


  1. 参见 AUR 使用者仓库上关于字体渲染参数的说明。 ↩︎

知识共享许可协议 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

评论区