背景
有时候需要把手机上文本分享到电脑中,或者把某些文本复制到手机中,通常需要借助通信App来完成,或者通过编写一个文件,写入内容后通过adb push到手机,手机再打开文件获取内容。如果手机是一个测试设备,一般不会安装通信软件,要快速传递简单文本信息就非常麻烦。
作为一个开发者,手机基本上都是连接着电脑,所以推荐adb工具来完成上述操作。
工具推荐adb-clip
Clipboard access via adb shell. Supports Android 10-16.
地址:adb-clip
https://github.com/polygraphene/adb-clip
如何使用
adb push clip.jar clip /data/local/tmp
adb shell chmod 755 /data/local/tmp/clip
# Get clipboard
adb shell /data/local/tmp/clip
# Set clipboard
adb shell "/data/local/tmp/clip 'Content here'"
首先到上述地址中进入release下载2个文件,一个clip,另一个clip.jar
下载完成后把文件推送到手机。直接复制上面命令完成。
按顺序执行一次,观察手机输入法是否提示有文本复制了粘贴板,或者手机复制文本后,电脑执行命令获取粘贴板数据。
到了这里已经解决了我们的需求,但是,当我需要获取手机粘贴板的数据时候还行,因为只需要执行
adb shell /data/local/tmp/clip
使用一个终端独立的tab重复执行命令即可。又或者编写一个alias,执行别名即可。
这是我的别名
alias getcb='adb shell /data/local/tmp/clip'
在终端输入getcb回车,就可以拿到手机粘贴板数据.

解决频繁写入
如果我写入某些数据到手机粘贴板,没一次都需要
adb shell "/data/local/tmp/clip '我输入的内容'"
每次替换这里的文本,整个输入过程需要优化。
当前我的系统macOS,Linux系统一样的。
在电脑中任意目录下创建一个sh文件,例如,adbclip.sh 内容是
#!/usr/bin/env bash
# Wrapper to send text (with spaces/quotes) to /data/local/tmp/clip via adb.
if [ $# -eq 0 ]; then
echo "用法: $(basename "$0") <文本>" >&2
exit 1
fi
content="$*"
# 使用 bash 的 %q 生成可被 /system/bin/sh 解析的安全参数(转义空格、单引号等)
escaped=$(printf %q "$content")
adb shell "/data/local/tmp/clip $escaped"
文件保存后给权限
chmod a+x adbclip.sh
记录下来文件的绝对路径然后编写alias
# 文本写入到系统粘贴板
alias cb='/Users/hello/android/shell/adbclip.sh'
更新环境变量后在终端可以这样使用 
cb "I don't like you."
cb "是我 的信息"
cb hhhhhhh
必须使用""包裹,这样支持空格和英文''符号了。
如果简单的无空格的字符串直接忽略""
