俗话说,工欲善其事必先利其器。好用的开发工具,虽然不会直接改善我们写的代码,但是对于效率的提高和提高舒适度还是很有帮助的。本文意在提供一些不是非常普遍使用,但是对于效率提升可能非常有用的工具。话不多说,开始正文!

剪贴板工具 —— Clipy

剪贴板工具实在太实用了,不过似乎大部分程序员都没有用上剪贴板工具。而 Clipy 是一款很合适的剪贴板工具,以至于我想起它时,直接将它插到最前面,并且序号编为 0。Clipy 是一个开源的剪贴板工具,简洁不闹心,复制的图片和文本都可以管理,用起来很爽。

oh-my-zsh

这是个终端加强工具,macOS 和 Linux 都可用,把默认 shell 从 bash 改为 zsh,然后再加强一下。我只用的 oh-my-zsh 的 3 个 features,但这 3 个都是很有吸引力的。

第一、自带识别 git 项目目录的功能,直接显示分支名、有无未提交的本地修改;

第二、cd 时,直接不停的按 tab,指导选中了你想要的目录,然后回车,就可以进入想进入的目标,减少输入目录名前几个字母的劳累。

第三、这是个 killer feature,在终端输入任何几个字符,按向上的箭头,就可列出以这些字符开头的所有历史命令,这样很多需重复使用的命令、很久忽然想起需要再次使用的命令的使用方便了非常多,比如忽然想起 10 天前,使用 sed 命令搞了个事情,但是 sed 命令你懂的,压根记不住用法,怎么办?直接终端输入 sed 然后按向上箭头,立马调出 sed 开头的历史命令。

local Maven 仓库

自打谷歌一手将 Android 的构建工具切换到 Gradle 后,远程依赖变为用由 Gradle 配置从 Maven 仓库获取依赖。而除了 Jcenter、mavenCentral、Google 这样最常见 3 个公开 Maven 仓库外,现在很多公司内部会开发一些 SDK 或者工具包之类的,然后作为依赖放在公司内部的私有 Maven 仓库中,提供给公司内部使用。

问题来了,对于普通的开发者来说,有时候需要修改某个依赖的源代码并加以验证,但是又不想把修改后的代码马上就构建一个新版本的依赖传输到公司的 Maven 仓库。毕竟,天晓得自己要改多少次,如果一直往公司 Maven 仓库推,被别人看到了好像会感觉自己很菜的样子 ?。这时候,如果有一个本地的 Maven 仓库,那先传到本地 Maven 仓库,然后再从本地仓库获取依赖,就可以避免这个问题了,特别是对于一些文件比较大的依赖,这样速度也会更快。

这里说的 local Maven 仓库,不是 Gradle 中使用 mavenLocal() 来声明的那个仓库 (通常位于 ~/.m2/repository) 中,而是指自己在个人电脑上搭建一个 Maven 仓库,就和远程仓库一样,只不过域名使用 localhost 来访问即可。

方法其实比较简单,比如使用 Nexus OSS Maven 的话,在 macOS 系统上简直不要太容易,直接 brew install nexus,然后再 nexus start 就 OK了,此时在浏览器上面打开 http://localhost:8081/nexus 就可以开始登录了,初始用户名和密码分别是 admin 和 admin123,登录之后,里面已经有了一些 repository 了,如下图所示:

我常用的就是上面 Snapshots 这个 repository,专门用来托管 SNAPSHOT 类型的依赖,关于 SNAPSHOT 类型的依赖,我会写一篇更全面详细的文章来讲怎么使用。

OK,现在就可以在向本地的 Maven 仓库传依赖包并拉取使用了。其实,局域网内其他同事也是可以访问这个 Maven 仓库的,比如 http://localhost:8081/nexus/content/repositories/snapshots/ 这个仓库,别的同事要访问我这个 snapshot 仓库的话,只需要他把 localhost 换成我的私有 IP 地址即可。

Python

为什么把 Python 列出来呢?因为其实 Python 入门是非常简单的,再加上这年头,不了解一下 Python 都不好意思说自己是程序员。而入门后,可以帮我们做点事情,比如下图中,表达式计算,进制转换:

其实 Python 可以做的事很多,通过引入 Python 自带的包或者第三方库的包,Python 几乎无所不能。举个例子,去年微信跳一跳小游戏刚出来时,我看这个游戏非常简单,我就想,能不能用 Python 做个自动化脚本来跳呢?当然可以!其实原理也很简单,对于每一跳,可以分为若干步:截图、分析图片得出需要跳跃的距离、根据距离来模拟一个长按事件。这样的三个步骤对于 Android 设备是很容易实现的。所以思路就是,使用 Python 调用 adb 工具来截图、pull 截图到电脑中;然后使用 Python 的照片处理库来分析照片的像素,找到跳的那个东西的位置和下一个方块的位置,这样就知道需要跳跃的距离了;调用 adb 模拟一个长按屏幕的事件,长按的时间和需要跳跃的距离成正比,至于这个比值系数,摸索几次测试一下就可以了。详见我的博客 Python 也能玩跳一跳小游戏

我改进过的 JD-GUI

恬不知耻的推荐一下我更改过的 JD-GUIJD-GUI 本来是一个开源项目,但是已经3年没有维护了。两年前,当时因为工作需要,我要频繁的解压 apk,把 dex 文件转成 jar,然后再用 JD-GUI 反编译查看代码注入效果,所以我就想,这么三个步骤能不能一步搞定。于是经过一个周末的努力,我小改了一下 JD-GUI,使其支持直接拖入 apk 文件,然后自动解压,自动调用 apktool 来将 dex 转成 jar 文件,然后再交给原 JD-GUI 反编译。PS:我非常贴心的提供了 macOS、Windows、Linux 三个平台的 binary 包。

the Unarchiver for macOS

macOS 自带的解压工具比较弱鸡,比如 jar 文件无法解压,一些别的压缩包解压时也会出幺蛾子。而这款 the Unarchiver for macOS 体积不大,简洁却可以应付几乎所有的解压场景,还能提供选择 charset 的机会,从而解压某些压缩包时避免文件名乱码。

USTC Mirror

在此推荐一下中国科大开源镜像,这份镜像可以使得在国内访问很多开源软件的速度飞起来。

比如给 pip 设置代理,可以让 pip 下载 Python 扩展包的速度快得飞起。

再比如使用中国科大的 AOSP 镜像,获取 AOSP 项目的源码 (几十 GB 大小) 的速度将要加快很多,如果不使用代理,那么从 Google 官方同步 AOSP 代码,其难度你懂的。

再再比如,非常流行的 Homebrew,是 macOS 平台上使用命令行管理软件包及它们的依赖关系的工具,好比是 Linux 的包管理系统。此外 Homebrew 使用 cask tap 甚至还可以安装 Sublime text,Chrome 等许多的 GUI 软件,并自动建立软链接链接到 GUI 的软件的可执行文件,比如 Sublime text,使用 Homebrew 安装后,就可以在命令行使用 subl 即可打开 Sublime text 了。扯远了,Homebrew 同样存在在国内下载软件速度慢的问题,而同样,中国科大镜像提供了 Homebrew 镜像,能让绝大部分包的下载速度快起来。

最后,先对 USTC Mirror 的维护者表示感谢。然后,我想说这个镜像的内容非常多,绝大部分我也不了解,也就是还有很多可以深入探索的东西。