推荐学习资料
- 脑图
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
注意,如果你使用的时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
-
–grant-write-uri-permission
-
–debug-log-resolution
-
–exclude-stopped-packages
-
–include-stopped-packages
-
–activity-brought-to-front
-
–activity-clear-top
包含FLAG_ACTIVITY_CLEAR_TOP标志位。
-
–activity-clear-when-task-reset
-
–activity-exclude-from-recents
-
–activity-launched-from-history
-
–activity-multiple-task
-
–activity-no-animation
-
–activity-no-history
包含FLAG_ACTIVITY_NO_HISTORY标志位。
-
–activity-no-user-action
-
–activity-previous-is-top
-
–activity-reorder-to-front
-
–activity-reset-task-if-needed
-
–activity-single-top
包含FLAG_ACTIVITY_SINGLE_TOP标志位。
-
–activity-clear-task
包含FLAG_ACTIVITY_CLEAR_TASK标志位。
-
–activity-task-on-home
-
–receiver-registered-only
-
–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/文件下。
以下是一个范例:
文末
那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试
- 技能
- 面试技巧+面试题
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试
- 技能
[外链图片转存中…(img-DVrP4orm-1715619135270)] - 面试技巧+面试题
[外链图片转存中…(img-xCXjBEj1-1715619135270)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!