先是环境:在 windows 上用 VMware 安装了 ubuntu,用 ubuntu 运行终端。可以用 VMware 文件共享、网络文件共享、nginx、ftp 实现两个操作系统的文件共享
linux 主目录配置文件保存在 github:https://github.com/feix760/yuan
如果换一台电脑,我只需要 git clone --recursive myGithubPath 就可以拿到以前的配置文件
vim 的插件可以用 Bundle 来管理,只要在.vimrc 用 Plugin ‘XXX’ 指明需要的插件,随后用
1 2 |
:PluginInstall |
自动安装新插件
下面是我的 .vimrc 插件配置的部分,随后介绍各个插件的用途
Plugin ‘gmarik/Vundle.vim’
Bundle 插件管理插件
Plugin ‘vim-scripts/L9’
vim 基础库
Plugin ‘majutsushi/tagbar’
插件 taglist 的替代品,函数名称等的预览窗口,如果要预览 js,需要安装命令 jsctags
(?windows
用此标记 windows 可能无法支持)
Plugin ‘mattn/emmet-vim’
zen coding
Plugin ‘kien/ctrlp.vim’
使用 Ctrl+p 搜索文件
Plugin ‘scrooloose/nerdtree’
Plugin ‘ivalkeen/nerdtree-execute’
vim 内置文件目录树的替代品
Plugin ‘scrooloose/nerdcommenter’
注释代码
Plugin ‘godlygeek/tabular’
代码对齐
Plugin ‘MarcWeber/vim-addon-mw-utils’
Plugin ‘tomtom/tlib_vim’
Plugin ‘garbas/vim-snipmate’
snimate snippet 代码模板,sublime 里也有 snippet,但 vim 的更灵活强大,基本是脚本了。
Plugin ‘tpope/vim-fugitive’
Plugin ‘juneedahamed/svnj.vim’
git svn 插件,可以 diff, blame, log 等,下面是 diff (?windows
)
Plugin ‘yssl/QFEnter’
Qickfix 窗口里的快捷键
Plugin ‘feix760/autospace’
个人版 js 自动补全空格
Plugin ‘feix760/taboo.vim’
自定义 tab 标头
Plugin ‘Chiel92/vim-autoformat’
格式化代码,需要 shell 命令的支持 (?windows
)
Plugin ‘tpope/vim-repeat’
点命令 ( . 重复上一次修改) 的扩展
Plugin ‘tpope/vim-surround’
括号、引号、html 标签等的快速修改,比如:
‘name’ -> “name”
<a class="active" >XX</a> -> <div class="active" >XX</div>
强烈推荐《Vim 实用技巧》:
- chrome.webRequest.XXX 用于网络流量的统计监控、修改请求和响应
- chrome.proxy.XXX 用于代理的管理
抓包的时候偶尔会遇到返回的 json 串在 prevew 窗口不能显示成对象的形式,如下:
理想的:
这种情况是响应头 content-type 不正确造成的,可以使用 chrome.webRequest.onHeadersReceived.addListener() 修改响应头
相应的可以用 chrome.webRequest.onBeforeSendHeaders.addListener() 修改请求头
两个接口可以修改几乎所有的头,包括 cookie 相关的,因此可以实现一个 cookie 的管理
自定义请求/响应头的插件:
https://github.com/feix760/chrome_custom-headers
某个 tab cookie 独立的插件 (可以让浏览器登录多个账号):
https://github.com/feix760/Chrome_CookieSeparator
chrome.proxy.XXX 可以实现 SwitchySharp 的功能
chrome.webRequest.XXX 不能做到修改响应数据、host 映射等。虽然从安全的角度思考这是异想天开,但有自由访问文件系统的接口(需要用户 2 次确认这种权限),如果能做到真想把 fiddler 的功能集成到 chrome 里去
从 https://developer.chrome.com/devtools/docs/remote-debugging 我们可以知道在 android 4.4+可以通过在 apk 中使用下面的代码开启 webview 的 chrome 远程调试
1 2 |
WebView.setWebContentsDebuggingEnabled(<span class="keyword">true</span>); |
但我们开发中接触的 apk 往往是第三方的,没谁会为我们开启 webContentsDebuggingEnabled。而 Xposed 能强制做到这一点
Xposed
Xposed 能够勾住 (Hook) Android 应用程序对象的方法,实现 AOP,一个简单的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="keyword">public</span> <span class="keyword">class</span> WebViewHook <span class="keyword">implements</span> IXposedHookLoadPackage { <span class="comment">// handleLoadPackage 会在android加载每一个apk后执行</span> <span class="keyword">public</span> void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { <span class="comment">// 可以从lpparam中获取当前apk的名字</span> <span class="keyword">if</span> (! lpparam.packageName.equals(<span class="string">"com.tencent.mobileqq"</span>)) { <span class="keyword">return</span>; } XposedBridge.log(<span class="string">"WebViewHook handleLoadPackage: "</span> + lpparam.packageName); <span class="comment">// 勾住 WebView 所有的构造器</span> XposedBridge.hookAllConstructors(WebView.<span class="keyword">class</span>, <span class="keyword">new</span> XC_MethodHook() { @Override <span class="keyword">protected</span> void beforeHookedMethod(MethodHookParam param) throws Throwable { <span class="comment">// 打开webContentsDebuggingEnabled</span> XposedHelpers.callStaticMethod(WebView.<span class="keyword">class</span>, <span class="string">"setWebContentsDebuggingEnabled"</span>, <span class="keyword">true</span>); XposedBridge.log(<span class="string">"WebViewHook new WebView(): "</span> + packageName); } }); } } |
上面的代码可以为 QQ 打开 WebView 的 webContentsDebuggingEnabled
Xposed 工作原理可以参考文档: https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
没有详细的 API 页面, 因为 API 也就几个,可以查看源代码: https://github.com/rovo89/XposedBridge/tree/master/src/de/robv/android/xposed
馋图
拿来主义
1、需要 android 4.4+ Root 手机
2、安装 Xposed 框架
3、已开启 QQ WebView 的 Apk: webviewdebughook.Apk