您的位置:首页 > 移动开发 > Android开发

Android 中 adb 相关问题

2017-03-21 20:51 239 查看
这几天看android中的数据库SQLite,需要使用 adb shell 来查看数据库中的信息,但是随之发生了一系列问题,所以在这里提出来,也算是学习经验的记录吧!

首先,我在控制台中使用adb shell命令,结果出现了这样的情况



这里的信息当时也没仔细看,直接上百度(简单,便捷,但是愚蠢),未经思考就去找百度,这在后来看来时极大的错误。百度上显示的答案大多是端口被占用啊,重启adb server啊,等等的解决方案。我试了很多,但是由于未经思考,导致什么都不明白,只能按照网上给的方法试试了。

多次不行的情况下我决定上google,但是很多看不懂,看懂了也和百度的答案没有什么区别。在此期间,我不断结束各种进程。但是一直没有效果,并且在android studio中不断出现emulator 5554 offline的情况,我的模拟器为什么会掉线?并且有时候,重启模拟器就会出现wait for device to come online 。一直到这个时候,我都是一头雾水。

我决定去了解这个adb到底是什么,以及它在我运行程序时到底扮演了一个什么样的角色。于是,我找到了这个:



本着服务大众的原则,我用蹩脚的英语翻译一下:

adb 是一个多功能的命令行工具,可以让你和一个设备(模拟器或者已连接的android 设备)进行交互。adb命令可以推进多种设备活动,例如下载或者调试app,并且它提供一个你可以使用的Unix shell的入口去在设备上运行多种命令。它是一个包含以下三个部分的客户端服务器程序

一个客户端,发送命令。这个客户端运行在你的开发机上,你可以通过分配一个adb 命令来引入一个来自命令行终端的客户端。

一个守护进程,在设备上运行命令。这个守护进程作为在每个设备上运行的背后进程。

一个服务器,管理客户端和守护进程之间的通信。这个服务器作为一个背后的进程运行在你的每个开发机器上。

adb包含在Android SDK Platform-Tools包里,你可以在SDK Manager中下载这个包,它被下载在android_sdk/platform-tools/目录下,或者你想要独立的Android SDK Platform-Tools 包,你可以在这里下载。(这里就不提供链接了)

(直译,意会就行)

它是什么,它是一个桥,它让ide和device进行交互。就像以前eclipse的adt插件,它是两个部分的桥梁。我们在android studio中的工具栏中的tools->android 可以看到Enable adb Intergation,这个选项是问是否使adb整合。什么意思呢,一旦选中这个选项,那么在开启模拟器的同时,是会打开platform-tools下的adb.exe来使ide和设备建立连接,这时ide中的模拟器才会在线。如果未勾选这个选项,那么则会adb将不会启动,这时在控制台使它启动是没有用的,设备不会在线。未勾选这个选项,但是在模拟器运行之前就开启adb服务也是没有用的,设备也不会在线。

这就是屡次不成功的原因了,使用adb shell可以进行许多操作,shell就是一个运行在命令行的软件,可以看作一种底层的方式来进行下载、调试程序等等操作。

这里模拟器掉线的程序解决了,但是adb server is out of data的问题还没有解决,我仔细分析了这个句子的含义,out of data 并不是我想象中的没有数据(真肤浅的想法),这个out of data 的意思是过期的,陈旧的。它为什么这么说呢?难道我的adb过期了?我考虑到最近android studio更新了,会不会是这个问题呢?找了一圈,并不是。

我突然想到我之前的eclipse中也有adb.exe,当时还因为端口占用的问题百度了一些知识,会不会是eclipse的adb。我们知道,通过系统环境变量配置后的变量是直接可以在命令行中访问的,adb也是如此。我们在系统变量中配置了adb的路径,我发现我之前的eclipse中的adb是配置在系统变量中的,而android studio中的adb也是同样配置在系统变量中的。我把关于eclipse的android系统变量全部删去,adb shell就可以正常运行了,也不会再出现adb server is out of data的问题了。

才疏学浅,还请各位多指教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android adb-shell