如何解压Chrome插件包

Chrome 插件由目录组织,里面包含各种部件文件,分发不是很方便。为此,Chrome 支持将整个插件目录打包成一个 crx 文件,这就是所谓的 Chrome 插件包。

如果我们手头有一个 crx 插件包,想要知道插件的设计细节,有办法将它解开吗?Chrome 安装 crx 插件包,应该也会先将它解开,再注册插件目录。

因此,我们可以先将 crx 插件包安装到 Chrome ,然后找到安装位置一探究竟。Chrome 插件的安装位置通常是固定的,但不同操作系统略有差异:

操作系统 插件安装位置
macOS ~/Library/Application Support/Google/Chrome/Default/Extensions

macOS 为例,插件安装路径中有很多以 ID 命名的目录,这就是当前安装的插件:

1
2
3
4
5
$ ls ~/Library/Application\ Support/Google/Chrome/Default/Extensions
Temp                              bmihblnpomgpjkfddepdpdafhhepdbek  fngmhnnpilhplaeedifhccceomclgfbg  lecdifefmmfjnjjinhaennhdlmcaeeeb  pflgjjogbmmcmfhfcnlohagkablhbpmg
adelhekhakakocomdfejiipdnaadiiib  dbepggeogbaibhgnhhndojpepiihcmeb  ghbmnnjooekpmoecnnnilnnbdlolhkhi  mfiddfehmfdojjfdpfngagldgaaafcfo  pnjaodmkngahhkoihejjehlcdlnohgmp
aeblfdkhhhdcdjpifhhbdiojplfjncoa  djflhoibgkdhkhhcedjiklpkjnoahfmg  iiooodelglhkcpgbajoejffhijaclcdg  nmmhkkegccagdldgiimedpiccmgmieda
bhlhnicpbhignbdhedgjhgdocnmhomnp  fmkadmapgofadopljbjfkapdkoienihi  jicmnjcngcnfhgfggbdhlbjpcbadimaj  padekgcemlokbadohgkifijomclgjgif

Chrome 插件管理找到插件的 ID ,就可以在安装目录中找到对应的插件目录。

话说回来,为了了解插件的设计细节,就将插件安装一遍,未免太小题大做了。那么,有办法直接将 crx 插件包文件解开,还原出插件目录吗?

将文件或目录打包成一个压缩包,是一种很常见的需求,有很多技术可以做到,比如:tarrarzip 等等。可以大胆猜测 Chrome 一定也是采用某种常用的打包技术,不太可能自己开发一种新的。

那么,问题就转变成:如何确定 crx 插件包的打包格式?

其实,作为一个粗暴的工程师,我才懒得理它是什么打包格式,我一个个试不行吗?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 拿SwitchyOmega这个插件来实验
$ ls
SwitchyOmega_Chromium.crx

# 二话不说,直接把它当成tar格式来解
$ tar -xf SwitchyOmega_Chromium.crx

# 成功了!
$ ls
AUTHORS  COPYING  SwitchyOmega_Chromium.crx  _locales  _metadata  background.html  css  img  js  lib  manifest.json  options.html  partials  popup  popup.html

请注意,最好在一个空目录里面执行 tar 命令。因为 crx 插件包直接打包插件目录里的各种文件,tar 默认直接将它们解开到当前目录,跟已有的文件混在一起。

这顿操作是不是猛如虎?为什么我会先试 tar ,一次命中呢?其实全凭感觉,tarUnix/Linux 下最常见的打包工具,tar 应该是每个 Linux 工程师都非常熟悉的命令,自然拿它来试。

看上去,笔者跟 Chrome 工程师是同道之人,熟悉彼此的套路,哈哈!万一 Chrome 工程师不按套路出牌也不打紧,我一个个试呗。只要不是用私有格式打包,最终一定可以拿下!

Chrome插件开发】系列文章首发于公众号【小菜学编程】,敬请关注:

【Chrome插件开发】系列文章首发于公众号【小菜学编程】,敬请关注: