adb shell am start -d 启动应用之uri被*吃了

众所周知,am start 可以用来启动activity的,这里就不再详述了,但如果要带参数呢,那么我们也可以通过-e key value等方式来设置,基本也不会有什么问题。而且今天发生问题的是通过uri进行参数据设置时发现总是只有第一个参数有,后面的参数被吃了。。

这里啰嗦一句,-e key value在代码中对应的方式是intent.putExtra*的方式,而-d uri是通过intent.setData的方式,而接收方获取数据的代码自然也就不一样了,所以不要说干嘛不直接就是-e的方式来设置参数

回到主话题,这是通用的uri形式
scheme://host/pathPrefix?key=value&key2=value2&key3=value3
当我们在adb shell时,会很自然的 adb shell am start -n 包名/类名 -d uri
然后就出事了
在代码中我们只能接收到scheme://host/pathPrefix?key=value,后面的参数被吃了,其实在终端输入命令后,仔细看一下输出的日志就能发现输入的uri就是被截断的,所以很明显问题就是发生在终端,输入的源错了,后面自然也就错了
一开始的反应自然是检查下uri有没有错,但没有

接着联想到特殊字符

没错,还真有需要转义的字符&,这个是shell中的特殊字符。。。
表示后台运行,而在shell中转义字符为‘’或“”

即我们的命令要输成
adb shell am start -n 包名/类名 -d “scheme://host/pathPrefix?key=value&key2=value2&key3=value3“

adb shell am start -n 包名/类名 -d ‘scheme://host/pathPrefix?key=value&key2=value2&key3=value3’

也可以是
adb shell am start -n 包名/类名 -d scheme://host/pathPrefix?key=value’&’key2=value2’&’key3=value3

最后还有个一小区别adb shell 直接 拼接命令和adb shell 进入后再输入命令在不同的系统上是有区别的,adb shell 进入后自然是linux系统,but….adb shell 直接拼命令这个要看你的电脑系统了,mac 是unix 和window 自然有些不一样,但大部份命令还是没有问题的。

你可能感兴趣的:(Android,基础)