Android之adb_reprint

  1. 概述

    最近研究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原理分析





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值