跳至内容

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 国际许可协议进行许可。

评论区