Android调试桥-Android Debug Birdge详解

注意,当多个模拟器/设备在运行时,如果你没有为adb命令指定一个目标实例,adb将摄报错。

如果你有多个设备可用(硬件的或是模拟的),但只有一个模拟器,只需要简单地使用-e选项将命令输送到模拟器上。同样地,如果多个可用设备中只且个是硬件设备,则可以使用-d选项将命令输送到硬件设备上。

安装一个应用程序-Installing an Application


你可以使用adb将一个应用程序从你的开发电脑上复制并安装到一个模拟器/设备上。使用install命令可以完成这个功能。在这个命令中,你必须指明这个.apk文件的路径:

1
adb install <path_to_apk>

更多关于如果创建一个你可以用来在模拟器或设备实例上安装的.apk文件的信息,请见 创建并运行-Building and Running

注意,如果你使用的时Eclipse开发环境,并且安装了ADT插件,你并不需要使用直接adb(或是aapt)来为你的模拟器/设备实例安装应用程序。取而代之的是,ADT为你处理了打包并安装的所有操作。

代理端口-Forwarding Ports


你可以使用forward命令来建立任意端口的代理-将一个任意的主机端口上的请求转发到另一个在不同端口上的模拟器/设备实例上。以下是一个建立代理的范例,其将主机端口号为6100上的请求转发到了在7100端口上的模拟器/设备上:

1
adb forward tcp:6100 tcp:7100

你也可以使用adb为指定的抽象地UNIX域套接字建立代理,如:

1
adb forward tcp:6100 local:logd

将文件复制到模拟器/设备实例上,或是从模拟器/设备实例上复制文件-Copying Files to or from an Emulator/Device Instance


你可以使用adb命令pull和push来将文件复制到模拟器/设备实例上,或是从模拟器/设备上复制出文件。不同于install命令(将APK文件复制到指定的路径),pull和push命令可以让你复制任意路径的文件,或是复制文件到模拟器/设备上的任务位置。

从模拟器或设备上复制一个文件或目录(及其子目录),使用:

1
adb pull <remote> <local>

复件一个文件或目录(及其子目录)到模拟器或设备上,使用:

1
adb push <local> <remote>

在这些命令中和分别代表了目标文件/目录在你的开发机器(local)和模拟器/设备实例(remote)上的路径。例如:

1
adb push foo.txt /sdcard/foo.txt

调用Shell命令-Issuing Shell Commands


Adb提供了一个Unix shell,它允许你在模拟器或是连接地设备上运行各种命令。这些命令的二进制文件存在于模拟器或设备的文件系统中,在/system/bin/…目录下。

两个最常用的工具是activity manager 和 [package manager] (pm)。

你可以adb命令加入shell 命令来决定是否进入模拟器/设备的adb远程shell中。调用一条命令,且不进入远程shell,其shell命令格式如下:

1
adb[-d|-e|-s <serialNumber>] shell <shell_command>

进入模拟器/设备上的远程shell,其格式为:

1
adb[-d|-e|-s <serialNumber>] shell

当你准备好退出远程shell时,可以按CTRL+D或是输入exit.

使用窗口管理器-Using activity manager(am)


在adb shell中,你可以通过窗口管理器(am)工具调用命令,它可以让你执行各种系统动作,如,启动一个窗口,强制停止一个进程,广播一个Intent,修改设备屏幕属性等等。在一个shell中,其语法为:

1
adm <command>

你也可以在adb中直接调用窗口管理命令而不进入远程shell,例如:

1
adb shell am start -a android.intent.action.VIEW

**表 2.**可用的窗口管理命令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参数详解

对于使用了参数的窗口管理命令,你可以其intent为以下选项之一:

  • -a < ACTION >

    指定intent动作,例如“android.intent.action.VIEW”。这个参数只能申明一次。

  • -d < DATA_URI >

    指定intent数据URI,例如:“content://contacts/pelple/1”。这个参数只能申明一次。

  • -t < MIME_TYPE >

    指定intent MIME类型,例如:“image/png”。这个参数只能申明一次

  • -c < CATEGORY >

    指定一个intent分类,例如:“android.intent.category.APP_CONTACTS”。

  • -n < COMPONENT >

    指定组件名称及包名前缀,用来构建一个显性的intent,例如:“com.example.app/.ExampleActivity”。

  • -f < FLAGS 〉

    为intent添加标志位,同setFlags())。

  • –esn < EXTRA_KEY >

    附加一个空值,这个选项不支持URI intents。

  • -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>

    添加一个URI类型的键-值对数据。

  • –ecn < EXTRA_KEY > < EXTRA_COMPONENT_NAME_VALUE >

    添加一个组件名称,其已转化,并作为ComponentName对象传递。

  • –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…]

    添加一个浮点型数组。

  • –grant-read-uri-permission

    包含FLAG_GRANT_READ_URI_PERMISSION标志位。

  • –grant-write-uri-permission

    包含FLAG_GRANT_WRITE_URI_PERMISSION标志位。

  • –debug-log-resolution

    包含FLAG_DEBUG_LOG_RESOLUTION标志位。

  • –exclude-stopped-packages

    包含FLAG_EXCLUDE_STOPPED_PACKAGES标志位。

  • –include-stopped-packages

    包含FLAG_INCLUDE_STOPPED_PACKAGES标志位。

  • –activity-brought-to-front

    包含FLAG_ACTIVITY_BROUGHT_TO_FRONT标志位。

  • –activity-clear-top

    包含FLAG_ACTIVITY_CLEAR_TOP标志位。

  • –activity-clear-when-task-reset

    包含FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET标志位。

  • –activity-exclude-from-recents

    包含FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS标志位。

  • –activity-launched-from-history

    包含FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY标志位。

  • –activity-multiple-task

    包含FLAG_ACTIVITY_MULTIPLE_TASK标志位。

  • –activity-no-animation

    包含FLAG_ACTIVITY_NO_ANIMATION标志位。

  • –activity-no-history

    包含FLAG_ACTIVITY_NO_HISTORY标志位。

  • –activity-no-user-action

    包含FLAG_ACTIVITY_NO_USER_ACTION标志位。

  • –activity-previous-is-top

    包含FLAG_ACTIVITY_PREVIOUS_IS_TOP标志位。

  • –activity-reorder-to-front

    包含FLAG_ACTIVITY_REORDER_TO_FRONT标志位。

  • –activity-reset-task-if-needed

    包含FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标志位。

  • –activity-single-top

    包含FLAG_ACTIVITY_SINGLE_TOP标志位。

  • –activity-clear-task

    包含FLAG_ACTIVITY_CLEAR_TASK标志位。

  • –activity-task-on-home

    包含FLAG_ACTIVITY_TASK_ON_HOME标志位。

  • –receiver-registered-only

    包含FLAG_RECEIVER_REGISTERED_ONLY标志位。

  • –receiver-replace-pending

    包含FLAG_RECEIVER_REPLACE_PENDING标志位。

  • –selector

    要求使用-d和-t选项来设置intent数据及类型。

  • < URI > < COMPONENT > < PACKAGE >

    当你没有使用以上的选项时,你也可以直接指定一个URI,包名,和组件名。当一个参数没有修饰限制时,如果它包含了“:”(冒号),则系统将假设其参数为URI,包含“/”(前向斜杆)时,假设参数为组件名,其它情况则假设为包名。

使用包管理-Using Package manager(pm)


在adb shell中,你可以使用包管理来工具来调用adb命令,来执行在设备上安装应用程序包或查寻已安装包的功能。在shell中,其语法如下:

1
pm <command>

你也可以在adb中调用包管理命令而不进入远程的shell,例如:

1
adb shell pm uninstall com.example.MyApp

写在最后

对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。

![
[]


文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[外链图片转存中…(img-HBGqbMK1-1714458125130)]
[]

[外链图片转存中…(img-Non2QQ1i-1714458125131)]
[外链图片转存中…(img-FuH5PgJY-1714458125131)]

文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值