平常开发的时候我们经常遇到要开发一个新的界面,没有其他程序入口启动这个activity,几年前刚做android开发那会遇到这种情况就是直接把AndroidManifest.xml的activity主要入口更改为正在开发的入口,但是有个问题,有时候不小心把AndroidManifest.xml提交,导致同事更新代码后抓狂。第一反应就是adb启动,在很长一点时间里我一直用adb方式启动activity,去年偶然看到monkeyrunner脚本,发现也有方法启动activity,于是就写了一个脚本用于启动activity的开发场景。
一、用adb方式启动activity
android平台有一个am命令集合,其实就是ActivityManager的执行脚本,我们可以通过am命令来启动activity
命令如下:
$ am start -n com.package/com.package.name.ActivityName
与adb shell一起使用就是
$ adb shell am start -n com.package/com.package.name.ActivityName
还可以通过am命令给activity传参数,这里就不再继续讲解了。
二、monkeyrunner脚方式启动
monkeyrunner是基于python脚本的一个自动化测试工具,功能非常强大。
1. 使用MonkeyDevice的startActivity方法即可启动
sample.py
============================================
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
device=MonkeyRunner.waitForConnection();
# 注意name前面还有一个“.”符号,其实是相对路径的意思也可以component="com.package/com.package.name.ActivityName"
device.startActivity(component="com.lucky/.name.ActivityName")

将samply.py放到ANDROID_SDK/tools目录下,然后运行

$ monkeyrunner sample.py
等几秒钟,即可启动HelloActivity
注意: 一定要将脚本放到ANDROID_SDK/tools目录下,否则运行脚本会报错。
2. 步骤1只是一个简单的例子,实际开发中,我特地编写了一个启动脚本,只要输入应用packageName和activity名即可启动对应的activity,不需要每次都修改脚本,扩展性不好
完整的脚本
startActivity.py
========================================
import sys
if len(sys.argv) < 3 :print('Plase input Package Name and Activity Name')sys.exit(0)pkgName=sys.argv[1]
actName=sys.argv[2]
actShortName=actName[(actName.rfind('.') + 1):]
myComponent=pkgName + '/' + actNamefrom com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
print('connecting device...')
device=MonkeyRunner.waitForConnection();
print('connect succeed.')
print('Ready to start Activity of \"' + actShortName + '\"')
device.startActivity(component=myComponent)

把startActivity.py放到ANDROID_SDK/tools目录下运行如下命令即可启动activity

$ monkeyrunner startActivity.py com.package com.package.name.ActivityName
3. 如果使用步骤2想传参数怎办,MonkeyDevice也可以传参数,只是太麻烦,而且不够灵活,开发中,一般在onCreate()后面加入测试变量就可以了。

三、adb VS monkeyrunner启动activity那个好
1. adb启动activity速度相对快一点,因为相比monkeyrunner少了connection的过程;
2. adb缺点就是设备的adb必须有root权限,而monkeyrunner只要能够连接adb就可以了,不需要额外权限。
结论:在adb有root权限的设备上我通常用回选择adb启动,开发能省时间就省时间。

androidru使用adb启动activity和monkeyrunner启动activity相关推荐

  1. 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 1...

    老李推荐: 第8章4节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-启动AndroidDebugBridge 上一节我们看到在启动AndroidDebugBri ...

  2. 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...

    老李推荐:第8章2节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-解析处理命令行参数 MonkeyRunnerStarter是MonkeyRunner启动时的入 ...

  3. Activity(三)—— Activity的启动模式

    Activity的启动模式 1 Activity的LaunchMode Activity为什么需要启动模式?在默认情况下,当我们多次启动同一个Activity的时候,系统会创建多个实例并把它们一一放入 ...

  4. Android入门:Activity四种启动模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在Android Manifest.xml中的标签的and ...

  5. android通知栏打开actvity,Android实现点击通知栏后,先启动应用再打开目标Activity...

    情况简述 app正在运行 app已退出 方案和思路 SplashActivity 用于显示app大图,同时进行用户登录等操作,服务器返回数据后跳转到MainActivity. MainActivity ...

  6. androd hook acitivity 启动流程,替换启动的activity(Android Instrumentation)

    前言:如果程序想要知道有activity启动,如果想要拦截activity,然后跳转到指定的activity怎么办? 我们看下ActivityThread 里面: private Activity p ...

  7. android 怎么判断activity 从哪里启动的

    有时候,你想要知道,有一个activity 从哪里启动的.怎么才能知道呢? 1.前提是,androidstadio 你下载了源码.找到你的activityBase的实现类,在startActivity ...

  8. android 4大组件相互启动,Android四大组件之Activity

    1.感性的认知Activity Activity是安卓的四大组件之一,它就像是一个容器,容器当中装了很多的Android布局,这些布局可以直接写在Activity所引用的xml布局文件当中,也可以通过 ...

  9. java开发app启动跳转到一个广告,Android实现点击通知栏后,先启动应用再打开目标Activity...

    情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,并设置点击 ...

  10. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

最新文章

  1. php面对对象设计,PHP对象与设计
  2. AI开放只是幌子?科技巨头边承诺开放边申请专利
  3. JAVA WEB之Spring4.x JdbcTemplate
  4. 更改Mysql数据库存储位置的具体步骤
  5. 在VNC远程桌面环境Xfce4中Tab键失效的解决方法
  6. 转载 Android解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget
  7. 系统更新win10服务器失败,win10更新失败?使用这三招轻松解决,远离更新失败的烦恼!...
  8. linux查看essbase进程,ESSBASE的使用及优化.doc
  9. web前端课程架构梳理
  10. 实验二:tga格式图片转yuv格式
  11. PHP性能分析工具:xhprof
  12. 从裁员到扩招/从自研到生态,汽车行业新年新气象
  13. 电力系统机组调度 考虑了源荷不确定性 考虑源荷两侧不确定性的含风电的低碳调度,引入模糊机会约束,程序包括储能、风光、火电机组及水电机组
  14. 如何在iphone上模拟定位
  15. 用伪分布式处理爬取下来的数据并用flume监听hive分析,sqoop传入MySQL并可视化
  16. azure不支持哪些语句 sql_SQL Azure vs SQL Server
  17. Python万年历(含农历、节气等)
  18. nas系统存储服务器,企业搭建NAS存储服务器的三部曲,你都清楚嘛?
  19. 自动驾驶外卖上线,美团即将配送一切-1
  20. Flask最强攻略 - 跟DragonFire学Flask - 第三篇 Flask 中的 request 之 先知道有这么个东西...

热门文章

  1. 【洛谷 P2731】骑马修栅栏【欧拉路与欧拉回路】
  2. DnsFookup:一款功能强大的DNS重绑定工具
  3. Sitadel:一款功能强大的Web应用扫描器
  4. Raki的读paper小记:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  5. 常问的数据结构与算法
  6. C++求解汉字字符串的最长公共子序列 动态规划
  7. .Net中的Placeholder控件
  8. ngx_http_upstream_module模块学习笔记
  9. 细说文件读写操作(读写锁)
  10. PHP cookie和session的分析