Android之adb_reprint
- 概述
最近研究pc与Android应用程序通过usb通信,顺带研究了一下怎么通过adb启动android应用程序,于是乎看到了am命名(activity manager)。
先附上谷歌开发文档中的描述文档路径,里面比我这里讲得详细。
http://developer.android.com/tools/help/adb.html#IntentSpec
虽然里面讲得很详细,不过对于我这种菜鸟来说,还是花了些时间才理解,希望这些理解能对与我遇到相同疑惑的开发者们有帮助,下面进入正文。
adb shell 这个命令很简单,也就是启动Android的shell程序而已。毕竟需要进入Android的shell后,才能使用Android的系统命令嘛,就像在Linux下,要想使用命令, 也得启动Linux的shell一样。 之后,就到了使用am命令的时候了。
am <command>
这里应该不用解释了。
当然,除了在远程shell里面输入这些命名外,我们也可以不启动远程shell,可以采用下面的方式:
adb shell am <command>
好了,下面正式介绍<command>这部分类容的,因为我主要是想研究怎么启动Android应用,所以就只研究了start命令了,下面详细的讲讲start命令。
start [options] <INTENT>
option:
-D
: Enable debugging.-W
: Wait for launch to complete.--start-profiler <FILE>
: Start profiler and send results to<FILE>
.-P <FILE>
: Like--start-profiler
, but profiling stops when the app goes idle.-R
: Repeat the activity launch<COUNT>
times. Prior to each repeat, the top activity will be finished.-S
: Force stop the target app before starting the activity.--opengl-trace
: Enable tracing of OpenGL functions.--user <USER_ID> | current
: Specify which user to run as; if not specified, then run as the current user.
命令选项这部分没有研究具体的用途,自己目前也不知道,就不说了,当然希望各位大牛们给小弟解释解释。
我就谈谈对<INTENT>
部分的理解吧。
-a <ACTION>
启动时,要执行的动作,如:android.intent.action.VIEW,我在这里刚开始没有理解他怎么用,网上大部分例子都是:
adb shell am -a android.intent.action.VIEW -d http://www.baidu.com 启动浏览器打开一个网站
其实,还有更一般的用法,就是可以通过这种方式启动我们自己的app,假设我们在我们的app的AndroidManifest.xml文件中的activity标签中加入了
<intent-filter>
<action android:name="android.intent.action.MY_APP" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
那么我们就可以通过:adb shell am start -a android.intent.action.MY_APP来启动我们的应用了,MY_APP随便取名字,不和系统的内置名字冲突就行了。
-d <DATA_URI>
启动时,要传入的URI,如:http://www.baidu.com。到这里,我想我们应该能猜到这个参数的意义了吧,它无非就是在启动我们的activity时,传入URI参数,供app程序分析,并执行对应操作,假设我们的app没有处理这个参数,传进去也没有什么意义。
-t <MIME_TYPE
>
摘自别人的文章“我在写android资源管理器(文件浏览器)的时候,希望能在资源管理器的中实现打开文件的操作,此时就需要用到文件的MIME类型。”,这玩意传进去具体怎么用,我也不清楚。用到的时候再研究吧。这个参数
-c <CATEGORY>
启动时,
-n <COMPONENT>
直接启动一个组件,例如:adb shell am start -n com.example.app/.ExampleActivity
-f <FLAGS>
无知道这玩意的用途呀,还没有接触这方面的知识。
--esn <EXTRA_KEY>
-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE>
--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>
--ei <EXTRA_KEY> <EXTRA_INT_VALUE>
--el <EXTRA_KEY> <EXTRA_LONG_VALUE>
--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE>
--eu <EXTRA_KEY> <EXTRA_URI_VALUE>
--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>
--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]
--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]
--efa <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]
上面的这些命令属于统一类型,我就找一个解释就行了,这里就找
--es <EXTRA_KEY> <EXTRA_STRING_VALUE>举例了。
我们看名字就知道这里传入的是一个键值对了,自然这些数据到时候会填入启动activity的intent中,比如我们输入下面的命令:
am start -a android.intent.action.MY_APP --es data mystringdata
接着我们在activity中的onCreate函数中加入一下代码,检查一下数据是否传入成功:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String string = getIntent().getStringExtra("data");
if (null != string) {
Log.d("zjh", string);
} else {
Log.d("zjh", "无附加数据");
}
}
实际验证得到,输出了
mystringdata这个数据。
因此,以上命令就是用于填充intent中对应的数据值而已。
后面的那些命令这里就不分析了,主要是我暂时用不到,当然大家能补充一下也是极好的。
2 示例
启动的方法为
# am start -n 包(package)名/包名.活动(activity)名称
启动的方法可以从每个应用的AndroidManifest.xml的文件中得到
Music 和 Video(音乐和视频)的启动方法为:
# am start -n com.Android.music/com.android.music.MusicBrowserActivity
# am start -n com.android.music/com.android.music.VideoBrowserActivity
# am start -n com.android.music/com.android.music.MediaPlaybackActivity
Camera(照相机)的启动方法为:
# am start -n com.android.camera/com.android.camera.Camera
Browser(浏览器)的启动方法为:
# am start -n com.android.browser/com.android.browser.BrowserActivity
启动浏览器 :
am start -a android.intent.action.VIEW -d http://www.google.cn/
拨打电话 :
am start -a android.intent.action.CALL -d tel:10086
启动 google map 直接定位到上海 :
am start -a android.intent.action.VIEW geo:0,0?q=shanghai
最后总结一下:
start 后面的
<INTENT>部分,无非就是填充完善intent中的内容,当然里面有很多不同的内容,代表着不同的意思,也有不同的用途,这里只能怪自己脑袋不好使,看到
没有第一时间联想到它的意义,希望这篇文章对大家有帮助。<INTENT>
了解更多:android之adb原理分析。
Android之adb_reprint相关推荐
- Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程
首先下载并安装安卓SDK和java的JDK 安卓sdk下载: http://www.android-studio.org/ 也可以在这下载: 链接:http://pan.baidu.com/s/1bp ...
- Android 的NDK的Makefile编写
Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...
- Android Animation (安卓动画)概念简介
Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...
- 基于Android和SpringBoot的购物App
(Shopping)购物应用商城 本软件使用Android和SpringBoot.JavaWeb技术实现:并结合百度LBS平台的SDK.支付宝App支付客户端SDK.MobTech的ShareSDK: ...
- Android数据持久化:SharePreference
SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...
- Android数据持久化:文件存储
数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...
- Android Studio中RecycerView依赖库加载问题
依赖包导入思考: 参考资料:recycleview导包问题 打开修改本项目中的build.gradle; 切勿着急添加包,应当提前查看其中的版本号(因为加载的v7包要和其版本保持一致性): 例如: 因 ...
- Android布局优化之include、merge、ViewStub
include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...
- Android动画之帧动画和补间动画
Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...
最新文章
- 用php计算自由落体,js模仿物理中的自由落体现象
- 理解Android Java垃圾回收机制
- [翻译] WindowsPhone-GameBoy模拟器开发二--Rom文件分析
- 数据分析不能挣钱、不能给公司创造利润,那要你有什么用?
- Matlab解析LQR与MPC的关系
- PHP常用函数(收集)
- 2021全球国际化大学排名出炉,这所中国高校喜提世界第一!
- Python远程连接Windows,并调用Windows命令(类似于paramiko)
- c语言编程软件有哪些 Win7下用哪种C语言编译器
- 纠删码:定义及常见类型
- 寻路系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 谷歌打开微信定位服务器地址,使用Chrome修改user agent模拟微信内置浏览器
- 20182442-胡名琪
- 48个快速操作office技巧
- 淘宝至强cpu为什么那么便宜
- R7 5800H 和 R5 5600H的差距大吗 哪个好
- 在网页调用微信支付,并解决IOS调用提示“缺少参数timeStamp”问题
- codeforces 900D. Unusual Sequences(莫比乌斯反演)
- MySQL学习笔记day2--DQL案例练习
- 【Kotlin 协程】Flow 异步流 ⑧ ( 背压概念 | 使用缓冲处理背压问题 | 使用 flowOn 处理背压问题 | 从提高收集元素效率方向解决背压问题 )