问题表现:连接手机与电脑后,驱动安装正确,USB调试模式打开,在DDMS中可以看到device及其进程的信息,但是logcat中就是没有信息输出
问题原因:一些rom默认关闭logcat
问题说明:ddms中设备名字显示为问号不影响,即adb
get-serialno显示为问号不影响
解决方法:
1需要root权限(部分rom不需要)
2打开logcat,并设置level,执行命令如下(android
升级之后
adb
在
platform-tools中,不在tools中)
adb
shell
echo
1
>
/sys/kernel/logger/log_main/enable
说明:将1写入日志开关文件,1为开,0为关
echo
2
>/sys/kernel/logger/log_main/priority
说明:将代表level的2写入优先级文件
3重启adb,如果使用eclipse,先关闭eclipse,再重启adb,再启动eclipse
adb
kill-server
adb
start-server
4此时logcat应该可以工作了,如果仍旧不工作,则更新adb
android
update
adb
5重复第三步,此时logcat应该可以工作了,如果仍旧不工作,找到个人主目录下的android目录,如C:Documents
and
SettingsAdministratorandroid
找到这个目录下的adb_usbini文件,其内容默认只有三行,全为注释,在后面添加一行,内容为0x12d1
6重复第三步,此时logcat应该可以工作了
准备工作:启动虚拟机。这里的启动不是从eclipse中启动,而是从命令行中启动。
emulator -avd 你创建的avd名字(比如android21) -partition-size 128
-partition-size 128 :指定模拟器的system和data分区的大小是128M
修改HOST文件:
1、获得root权限:adb root
2、设置/system为可读写:adb remount
3、将hosts文件复制到PC:adb pull /system/etc/hosts <PC机上文件名>。这里可以考虑使用DDMS来复制,这个比较方便,但上传经常会出错;
4、修改PC机上文件
5、将PC机上文件复制到手机:adb push <PC机上文件名> /system/etc/hosts
如果要查看是否修改成功,可以在PC上执行adb shell,运行cat /system/etc/hosts;或者在手机上运行cat /system/etc/hosts。
hosts文件格式的写法应该是每个域名一行才能使用,例如:
127001 host1examplecom
127001 host2examplecom
127001 host3examplecom
ps:如何判断手机是否已经root了,输入adb shell回车,su 回车,如果出现#,那么你的手机的确ROOT了。
另:文件稍微大点,输入完命令就提示out of memory,在网上找到的解决办法都是针对模拟器的后来通过下面的方式彻底搞定
adb常用命令
adb remount 重新挂载文件系统
adb reboot 重启手机
adb reboot recovery 重启到Recovery界面
adb reboot bootloader 重启到bootloader界面
adb get-product 获取设备的ID
adb get-serialno 获取设备的序列号
adb bugreport 查看bug报告
下列表格列出了adb支持的所有命令,并对它们的意义和使用方法做了说明
Category
Command
Description
Comments
Options
-d
仅仅通过USB接口来管理abd
如果不只是用USB接口来管理则返回错误
-e
仅仅通过模拟器实例来管理adb
如果不是仅仅通过模拟器实例管理则返回错误
-s <serialNumber>
通过模拟器/设备的允许的命令号码来发送命令来管理adb (比如: "emulator-5556")
如果没有指定号码,则会报错
General
devices
查看所有连接模拟器/设备的设施的清单
查看 Querying for Emulator/Device Instances 获取更多相关信息
help
查看adb所支持的所有命令。
version
查看adb的版本序列号
Debug
logcat [<option>] [<filter-specs>]
将日志数据输出到屏幕上
bugreport
查看bug的报告,如dumpsys , dumpstate ,和logcat 信息。
jdwp
查看指定的设施的可用的JDWP信息
可以用 forward jdwp:<pid> 端口映射信息来连接指定的JDWP进程例如:
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
Data
install <path-to-apk>
安装Android为(可以模拟器/设施的数据文件apk指定完整的路径)
pull <remote> <local>
将指定的文件从模拟器/设施的拷贝到电脑上
push <local> <remote>
将指定的文件从电脑上拷贝到模拟器/设备中
Ports and Networking
forward <local> <remote>
用本地指定的端口通过socket方法远程连接模拟器/设施
端口需要描述下列信息:
· tcp:<portnum>
· local:<UNIX domain socket name>
· dev:<character device name>
· jdwp:<pid>
ppp <tty> [parm]
通过USB运行ppp:
· <tty>— the tty for PPP stream For example dev:/dev/omap_csmi_ttyl
· [parm]&mdash zero or more PPP/PPPD options, such as defaultroute , local , notty , etc
需要提醒你的不能自动启动PDP连接
Scripting
get-serialno
查看adb实例的序列号
查看 Querying for Emulator/Device Instances 可以获得更多信息
get-state
查看模拟器/设施的当前状态
wait-for-device
如果设备不联机就不让执行,--也就是实例状态是 device 时
你可以提前把命令转载在adb的命令器中,在命令器中的命令在模拟器/设备连接之前是不会执行其它命令的 示例如下:
adb wait-for-device shell getprop
需要提醒的是这些命令在所有的系统启动启动起来之前是不会启动adb的 所以在所有的系统启动起来之前你也不能执行其它的命令 比如:运用install 的时候就需要Android包,这些包只有系统完全启动。例如:
adb wait-for-device install <app>apk
上面的命令只有连接上了模拟器/设备连接上了adb服务才会被执行,而在Android系统完全启动前执行就会有错误发生
Server
start-server
选择服务是否启动adb服务进程
kill-server
终止adb服务进程
Shell
shell
通过远程shell命令来控制模拟器/设备实例
查看 获取更多信息 for more information
shell [<shellCommand>]
连接模拟器/设施执行shell命令,执行完毕后退出远程shell端l
现在的模拟器的功能太强大,从蓝牙,传感器等配件到IMEI,Mac,以及手机硬件信息什么都可以模拟
为了防止用户利用模拟器模仿真机进行刷单,刷流量等恶意 *** 作
需要获取设备返回的一些信息来鉴别设备的真伪。
下面是整理的模拟器和真机的区别
虽然大部分都可以模仿,伪造,但是如果综合所有维度来监控,应该不存在太大问题。
一,native方式。
通过c代码读取设备中的配置和硬件相关信息。
1,diskstats
获取闪存的分区状态信息。
int fd = open(“/proc/diskstats”, O_RDONLY);
bytes = read(fd, buf, bytes);
区别:真机下都有mmcblk0分区,但是模拟器没有分区信息。
2,mac地址。
通过socket和ioctl读取mac地址。
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
ioctl(sockfd, SIOCGIFCONF, (char)&ifc);
ioctl(sockfd, SIOCGIFADDR, &ifr[i])
ioctl(sockfd, SIOCGIFHWADDR, (char)&ifr[i])
区别:真机可以获取wlan0的ip和mac地址,模拟器只能获取eth0的ip和mac地址;
3,有用的prop信息。
__system_property_get(key, buf);
区别: 模拟器没有robootserialno和roserialno属性,真机中为机器序列号。
模拟器 rohardware属性为goldfish,真机为各自的型号。
4,cpu信息。
int fd = open(“/proc/cpuinfo”, O_RDONLY);
bytes = read(fd, buf, bytes);
区别:模拟器中cpuinfo的硬件为Goldfish。
5,drivers
int fd = open(“/proc/tty/drivers”, O_RDONLY);
区别:模拟器中包含goldfish的驱动
6,模拟器特有文件。
int fd = open(“/dev/socket/qemud”, O_RDONLY);
int fd = open(“/dev/qemu_pipe”, O_RDONLY);
区别:模拟器专有的文件,真机中没有。
二,传统的方式:
通过Java层的代码获取,可以有以下方式:
1,IMEI和IMSI
IMEI 移动设备国际身份码。
IMSI IMSI国际移动用户识别码,储存在SIM卡中
final TelephonyManager tm = (TelephonyManager) getBaseContext()getSystemService(ContextTELEPHONY_SERVICE);
String imei = tmgetDeviceId();
String imsi = tmgetSubscriberId();
设备1:354273055927169 / null(无卡)
设备2:862966024243759 / 460011040618938
模拟器:000000000000000 / 310260000000000
2,Serial序列号
String serial = androidosBuildSERIAL;
设备1:4df78680771b117b
设备2:OBAI5HDQZPDIRCQG
模拟器:unknown
3,android_id
String android_id = SecuregetString(getContentResolver(), SecureANDROID_ID);
设备和模拟器都有,16位。
4,Mac地址
WifiManager wifimanage=(WifiManager)getSystemService(ContextWIFI_SERVICE); WifiInfo wifiinfo= wifimanagegetConnectionInfo();
设备1:88:32:9b:1e:49:20
设备2:f8:a4:5f:fd:56:17
模拟器:null
转载自:
>
Android adb指令的优点如下:
1Android 调试桥(adb)是多种用途的工具,该工具可以帮助方便的管理设备或模拟器 的状态。可以快速的通过shell端使用adb命令启动客户端。 其他Android工具比如说ADT插件和DDMS同样可以产生adb客户端
2给特定的模拟器/设备实例发送命令。
如果有多个模拟器/设备实例在运行,在发布adb命令时需要指定一个目标实例。 这样做,请使用-s 选项的命令。在使用的-s 选项是:adb -s <serialNumber> <command>
如上所示,给一个命令指定了目标实例,这个目标实例使用由adb分配的序列号。
3可以通过简单的指令安装软件到设备上。
可以使用adb从你的开发电脑上复制一个应用程序,并且将其安装在一个模拟器/设备实例。像这样做,使用install 命令。这个install 命令要求你必须指定你所要安装的apk文件的路径:adb install <path_to_apk>
4转发端口。
可以使用 forward 命令进行任意端口的转发——一个模拟器/设备实例的某一特定主机端口向另一不同端口的转发请求。下面演示了如何建立从主机端口6100到模拟器/设备端口7100的转发。adb forward tcp:6100 tcp:7100
5从模拟器/设备中拷入或拷出文件。
可以使用adbpull ,push 命令将文件复制到一个模拟器/设备实例的数据文件或是从数据文件中复制。install 命令只将一个apk文件复制到一个特定的位置,与其不同的是,pull 和 push 命令可令你复制任意的目录和文件到一个模拟器/设备实例的任何位置。
从模拟器或者设备中复制文件或目录,使用(如下命):adb pull <remote> <local>
以上就是关于Android手机在开发调试时logcat不显示输出信息的办法全部的内容,包括:Android手机在开发调试时logcat不显示输出信息的办法、android studio怎么改hosts文件、如何判断Android设备是真机还是模拟器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)