文章目录

  • 背景
  • 分析过程
  • 解决方案
    • 方案 1
    • 方案 2

背景

demo 播测,需要使用 adb 命令拉起播测 demo,并传必要的参数将值带给我。

其中有个播放地址的值,传过来时发现值不完整,缺少了一部分。

后面发现是存在特殊字符,传参时导致了截断,故不完整。只需要特殊编码或者处理下就好。


分析过程

获取传参值的代码为:

private void  testIntentData() {System.out.println("> --- testIntentData ---");Intent intent = getIntent();String action = "", type = "", url = "";if (intent != null){System.out.println("> intent not null");if (intent.hasExtra("action")){action = intent.getStringExtra("action");}if (intent.hasExtra("type")){type = intent.getStringExtra("type");}if (intent.hasExtra("url")){url = intent.getStringExtra("url");}System.out.println("> action: " + action + ", type: " + type+ ", url: " + url);return;}System.out.println("> intent is null");}

上面接收三个参数对应的值:action 参数、type 参数和 url 参数。

adb 拉起 apk 命令:

adb shell am start -n com.example.myapplication/com.example.myapplication.MainActivity -e action "pull" -e type "open" -e url "http://www.baidu.com?name=zouqi"

命令说明:adb shell am start -n [包名]/[启动类名] -e [参数key] [参数值] ...

调用如下:

输出结果:

可以看到,通过 adb 命令传参的参数值都不存在特殊字符,故成功的获取到了传进来的所有参数的值。

如果我们的传参的 url 参数值变为 http://www.baidu.com?name=imxiaoqi&age=27&no=yh9527

调用:

输出结果:

这里发现 url 的值被截断了,这是因为 url 参数值中存在特殊字符 &

adb shell 相当于是在 linux shell 环境下运行的,而 & 符号是 shell 中的特殊字符,表示后台运行,因此会出现截断的情况。


解决方案

方案 1

使用命令:

adb shell am start -n com.example.myapplication/com.example.myapplication.MainActivity -e action "pull" -e type "open" -e url "http://www.baidu.com?name=imxiaoqi\&age=27\&no=yh9527"


这里只是对特殊字符 & 做了简单的处理,至于其他特殊字符同学们可以自己去实践,这里不推荐采用该方案,因为可能有些参数值的特殊字符单纯加 \ 无法生效。

方案 2

将参数值进行 urlEncode 编码后传递,代码中获取到参数值后,再进行解码操作即可。

推荐编码工具网站:URL编码/解码

修改代码:

private void  testIntentData() {System.out.println("> --- testIntentData ---");Intent intent = getIntent();String action = "", type = "", url = "";if (intent != null){System.out.println("> intent not null");if (intent.hasExtra("action")){action = intent.getStringExtra("action");}if (intent.hasExtra("type")){type = intent.getStringExtra("type");}if (intent.hasExtra("url")){url = intent.getStringExtra("url");System.out.println("> 编码 url: " + url);url = URLDecoder.decode(url);System.out.println("> 解码 url:" + url);}System.out.println("> action: " + action + ", type: " + type+ ", url: " + url);return;}System.out.println("> intent is null");}

http://www.baidu.com?name=imxiaoqi&age=27&no=yh9527 编码后的值

http%3a%2f%2fwww.baidu.com%3fname%3dimxiaoqi%26age%3d27%26no%3dyh9527

如下图:

输入命令如下:

输出结果:

推荐解决方案 2 ,解决几乎所有情况!


技术永不眠!我们下期见!

adb 命令拉起 apk 并传递参数及相关注意事项相关推荐

  1. Android10apk怎么传数据,Android不同apk之间传递参数与数据

    转载出处:http://dongyang555-126-com.iteye.com/blog/1308586 android编程的时候,有时候需要在不同的apk之间传递参数或数据,下面是一个简单的例子 ...

  2. adb命令安装安卓apk包(首先解决adb不是内部命令或者不是外部命令)

    'adb' 不是内部或外部命令,也不是可运行的程序 或批处理文件-解决方法 Windows键 + R → 输入cmd → 输入adb,提示"adb不是内部或外部命令,也不是可运行的程序 或批 ...

  3. android 环境配置和安装, Android系统包说明,基本控件,常用代码,ADB 命令行,APK文件确解,小技艺,...

    一.             环境配置和安装(Android2.2) 参考文章:这里 1.1     JDK 1.2     SDK 下载地址:http://dl.google.com/android ...

  4. 20.27分发系统介绍;20.28expect脚本远程登录;20.29expect脚本远程执行命令;20.30expect脚本传递参数...

    20.27 分发系统介绍 shell项目-分发系统-expect 20.28 expect脚本远程登录 1. 安装expect [root@hao-01 ~]# yum install -y expe ...

  5. adb命令 (安装apk包格式:adb install 电脑上apk地址包名)

    1.adb基础命令 配置好环境变量后,在cmd窗口打开命令行,敲adb device,验证adb连接设备成功 (前置条件:adb环境配置成功.开发者选项开启了USB调试模式) 1.1.进入手机的设置- ...

  6. 60-008-026-使用-命令-如何在flink中传递参数

    1.视界 2.概述 众所周知,flink作为流计算引擎,处理源源不断的数据是其本意,但是在处理数据的过程中,往往可能需要一些参数的传递,那么有哪些方法进行参数的传递?在什么时候使用?这里尝试进行简单的 ...

  7. android远程命令行工具,Android 使用 adb命令 远程安装apk

    [UWP]解析GB2312.GBK编码网页乱码问题 在WebHttpRequest请求网页后,获取到的中文是乱码,类似这样: ˹ŵ��Ϸ���������� - ��̳������ -  ˹ŵ��Ϸ� ...

  8. linux xargs 给命令传递参数 组合多个命令

    简介 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: 这个命令是错误的 find /sbin -perm +700 |ls ...

  9. Android开发中adb命令的常用方法

    Android的SDK中提供了很多有用的工具,在开发过程中如果能熟练使用这些工具,会让我们的开发事半功倍.adb是SDK提供的一个常用的命令行工具,全称为Android Debug Bridge,用于 ...

最新文章

  1. 转载一个关于JavaScript几种继承方法的总结
  2. PyTorch开源物体检测工具包
  3. svn文件丢失的解法
  4. 计数信号量的删除与状态查询
  5. 让图片算好高宽再显示
  6. 浙江高考艺术类2021年成绩查询,2021年浙江美术高考成绩查询网址:https://www.zjzs.net/...
  7. 图解python专业教程_图解Python视频教程(基础篇)课程
  8. 安装maven到Eclipse
  9. c# 过滤HTML代码 源代码,案例 下载
  10. VHD工具-VHDTOOL
  11. java 参数类型不确定_java泛型的那些事
  12. php网上实训指导书,PHP网站开发技术-实训指导书2016吐血制作
  13. [九省联考2018]秘密袭击coat
  14. strike F1 to retry boot,F2 for setup utility
  15. 常用字体名称中文对应英文
  16. 奔驰北京工厂两年内将再投产三款电动车;希尔顿中国市场第300家酒店开业 | 美通企业日报...
  17. 基于matlab的基带gmsk调制解调,基于MATLAB的GMSK调制解调实验
  18. 32位java jre_64位的jre和32位的jre
  19. LIN总线、CAN总线、FlexRay总线和MOST总线
  20. 【MMDetection3D】MVXNet踩坑笔记

热门文章

  1. IT专业大学生迷茫些什么
  2. 微软IE浏览器各版本更新内容的区别
  3. vue el-tree懒加载默认展开一级,懒加载刷新(默认高亮某个节点,触发某个节点的点击事件)
  4. 2021年起重机械指挥考试资料及起重机械指挥模拟考试题
  5. linux官方认证资料,Linux 初认证资料答案.doc
  6. excel利用公式提取括号前、括号中的数据
  7. 【备忘】导出Excel,使用NativeExcel控件
  8. 沃尔玛全渠道首推快时尚自有品牌George
  9. pandas系列学习(六):数据聚合
  10. 鸿蒙智慧屏不能安装apk,都说鸿蒙系统兼容安卓APP,荣耀智慧屏却无法安装安卓APP?...