2024年最全Android调试桥-Android Debug Birdge详解,面试成功经验分享

建议

当我们出去找工作,或者准备找工作的时候,我们一定要想,我面试的目标是什么,我自己的技术栈有哪些,近期能掌握的有哪些,我的哪些短板 ,列出来,有计划的去完成,别看前两天掘金一些大佬在驳来驳去 ,他们的观点是他们的,不要因为他们的观点,膨胀了自己,影响自己的学习节奏。基础很大程度决定你自己技术层次的厚度,你再熟练框架也好,也会比你便宜的,性价比高的替代,很现实的问题但也要有危机意识,当我们年级大了,有哪些亮点,与比我们经历更旺盛的年轻小工程师,竞争。

  • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!!!!!!!

  • 准备想说怎么样写简历,想象算了,我觉得,技术就是你最好的简历

  • 我希望每一个努力生活的it工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

  • 有什么问题想交流,欢迎给我私信,欢迎评论

【附】相关架构及资料

Android高级技术大纲

面试资料整理

内含往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术

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

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

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

在这些命令中和分别代表了目标文件/目录在你的开发机器(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

表 3. 可用的包命令

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

通过远程shell检查sqlite3数据库-Examining sqlite3 databases from a remote shell


通过adb远程shell,你可以使用sqlite3命令行程序来管理由Android应用程序创建的SQLite数据库。Sqlite3工具包含了许多有用的命令,例如 .dump可以用来打印出一个表中的内容,.schema可以用来打印一个已存在的表的SQL CREATE描述。 这个工具也可以让你在运行中执行SQLite命令。

要使用sqlite3命令,首先进入一个模拟器实例的远程shell(如前文所述),然后使用sqlite3命令调用这个工具。当调用sqlite3时,你也可以选择指定你想要探寻的数据库的完整路径。模拟器/设备实例将SQLite3数据库存放在/data/data//databases/文件下。

以下是一个范例:

1

2

3

4

5

6

    adb -s emulator-5554 shell

<span class="err">#</span> <span class="n">sqlite3</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="o">.</span><span class="na">example</span><span class="o">.</span><span class="na">google</span><span class="o">.</span><span class="na">rss</span><span class="o">.</span><span class="na">rssexample</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">bases</span><span class="o">/</span><span class="n">rssitems</span><span class="o">.</span><span class="na">db</span>

<span class="n">SQLite</span> <span class="n">version</span> <span class="mf">3.3</span><span class="o">.</span><span class="mi">12</span>

<span class="n">Enter</span> <span class="s">".help"</span> <span class="k">for</span> <span class="n">instructions</span>

<span class="o">....</span> <span class="n">enter</span> <span class="n">commands</span><span class="o">,</span> <span class="n">then</span> <span class="n">quit</span><span class="o">...</span>

<span class="n">sqlite</span><span class="o">&gt;</span> <span class="o">.</span><span class="na">exit</span>

当你调用sqlite3之后,你就可以在shell中执行sqlite3命令。使用exit或CTRL+D来退出并返回到adb远程shell中。

UI/应用程序训练猴-UI/Application Exerciser Monkey


Monkey 是运行在模拟器或是设备上的一个程序,并产生用户事件伪随机流,如点击(clicks),触摸(touches),手势(gestures),以及一系列的系统级事件。你可以使用Monkey程序为你正在开发的应用在一个随机但可重复的方式下进行压力测试。

最简单的使用Monkey程序的方法是调用以下命令。这条命令将启动你的应用,并向其发送500次伪随机事件。

1
adb shell monkey -v -p your.package.name 500

更多关于Monkey程序的命令选项信息,请见完整的UI/Application Exerciser Monkey文档。

其它shell命令-Other shell commands


最后

希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer !如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

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

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

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

清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer !如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

[外链图片转存中…(img-Wy3LkS2q-1715885575669)]

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值