android真机和模拟器调试问题.docx
- 文档编号:6555925
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:16
- 大小:497.51KB
android真机和模拟器调试问题.docx
《android真机和模拟器调试问题.docx》由会员分享,可在线阅读,更多相关《android真机和模拟器调试问题.docx(16页珍藏版)》请在冰豆网上搜索。
android真机和模拟器调试问题
Android模拟器调试与真机调试
一、 模拟器调试与真机调试
1. 模拟器调试
运行源码或SDK中的emulator,加参数
2. 真机调试
1) 用usb线连接G1硬件和PC
2) 若是windows系统,则安装驱动
3) 用源码或SDK中的adb命令看硬件是否连接成功
$adbdevices正常调试
4) 注意:
a) 在Linux连接真机时需使用root权限
b) 如果之前连接过模拟器,最好连接前先杀掉adb后台进程
$killalladb
3. Eclipse中调试
若连接真机,未打开模拟器时,直接连接真机调试
若未连接真机,已打开模拟器时,在当前模拟器中调试
若未连接真机,也未打开模拟器时,打开模拟器调试
若只开多个真机或多个模拟器时,同时有多个可连接的设备,弹出列表供用户选择
4. 命令行中使用adb工具调试
连接多个设备时,需要用命令行参数指示设备名或设备类型
$adb–s 设备名shell 设备名由adbdevices列出
Android真机调试配置
最近调试Android游戏,发现模拟器那是相当的卡,尤其是输入的时候,根本无法满足测试需要。
逼不得已只有用真机测试,发现真机真的是比模拟器流畅了得多,但是搭建真机调试环境配置起来还是有些恶心。
真机调试前,请先确定已安装了AndroidSDK下面的USBDriver,否则手机设备无法被识别,另外请注意操作系统版本,Android2.2的程序运行在2.1上面会有问题,程序尽量使用1.6或者2.1的SDK来打包,通用性较好。
参考步骤如下:
下面是我的一些经验:
首先是在手机上设置一下USB开发,步骤:
设置->应用程序->开发 -> 开启USB调试
然后在Eclipse上设置,步骤:
debugconfigurations(点击小虫子的那个小三角)->Target->选择Manual->单击Debug按钮,等待程序打包成.apk并上传到真机上运行
网上很多帖子说要在AndroidManifest.xml中添加
icon="@drawable/icon"android: label="@string/app_name"android: debuggable="true"> 但是我测试了下打开这个真机会比较卡,如果只是为了看运行游戏效果而不是debug跟踪的话,建议不要打开。 个人比较习惯直接运行看效果,出错的话直接打印到屏幕上,开发既流畅,又效率高。 真机在Debug状态下运行,在一些机子中会存在绘图不全的情况,也就是说只会绘制一部分图,有些恶心,但是直接运行的话很正常。 System.out.println()这玩意在Debug时候有些卡。 启动的线程过多也会很卡,千万别创建过多的线程,虽然Android机子性能都比较好,但是还不是电脑那种配置,要用开发J2me的精神去开发Android。 真机提供的最大堆栈大小(heapmaxsize)比模拟器上高很多,基本不存在图片加载超内存的问题。 (在模拟器创建的时候可以自己设置堆栈大小,MaxVMapplicationheapsize,建议WVGA设置到100M,WQVGA设置到50M,QVGA设置到20M) android调试 1人收藏此文章, 收藏此文章发表于3个月前,已有334次阅读共0个评论 1人收藏此文章 通过学习,发现主要用到以下两种方式来调试和查找bug: adb+ddms. adb(AndroidDebugBridge)是Android提供的一个通用的调试工具,借助这个工具,我们可以管理设备或手机模拟器的状态。 还可以进行以下的操作: 1、快速更新设备或手机模拟器中的代码,如应用或Android系统升级; 2、在设备上运行shell命令; 3、管理设备或手机模拟器上的预定端口; 4、在设备或手机模拟器上复制或粘贴文件; 在网站和AdbWinApi.dll到C: \wINDOWS\system32,在windows的dos下,输入adb,如果没有出现adb不是内部或者外部命令,则说明ok了。 本方式说的是是在虚拟环境下测试的,非真机. 常用命令 adbshell-登录设备shell,后面也可直接跟运行命令。 如: adbshellrm-r/system/sd/app adbpull-从手机中下载文件到电脑上。 如: adbpull/data/app_s/Stock.apkC: \\Stock.apk adbpush-从电脑中上传文件到手机上。 如: adbpushC: \\Stock.apk/data/app_s/Stock.apk adbinstall-安装软件到手机上。 如: adbinstallC: \\apps2sd.apk adbuninstall-卸载手机上的软件。 如: adbuninstalllinda.apk DDMS的全称是DalvikDebugMonitorService,它为我们提供例如: 为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。 在安装好的androidsdk包里面,包含了ddms,启动eclipse,在Eclipes的debug中,选择other,在弹出的窗口中,可以看到ddms,点击就可以显示出来了,详细说明,请看 Android实现真机远程调试并适应7寸屏大小 2010-07-1414: 09byTerry_龙,2309visits, 网摘, 收藏, 编辑 学android也有一段时间了,一直都是用Android提供的模拟器运行测试例子,也不知道做的东东在真机是啥效果。 今天跟公司要了一个七寸屏的车载屏做真机测试。 下面是我实现真机远程调试的步骤: 此方法同样适用于使用手机做真机测试 1、接入USB 选择“是”,单击下一步 单击“下一步”,去查找我们之前下载的SDK目录,找到usb_driver,如图: 点击“确定”,等其为我们安装驱动 接着只要等其安装完成即可实现在Windows下与真机进行调试或者安装程序等操作。 在DOS界面上敲入adbdevices可以得到该机的序号 到了这一步,可算是完成了一大半的工程了,不过我在下面的时候碰到了一个问题,就是应用程序在7寸屏运行的时候无法全屏化操作,即使我使用如下代码打印屏幕大小也始终显示320*480 DisplayMetrics dm=new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); Toast.makeText(ButtonActivity.this, Integer.toString(dm.heightPixels)+": "+Integer.toString(dm.widthPixels) , Toast.LENGTH_SHORT).show(); 这个问题折腾了我一上午,上网查了一下也不得答案,着实让人郁闷。 问题截图如下: 仔细察看明细无法全屏,而是跟手机的尺寸大小一样,后来一同事说要指定目标SDK版本才可以,发了一小段代码给我放在配置文件上面,之后运行程序调试一下,果真可以实现全屏化。 代码如下: targetSdkVersion="4"/> 加入上面代码运行效果如下: 经测试,发现版本号必须为4以上,才可支持适应全屏化,也就是说即便你写一个100也可以支持。 Tip: 使用真机调试和使用模拟器调试操作是相同的。 android真机调试的一些总结 android 2011-01-1010: 55: 54 阅读74 评论1 字号: 大中小 订阅 首先需要说明的是,标准版android和乐phone的android在某些方面都是不太兼容的,我在win7下,它们的模拟器和adb.exe就不太兼容。 1: 首先是要下载你手机的驱动,一般官网都会提供。 我这里就提供一个乐phone的( 2: 下载好后就安装。 然后在你的手机上设置调试模式(在: 设置->开发->USB调试,勾上就好了;乐phone中就是: 系统设置->应用程序设置->开发->USB调试) 3: 然后连接你的手机,在设备管理器中会识别成这样 4: 这一步要注意,如果你想识别出乐phone,就要使用乐phone提供的adb.exe,而不要用官方版的,所以: d: cd D: \Program\LEOS_mobile_sdk_1.7.0_101029_windows\tools D: \Program\LEOS_mobile_sdk_1.7.0_101029_windows\tools>adbdevices adbserverisoutofdate. killing... *daemonstartedsuccessfully* Listofdevicesattached 1234567890ABCDEF device Coolpad_N930 device 看到这个就说明连接成功了 5: 现在你可以在eclipse中用真机调试了 run->runconfiguration->设置manual就可以了,到时会让你选择可用的设备的 Android平台代码很多,关系也很复杂,通常我们调试程序的时候是无法跟踪到Androidframeworkcode里的,如果能调试跟踪Androidsourcecode将给我们这些初学者带来很多便利,本文将给出一个调试跟踪Androidsourcecode的方法。 1. 首先,得到Android源代码(可参考之前的文章--如何获取Android源代码并编译.doc),并且编译,得到outputfile,在(Androidsource)/out目录下,也可通过别的途径获取Androidsourcecode(以androidsrc.tgz为例)和别人编译好的outputfile(out.tgz) 2. 解压缩这两个tgz文件,并把解压出来的out目录放到myandroid目录下,如下图所示。 3. 拷贝myandroid\development\ide\eclipse\.classpath到myandroid\.classpath. 4. 拷贝myandroid\out\target\product\generic\*.img到{AndroidSDK}\tools\lib\images并且覆盖源文件. 5. 运行{AndroidSDK}\tools目录下的emulator.exe. 6. 运行{AndroidSDK}\tools目录下的ddms.bat。 你可以看到下面的窗口,里面会列出当前emulator里跑的进程: 7. 启动eclipse,按照这个步骤File->New->JavaProject(不是AndroidProject! )->Createprojectfromexistingsource选到myandroid目录. 8. 在经过长时间等待之后,Androidsourcecode将被导入project,正常情况下应该没有error,但是会有很多warning,如果有error后面的debug将不会成功,原因可能是outputfile,out.tgz在解压得过程中出错,重新copyout.tgz,或者完整拷贝out/目录到本地目录下,即可解决。 9. 选择想要调试的进程在DDMS,用phone进程为例,ddms一定要在eclipse之前启动,否则eclipse启动的时候也会启一个ddms,会造成冲突。 10.在eclipse里,Run->DebugConfiguration->RemoteJavaApplication->New,设置Connectionportto8700(DDMS’s默认端口,你可以改变它). 11.设置断点在sourcecode,然后就可以像往常一样进行调试了。 真机usb调试 首先在真机里选择USB调试,具体的在: Setting(设置)—>Applications(应用程序)-->Development(开发)USBdebugging(usb调试),将这个勾上,然后用usb数据线将真机与pc机连接 Android的调试原理--学习笔记 2009年06月06日星期六23: 17 /*今天学习了用Eclipse来调试Android的代码,首次使用,可能有的问题很基本,有问题请指出,交流嘛: )*/ (笔记中提到的Emulator也可以理解成Device) 一、adb的介绍: adb(AndroidDebugBridge)包括三个部分: 1)adbclient,运行在PC上(为DDMS,即IDE工作) 2)adbdaemon(守护进程),运行于Emulator(为与Emulator中的VM交互工作); 3)adbserver(服务进程),运行在PC(任务管理器上有),管理着adbclient和adbdaemon的通信.server与client通信的端口是是5037, adbserver会与emulator交互的,使用的端口有两个,一个是5554专门用于与Emulator实例的连接,那么数据可以从Emulator转发给IDE控制台了,另一个则是5555,专门与adbdaemon连接为后面调试使用。 PS: Emulator/Device占用两个(一组)端口,一个为偶数的5554,一个奇数的5555。 如果还开启其他的Emulator,则使用的另一组端口是5556,5557,一直到5585. adbserver开启时就是通过查找5555-5585之间端口来建立与模拟器的连接的,建立连接后就可以用adb的相关命令了。 如果您安装了ADT就基本不需要adb的命令了(因为DDMS会调用ADB进行透明操作) 关于本机的端口使用情况可以使用netstat[-a][-n]来查询验证一下。 二、观察一组数据: 1,在开启仿真器时有一些打印: [2009-06-0614: 04: 16-Helloworld]AndroidLaunch! [2009-06-0614: 04: 17-Helloworld]adbisrunningnormally. [2009-06-0614: 04: 17-Helloworld]Performingcom.android.hello.Helloworldactivitylaunch [2009-06-0614: 04: 17-Helloworld]AutomaticTargetMode: PreferredAVD'lab'isnotavailable.Launchingnewemulator. [2009-06-0614: 04: 17-Helloworld]LaunchinganewemulatorwithVirtualDevice'lab' [2009-06-0614: 04: 24-Helloworld]Newemulatorfound: emulator-5554 [2009-06-0614: 04: 24-Helloworld]WaitingforHOME('android.process.acore')tobelaunched... [2009-06-0614: 05: 45-Helloworld]HOMEisupondevice'emulator-5554' [2009-06-0614: 05: 45-Helloworld]UploadingHelloworld.apkontodevice'emulator-5554' [2009-06-0614: 05: 45-Helloworld]InstallingHelloworld.apk... 每一行都基本表示一个命令在执行,emulator-5554是仿真器的初始端口了。 最后一句等于命令: adb-semulator-5554installhelloworld.apk 如果报了类似以下的错误,那得(加个-r)重装,因为该App已经在该Emulator下运行了 DDMdispatchregwaittimeout Can'tdispatchDDMchunk52454151: nohandlerdefined Can'tdispatchDDMchunk48454c4f: nohandlerdefined 网上没有看到这个错误因此顺便提下解决方法: adb-semulator-5554install-rhelloworld.apk 三,了解下DDMS: (都是adb的命令相当的功能) DDMS有几个界面: 1)Devices: 可以查看到当前运行的Emulator和其内运行的应用 2)Emulatorcontrol,即仿真器的硬件设置项等: 设置当前注册的网络状态(Home,Roaming,UnRegistered,Searching) 数据业务的速度设置: 有GSM,GPRS,EDGE,UMTS,HSDPA(3.5G? ) 还有载入KML或NMEA文件来模拟GPS数据 3)还可以查询Threads,Heap,FileExplorer、重启adb,抓屏等,其他都是在调用adb。 4)关于Logcat 从Windows->Prereference->android->DDMS->LogginLevel进行设置打印等级, 不过默认下只打印入口线程的信息,射频和Tapi的动作信息要通过adbLogcat-bradio打开, os-events相关的打印通过adblogcat-bevents.打开, Log默认被写入到手机的/data/anr/traces.txt文件中。 四,Debug面板 这个面板对于熟悉Eclipse的用户来说应该不用看了。 通过以下三步将自己的应用或将已经跑起来的应用加入调试列表: 1)选择Devices列表中Yourapp, 2)选择臭虫按钮将该程序加载进调试状态 3)OK,加断点吧。 不过源代码要最新的否则断点不起作用。 五、DDMS如何让IDE的调试工作起来呢? 1)有几个组成: 一个是adb(AndroidDebugBridge)参考第一部分,它起到调试桥的作用; 另一类是运行在Device/Emulator端的adbdaemon,VM,debugger,yourApplicatioin, 通过下面句话就可以理解它们的关系: 一个App跑在一个进程中,这个进程又被一个VM绑定,都是一对一的,但VM与Emulator显然是多对一的, 那调试时debugger从VM中拿到栈线程进程等信息,而daemon的作用仅仅是被DDMS用于建立一条连接(看下面)。 最后一类则是运行在PC上的DDMSdebugger; 这个debugger是IDE的调试器,你可以改成另一个调试器; DDMS是DalvikDebugMonitorService,负责建立调试的作用,它仅有两个Service,其他的功能都是通过ADBclient.让IDE与Emulator交互起来的。 2)开启IDE时,DDMS会建立一个Devicemonitoringservice用于监控Emulator,因为可以开启多个Emulator嘛; 如果找到一个Emulator,那么DDMS才会再开启另一个Service叫VMMonitoringSevice用于监控该Emulator下的VM;第一部分提到adb有三个部分,其中的adbclient可以多个实例的,DDMS的Service通过从ADBClient与ADbserver的交互结果来维护自身的数据。 如果VMMonitor找到Emulator的一个VM,那么DDMS会利用ADB获取目标VM的进程ID, 同时通过client与daemon建立起与vm的debugger的新连接,注意新连接的交互端口是从8600开始的(n个的话端口是8659+n),这条新连接可以让DDMS获得与VM的实际交互。 剩下的就是DDMS把拿到的数据再扔给ide的debugger(它们之间默认通过8700端口,可更改,因为与VM的交互端口从8600开始使用的话可能会不够的), 这样IDE的Debug视图就能正确工作了.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 模拟器 调试 问题
![提示](https://static.bdocx.com/images/bang_tan.gif)