android 常用方法有哪些方法,Android 开发常用方法及命令

1、APK常用调试命令

am命令

dumpsys 命令

pm命令

其他常用命令

2、堆栈相关

addr2line

gdb配合core dump调试

打印堆栈

3、系统层面的调试命令

dumpsys

bugreport

cat命令看节点信息

top和free查看cpu和内存情况

procrank 查看内存占用情况

1、APK常用调试命令

am命令

1)启动某个apk

启动的方法为

am start -n 包(package)名/活动(activity)全路径

比如:

am start -n com.android.music/com.android.music.VideoBrowserActivity

或者am start -n com.android.music/.VideoBrowserActivity

am start -a action

可以指定action来启动apk

但你不知道activity时,monkey -p 包名 1 ,也可以启动apk

2)发送指定广播:

am broadcast -a xxx广播

如开机广播:

am broadcast -a android.intent.action.BOOT_COMPLETED

dumpsys 命令

获取当前焦点所在activity

dumpsys activity | grep "mFocusedActivity"

获取当前最上面的activity

dumpsys activity | grep -i "top"

查看Android系统广播发送记录

dumpsys |grep BroadcastRecord

查看apk相关信息

dumpsys package xxx(包名)

pm命令

1)安装某个apk

pm install xxx.apk

比如:pm install /data/3dijoy_fane.apk

有时候已经安装过没法在安装, 加入-r选项就可以了。

2)查看当前所有apk及路径

pm -lf

其他常用命令

aapt 命令可应用于查看apk包名、主activity、版本等很多信息

apk 系统签名

1) 在platform/build/target/product/security/目录中找到platform.pk8 platform.x509.pem等签名文件

2) 在/out/host/linux-x86/framework/目录下有 signapk.jar

3) 使用命令java -jar signapk.jar platform.x509.pem platform.pk8 MyDemo.apk(需要签名的apk) MyDemo_signed.apk(生成的签过名的APK)

2、堆栈相关

当java层或者native层出问题时,系统本身会有相应的堆栈生成。

如ANR会在/data/anr/traces.txt

如程序崩溃,则会在/data/tombstone下生成文件

java层的堆栈比较容易跟踪,native层则需要用addr2line转换查看,有时候也会用gdb来进行调试。

addr2line

使用方法:addr2line -e xxx address 可以addr2line --help查看

addr2line 是linux中常用的追踪堆栈的调试工具,在android中,一些库的死机,可以用addr2line 来找到问题所在,是很方便的。前提是该库没有strip,所以我们调试时,要去out目录下的obj中找到相应的未strip的库。

例子:

I/DEBUG ( 1444): backtrace:

I/DEBUG ( 1444): #00 pc 00022048 /system/lib/libc.so (tgkill+12)

I/DEBUG ( 1444): #01 pc 00013099 /system/lib/libc.so (pthread_kill+48)

I/DEBUG ( 1444): #02 pc 000132ad /system/lib/libc.so (raise+10)

I/DEBUG ( 1444): #03 pc 0003b9c0 /system/lib/libc.so (__aeabi_idiv0+8)

I/DEBUG ( 1444): #04 pc 000003cf /system/lib/libfunc.so (function+6)

addr2line -e ./out/target/product/Hi3796MV100/obj/SHARED_LIBRARIES/libfunc_intermediates/LINKED/libfunc.so 000003cf

/home/wusc/Hi3796MV100-2015-2-3-CP058/anticopy/function.c:8

这样我们就知道错误是在function.c的第八行

gdb配合core dump调试

使用方法:

1、在终端上输入:ulimit -c unlimited

2、如有需要,可以将coredump放到u盘中,

echo “/mnt/usb/core-%e-%p-%t” > /proc/sys/kernel/core_pattern

3、执行可执行文件,并产生core dump

4、修改权限chmod 777 core

5、执行gdb main.out core

6、gdb常用命令bt -n可以追溯出问题代码的堆栈,-n为行数

打印堆栈

当然,开发时我们也可以自己增加堆栈,跟踪代码:

1、 java代码中打印堆栈

Java代码打印堆栈比较简单, 堆栈信息获取和输出。通常的方法是使用exception的printStackTrace()方法:

try {

...

} catch (RemoteException e) {

e.printStackTrace();

...

}

当然也可以只打印堆栈不退出,这样就比较方便分析代码的动态运行情况。Java代码中插入堆栈打印的方法如下:

Log.d(TAG,Log.getStackTraceString(new Throwable()));

通常我们还可以结合ps命令,来查看相应的进程是谁,清晰的看到代码调用过程。

2、C++代码中打印堆栈

C++也是支持异常处理的,异常处理库中,已经包含了获取backtrace的接口,Android也是利用这个接口来打印堆栈信息的。在Android的C++中,已经集成了一个工具类CallStack,在libutils.so中。使用方法:

#include ...

CallStack stack;

stack.update();

stack.dump();

3、系统层面的调试命令

dumpsys

使用方法:dumpsys service

列出该service的相关信息。十分强大,可以看到很多信息。

service可以通过service list命令来查看系统有哪些service,通常,使用dumpsys还会加上grep来过滤出想要的字段,不然信息有点太多。

bugreport

使用方法:bugreport > xxx.log

这个命令实际应用中非常有用,能保存开机之后详细的dumpsys,dumpstate和logcat信息。

cat命令看节点信息

这个就不说了,因为每个芯片按照自己对kernel的不同修改,节点信息肯定是不一样的,但是基本上我们都是可以通过sys和proc来查看到系统运行的状态,这个在实际工作中十分有用。

top和free查看cpu和内存情况

使用方法:top -t -d 1 -m 10每隔1s中,最多显示10个线程。

top -p pid

top --help

查看进程(线程)对cpu memory的使用情况。

free命令可以列出当前内存使用情况。

上面的这几个命令,可以配合watch命令使用,这样即可以自动在一定间隔内一直查询

watch -n xxx(间隔秒数) yyyy(命令)

procrank 查看内存占用情况

procrank 是 Android 自带一款调试工具,用来输出进程的内存快照,便于有效的观察进程的内存占用情况。

包括如下内存信息:

VSS: Virtual Set Size 虚拟耗用内存大小(包含共享库占用的内存)

RSS: Resident Set Size 实际使用物理内存大小(包含共享库占用的内存)

PSS: Proportional Set Size 实际使用的物理内存大小(比例分配共享库占用的内存)

USS: Unique Set Size 进程独自占用的物理内存大小(不包含共享库占用的内存)

命令格式:

procrank [ -W ] [ -v | -r | -p | -u | -h ]

常用指令说明

-v:按照 VSS 排序15 Procrank 和 Dumpsys 工具

-r:按照 RSS 排序

-p:按照 PSS 排序

-u:按照 USS 排序

-R:转换为递增[递减]方式排序

-w:只显示 working set 的统计计数

-W:重置 working set 的统计计数

-h:帮助

默认 procrank 输出是通过 PSS 排序。

我们通过查询某个进程 Uss 段内存,如果对应的内存一直增加,则很有可能内存泄漏。如果进程的 Uss 段,回升一段时间之后,稳定在一个固定值,说明内存分配使用正确。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值