adb shell 传json给android service
背景
mac m1笔记本
service是intentService
java书写的
问题(adb传参为json,但是接收到的数据不是json):
我的传参数命令为:
adb shell am start-foreground-service -n "com.example.myservice/com.example.myservice.MyIntentService" -e 'myvar' '{"resource":"rear","position":0}'
但是,android中接到的参数为

只接收到一点数据,这是怎么回事??
解决方式(注意单引号呀)
正确姿势为:
adb shell am start-foreground-service -n "com.example.myservice/com.example.myservice.MyIntentService" -e 'myvar' '\{\"resource\":\"rear\"\,\"position\":\"1\"\}'
或
adb shell am start-foreground-service -n "com.example.myservice/com.example.myservice.MyIntentService" -e myvar '"{\"resource\":\"rear\",\"position\":\"1\"}"'
以上两个命令在wondows电脑上不太行
那么接收到的数据才是
{"resource":"rear","position":"1"}

代码书写方式(windows和mac都可以)
func execAdb(param string) string {
fmt.Println("param--", param)
jsondata, err := json.Marshal(param)
if err != nil {
return fmt.Sprintf("marshal err: %s.....\n", err.Error())
}
jsonstring := string(jsondata)
fmt.Println("jsonstring--", jsonstring)
shellCmd := fmt.Sprintf("adb shell am start-foreground-service -n \"com.example.myservice/com.example.myservice.MyIntentService\" -e myvar '%s'", jsonstring)
fmt.Println("shell cmd----", shellCmd)
cmd := exec.Command("sh", "-c", shellCmd)
stderr, err := cmd.StderrPipe()
if err != nil {
return fmt.Sprintf("StderrPipe err: %s.....\n", err.Error())
}
stdout, err := cmd.StdoutPipe()
if err != nil {
return fmt.Sprintf("StdoutPipe err: %s.....\n", err.Error())
}
if err := cmd.Start(); err != nil {
return fmt.Sprintf("Error starting command: %s......\n", err.Error())
}
outData, err := ioutil.ReadAll(stdout)
if err != nil {
return fmt.Sprintf("ReadAll stdout err: %s.....\n", err.Error())
} else {
if strings.Contains(string(outData), "Error") {
return fmt.Sprintf("stdout contains err: %s.....\n", string(outData))
}
fmt.Printf("stdout--------%s\n", string(outData))
}
errData, err := ioutil.ReadAll(stderr)
if err != nil {
return fmt.Sprintf("ReadAll stderr err: %s.....\n", err.Error())
} else {
if len(string(errData)) > 0 {
return string(errData)
}
}
if err := cmd.Wait(); err != nil {
return fmt.Sprintf("Error waiting for command execution: %s.....\n", err.Error())
}
log.Printf("success command execution: \n")
return "success"
}

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
转载请注明来源:adb shell 传json给android service - 多知在线