注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

liangxh2008的博客

 
 
 

日志

 
 

Android -很全的android操作内容丰富  

2010-04-26 16:11:38|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

te< te<

2月28日

原创 Android 下使用Gdb在emulator中进行程序调试(转载)http://miaozl.spaces.live.com/?_c11_BlogPart_pagedir=Next&_c11_BlogPart_handle=cns!F408F266382E09FE!717&_c11_BlogPart_BlogPart=blogview&_c=BlogPart

在Android系统的emulator 里,可以有两种方式Gdb调试:直接利用Gdb调试和GdbServer进行调试。

1、利用Gdb Server进行调试:

A、从下面的链接中下载针对Android的Gdb Server

    http://www.billrocks.org/android_libs/bin/

B、把下载的Gdb Server安装到你的emulator 中

    1)、 启动emulator

    2)、下载Gdb Server到你的emulator

    打开一个终端,运行:

    $ adb shell
    #cd data
    #mkdir bin
    在另外一个终端里运行:
    $ adb push gdbserver /data/bin

    这样通过Android自己的adb,把gdbserver 下载到emulator 中了。
C、运行gdbserver :

     # /data/bin/gdbserver 10.0.2.2:1234 [args...]

D、回到另一终端,映射端口:

       $telnet localhost 5554

       telnet到emulator 中,运行下面的命令:

       redir add tcp:1234:1234

E、在第三个终端中运行 gdb:

       $gdb test

       test 是你要调试的程序,然后在gdb命令行运行:

       (gdb) target remote localhost:1234

       然后你就可以像以前用gdb那样进行程序调试了。

2、直接用本地Gdb进行调试

A、从下面的链接中下载Android调试包,它是用Android的toolchain编译好的二进制文件:

      http://ortegaalfredo.googlepages.com/android-debug.tbz

B、解压调试包,然后把gdb下载到你的emulator 中,当然如果你有真的手机,也可以这样调试:

   $adb push gdb /data/bin

C、利用adb连接到emulator

   $adb shell

   运行gdb,会出现下面的信息:

   # /data/bin/gdb

dlopen failed on 'libthread_db.so.1' - libthread_db.so.1: cannot open shared object file: No such file or directory
GDB will not be able to debug pthreads.

GNU gdb 6.7
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=arm-none-linux-gnueabi --target=".
(gdb)

 D、    然后你就可以像以前用gdb那样对程序进行调试了。

转载地址:http://blog.csdn.net/gogofly_lee/archive/2008/12/31/3669483.aspx

Android编译本地C++程序方法(转载)

在Android平台上程序以Java形式运行在Dalvik模拟器上,但Android作为一个Linux内核系统完全可以执行Navtive C++程序,主要的步骤如下:

        1.下载ARM C++交叉编译器 http://www.codesourcery.com/gnu_toolchains/arm/portal/subscription3057

  2.编写本地C++代码,如Hello Wolrd,可以使用标准库STL。编译的命令行如下

  arm-none-linux-gnueabi-g++.exe -static -o android123 android123.cpp

  首先运行arm-none-linux-gnueabi-g++.exe程序-static 参数代表静态库,-o为输出名称android123,最后的android123.cpp为源代码。

  3.运行模拟器,用cmd在sdkTools目录夏之星 adb push android123 /system/sbin/android123

  4.设置访问权限,通过Linux的Shell,在cmd下设置所有用户完全控制权限adb shell chmod 777 /system/sbin/android123

  5.执行这个android123程序,输入adb shell cd /system/sbin/android123即可


android 调试桥(adb)

概要

Android 调试系统是一个面对客户服务系统,包括三个组成部分:

  • 一个在你用于开发程序的电脑上运行的客户端。你可以通过shell端使用adb命令启动客户端。 其他Android工具比如说ADT插件和DDMS同样可以产生adb客户端.
  • 在你用于发的机器上作为后台进程运行的服务器。该服务器负责管理客户端与运行于模拟器或设备上的adb守护程序(daemon)之间的通信。.
  • 一个以后台进程的形式运行于模拟器或设备上的守护程序(daemon)。.

当你启动一个adb客户端,客户端首先确认是否已有一个adb服务进程在运行。如果没有,则启动服务进程。当服务器运行, adb服务器就会绑定本地的TCP端口5037并监听adb客户端发来的命令,—所有的adb客户端都是用端口 5037与adb服务器对话的.

接着服务器将所有运行中的模拟器或设备实例建立连接。它通过扫描所有5555到5585范 围内的奇数端口来定位所有的模拟器或设备。一旦服务器找到了adb守护程序,它将建立一个到该端口的连接。请注意任何模拟器或设备实例会取得两个连续的端 口——一个偶数端口用来相应控制台的连接,和一个奇数端口用来响应adb连接。比如说:

模拟器1,控制台:端口5554
模拟器1,Adb端口5555
控制台:端口 5556
Adb端口5557…

如上所示,模拟器实例通过5555端口连接adb,就如同使用5554端口连接控制台一样.

一旦服务器与所有模拟器实例建立连接,就可以使用adb命令控制和访问该实例。因为服务器管理模拟器/设备实例的连接,和控制处理从来自多个adb客户端来的命令,你可以通过任何客户端(或脚本)来控制任何模拟器或设备实例.

以下的部分描述通过命令使用adb和管理模拟器/设备的状态。要注意的是如果你用,装有 ADT插件的Eclipse开发Android程序,你就不需要通过命令行使用adb。ADT插件已经透明的把adb集成到Eclipse中了,当然,如 果必要的话你也可以仍然直接使用adb,比如说调试.


给特定的模拟器/设备实例发送命令

如果有多个模拟器/设备实例在运行,在发布adb命令时需要指定一个目标实例。 这样做,请使用de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<-sde< 选项的命令。在使用的de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<-sde< 选项是

adb -s <serialNumber> <command>

如上所示,给一个命令指定了目标实例,这个目标实例使用由adb分配的序列号。你可以使用 de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<devicesde< 命令来获得运行着的模拟器/设备实例的序列号

示例如下:

adb -s emulator-5556 install helloWorld.apk

注意这点,如果没有指定一个目标模拟器/设备实例就执行 de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<-sde< 这个命令的话,adb会产生一个错误.


转发端口

可以使用 de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<forwardde< 命令进行任意端口的转发——一个模拟器/设备实例的某一特定主机端口向另一不同端口的转发请求。下面演示了如何建立从主机端口6100到模拟器/设备端口7100的转发。

adb forward tcp:6100 tcp:7100

同样地,可以使用adb来建立命名为抽象的UNIX域套接口,上述过程如下所示:

adb forward tcp:6100 local:logd

UI/软件 试验程序 Monkey


当Monkey程序在模拟器或设备运行的时候,如果用户出发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件.


最简单的方法就是用用下面的命令来使用Monkey,这个命令将会启动你的软件并且触发500个事件.


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

更多的关于命令Monkey的命令的信息,可以查看UI/Application Exerciser Monkey documentation page.


其它的shell命令

下面的表格列出了一些adbshell命令,如果需要全部的命令和程序,可以启动模拟器实例并且用de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<adb -helpde< 命令 .

adb shell ls /system/bin

对大部门命令来说,help都是可用的.

Shell Command Description Comments
de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<dumpsysde< 清除屏幕中的系统数据n. Dalvik Debug Monitor Service(DDMS)工具提供了完整的调试、.
de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<dumpstatede< 清除一个文件的状态.
de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<logcat [<option>]… [<filter-spec>]…de< 启动信息日志并且但因输出到屏幕上.
de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<dmesgde< 输出主要的调试信息到屏幕上.
de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<startde< 启动或重启一个模拟器/设备实例.
de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<stopde< 关闭一个模拟器/设备实例.

查看可用日志缓冲区


Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到日志信息,你需要通过de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<-bde< 选项来启动de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<logcatde< 。如果要使用循环缓冲区,你需要查看剩余的循环缓冲期:


  • de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<radiode< — 查看缓冲区的相关的信息.
  • de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<eventsde< — 查看和事件相关的的缓冲区.
  • de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<mainde< — 查看主要的日志缓冲区

de style="font-family: 'Courier New',Courier,Fixed; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1.1em; line-height: normal; font-size-adjust: none; font-stretch: normal;"<-bde< 选项使用方法:


[adb] logcat [-b <buffer>]

下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息:


adb logcat -b radio


android下程序调试
android程序下用System已经是失效了(起码我用是失效了的),那么如何调试程序呢?
第一种是用Debug,设个断点就可以跟踪,但是我觉得不爽,我用System.out用惯了,不用System.out也可以用Log的。
第二种就是我要介绍的Log,看了别人介绍的方法之后,自己亲身试验了再写上来的哦~。首先简单介绍一下AndroidAndroid实际上应该算是一种Linux移动平台的另一个版本(我对Android研究不深,我就是这么认为的),那么既然是Linux就必定会用到命令。那么如何用命令运行程序呢?用adb命令!键入“cmd”,再键入“adb shell”,出现了个“#”号,恭喜恭喜,你可以使用命令来控制Android了。
运行“am -help”,可以查看“am”命令的帮助信息,试试运行“am start -n com.google.android.browser/com.google.android.browser.BrowserActivity”看看?呵呵,在模拟器里面可以看到运行了浏览器,哈哈,就是这么简单(简单个P,为了找这个东西花了我好久的时间)。
还有:
//运行浏览器,打开中华网
# am start -a android.intent.action.VIEW -d http://www.china.com
am start -a android.intent.action.VIEW -d http://www.china.com
Starting: Intent { action=android.intent.action.VIEW data=http://www.china.com }

//拨打电话,号码是123456789
# am start -a android.intent.action.CALL -d tel:123456789
am start -a android.intent.action.CALL -d tel:123456789
Starting: Intent { action=android.intent.action.CALL data=tel:123456789 }


# am start -a android.intent.action.ALL_APPS
am start -a android.intent.action.ALL_APPS
Starting: Intent { action=android.intent.action.ALL_APPS }

//google地图,到shanghai这个点包(注:点包为方言,就是地方的意思)
# am start -a android.intent.action.VIEW geo:0,0?q=shanghai
am start -a android.intent.action.VIEW geo:0,0?q=shanghai
Starting: Intent { action=android.intent.action.VIEW data=geo:0,0?q=shanghai }
好了,简单的介绍了一下使用命令,然后如何查看输出语句呢?在Android中可以使用Log类,Log类在android.util包中。Log 类提供了若干静态方法 :
Log.v(String tag, String msg);
Log.d(String tag, String msg);
Log.i(String tag, String msg);
Log.w(String tag, String msg);
Log.e(String tag, String msg);
分别对应 Verbose,Debug,Info,Warning,Error。
tag是一个标识,可以是任意字符串,通常可以使用类名+方法名, 主要是用来在查看日志时提供一个筛选条件.
程序运行后 并不会在 ide的控制台内输出任何信息,那么如何查看日志输出?使用"adb logcat" 命令:
adb logcat
当执行 adb logcat 后会以tail方式实时显示出所有的日志信息.
这时候我们通常需要对信息进行过滤,来显示我们需要的信息, 这时候我们指定的 tag就派上了用场.
adb logcat -s MyAndroid:I
解释:只显示tag为MyAndroid,级别为I或级别高于I(Warning,Error)的日志信息。
还有一种更好的方法,如果你的IDE用的是Eclipse的话,在show view中选择Locat就可以直接看到输出了。
好了,调式自己的Android程序吧。

  评论这张
 
阅读(1388)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017